from cadquery import * import math tabletop_depth = 800 # currently, almost all parameters are derived from the table depth #tabletop_depth = 600 alpha_max = 70 tabletop_adjuster_assembly_spacing = 100 # symmetric distancing assumed feet_adjuster_width = 60 # feet_adjuster is moving part inside adjuster assembly feet_adjuster_lenght = 60 feet_adjuster_height = 60 adjuster_assembly_wall_thickness = 20 # might be different for front and back... adjuster_assembly_length = tabletop_depth - 2*tabletop_adjuster_assembly_spacing adjuster_assembly_width = feet_adjuster_width + 2*adjuster_assembly_wall_thickness adjuster_assembly_height = feet_adjuster_height + 2*adjuster_assembly_wall_thickness bore_holes_distance_feet_adjuster = adjuster_assembly_length - 2*adjuster_assembly_wall_thickness - feet_adjuster_width ld = bore_holes_distance_feet_adjuster lower_feet_bore_holes_distance = bore_holes_distance_feet_adjuster # this is only the case, if min feet angle is 45 degrees lower_h = ld * math.sqrt(2)*math.sin(math.radians(alpha_max)) lower_feet_assambly_pivot_point_from_fixed_leg = ld * math.sqrt(2)*math.cos(math.radians(alpha_max)) lower_feet_assambly_pivot_point_from_moving_end = ld - lower_feet_assambly_pivot_point_from_fixed_leg lower_foot_width = 80 lower_foot_height = 50 lower_foot_length = lower_feet_bore_holes_distance + lower_foot_height lower_feet_assembly_base_plate_height = 20 lower_feet_assembly_side_wall_thickness = 25 lower_feet_assembly_width = 100 lower_feet_assembly_length = lower_feet_bore_holes_distance + lower_foot_height # 2* 1/2 lower_foot_height lower_feet_assembly_height = lower_feet_assembly_base_plate_height + lower_foot_height lower_feet_assembly_side_wall_height = lower_foot_height lower_feet_assembly_side_wall_radius = lower_foot_height/2 lower_feet_assembly_side_wall_bearing_hole_distance_from_outer = lower_feet_assembly_side_wall_radius lower_feet_assembly_side_wall_bearing_hole_distance_from_bottom = lower_feet_assembly_side_wall_radius lower_feet_assembly_bearing_hole_distance_from_assembly_bottom = lower_feet_assembly_base_plate_height + lower_foot_height/2 lower_feet_assembly_bearing_hole_radius = 11 lower_feet_assembly_bearing_hole_depth = 10 lower_feet_assembly_pin_diameter = 10 ## parameter end! # actual parts: lower_foot_base_plate = Workplane("XY").box(lower_feet_assembly_width,lower_foot_length,lower_feet_assembly_base_plate_height)\ .edges("|Z").fillet(lower_feet_assembly_side_wall_thickness/2) lower_foot_side_wall_left = Workplane("YZ").box(lower_foot_length,lower_feet_assembly_side_wall_height,lower_feet_assembly_side_wall_thickness)\ .faces("|Y").edges(">Z").fillet(lower_feet_assembly_side_wall_radius)\ .faces("-X").edges(">Z").fillet(lower_feet_assembly_side_wall_thickness/2)\ .faces("+X").workplane()\ .center(lower_foot_length/2-lower_feet_assembly_side_wall_bearing_hole_distance_from_outer,0).hole(2*lower_feet_assembly_bearing_hole_radius,lower_feet_assembly_bearing_hole_depth)\ lower_foot_bearing_pin_slide = Workplane("YZ",origin=((lower_feet_assembly_side_wall_thickness-lower_feet_assembly_bearing_hole_depth)/2,\ -(lower_feet_bore_holes_distance-lower_feet_assambly_pivot_point_from_moving_end)/2,\ 0))\ .box(lower_feet_assambly_pivot_point_from_moving_end,lower_feet_assembly_pin_diameter,lower_feet_assembly_bearing_hole_depth) lower_foot_bearing_pin_slide = lower_foot_bearing_pin_slide\ .union(Workplane("YZ",origin=(lower_feet_assembly_side_wall_thickness/2-lower_feet_assembly_bearing_hole_depth, -(lower_feet_bore_holes_distance/2-lower_feet_assambly_pivot_point_from_moving_end),0.00001))\ .circle(lower_feet_assembly_pin_diameter/2).extrude(lower_feet_assembly_bearing_hole_depth))\ .union(Workplane("YZ",origin=(lower_feet_assembly_side_wall_thickness/2-lower_feet_assembly_bearing_hole_depth, -(lower_feet_bore_holes_distance/2),0))\ .circle(lower_feet_assembly_pin_diameter/2).extrude(lower_feet_assembly_bearing_hole_depth)) lower_foot_side_wall_left = lower_foot_side_wall_left.cut(lower_foot_bearing_pin_slide) #show_object(lower_foot_side_wall_left) #show_object(lower_foot_bearing_pin_slide) #bearing_pin_slot = Workplane("YZ").center(200,0).box(lower_feet_assambly_pivot_point_from_moving_end,lower_feet_assembly_pin_diameter,lower_feet_assembly_bearing_hole_depth)\ # .workplane(offset=-lower_feet_assembly_bearing_hole_depth/2)\ # .center(-lower_feet_assambly_pivot_point_from_moving_end/2,0).circle(lower_feet_assembly_pin_diameter/2,0).extrude(lower_feet_assembly_bearing_hole_depth)\ # .center(lower_feet_assambly_pivot_point_from_moving_end-0.00001,0).circle(lower_feet_assembly_pin_diameter/2,0).extrude(lower_feet_assembly_bearing_hole_depth) #show_object(bearing_pin_slot) #lower_foot_side_wall_left = lower_foot_side_wall_left.cut(bearing_pin_slot) #show_object(Workplane("YZ").box(lower_feet_assambly_pivot_point_from_moving_end,lower_feet_assembly_pin_diameter,lower_feet_assembly_bearing_hole_depth)\ # .faces("|Y").edges("|X").fillet(4.8)) lower_foot_side_wall_right = lower_foot_side_wall_left.mirror(mirrorPlane="YZ") #show_object(lower_foot_base_plate) #show_object(lower_foot_side_wall_left) #show_object(lower_foot_side_wall_right) lower_foot_assy_left = ( Assembly(lower_foot_base_plate, name='base_plate',loc=Location(Vector(0,0,0))) .add(lower_foot_side_wall_left, name='wall_left',color=Color(1,0,1,0.5), loc=Location(Vector(-(lower_feet_assembly_width-lower_feet_assembly_side_wall_thickness)/2,0,lower_feet_assembly_base_plate_height/2+lower_feet_assembly_side_wall_radius))) .add(lower_foot_side_wall_right, name='wall_right',color=Color(0.5,0,1,0.5), loc=Location(Vector((lower_feet_assembly_width-lower_feet_assembly_side_wall_thickness)/2,0,lower_feet_assembly_base_plate_height/2+lower_feet_assembly_side_wall_radius))) ) show_object(lower_foot_assy_left) #show_object(assy)