from cadquery import * import math import logging logger = logging.getLogger() tabletop_depth = 800 # currently, almost all parameters are derived from the table depth #tabletop_depth = 600 alpha_max = 70 bearings_diam = 22 tabletop_adjuster_assembly_spacing = 100 # symmetric distancing assumed lower_foot_width = 80 lower_foot_height = 50 upper_foot_width = 40 upper_foot_height = 40 tabletop_length = 1500 tabletop_thickness = 40 tabletop_connector_height = upper_foot_height tabletop_connector_width = upper_foot_height tabletop_connector_length = upper_foot_height # cube in adjuster assembly feet_adjuster_width = 60 # feet_adjuster is moving part inside adjuster assembly feet_adjuster_lenght = 60 feet_adjuster_height = 60 feet_adjuster_upper_connector_height = upper_foot_height feet_adjuster_upper_connector_width = upper_foot_height feet_adjuster_upper_connector_length = upper_foot_height feet_adjuster_lower_connector_height = lower_foot_height feet_adjuster_lower_connector_width = lower_foot_height feet_adjuster_lower_connector_length = lower_foot_height adjuster_assembly_wall_thickness = 20 # might be different for front and back... adjuster_assembly_slider_width = 10 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 logger.info(f"Lower h is: {lower_h} (between joins of leg only)") upper_foot_length = math.sqrt(math.pow(ld,2)+math.pow((tabletop_connector_height/2+feet_adjuster_upper_connector_height/2),2)) lower_foot_length = 2*ld/math.sqrt(2) 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! def get_adjuster_assembly_old(): left = Workplane("XZ").vLine(adjuster_assembly_height/2).hLine(adjuster_assembly_wall_thickness+adjuster_assembly_slider_width).vLine(-(adjuster_assembly_height-feet_adjuster_height)/2).hLine(-adjuster_assembly_slider_width).vLineTo(0).mirrorX().extrude(adjuster_assembly_length-2*adjuster_assembly_wall_thickness) right = left.mirror("YZ", basePointVector = (adjuster_assembly_width/2,0,0)) left = left.union(right) return left #return Workplane("XY").box(adjuster_assembly_wall_thickness,adjuster_assembly_length,adjuster_assembly_height).center(10,0).box(10,10,10) def get_adjuster_assembly_left(): return Workplane("XZ").vLine(adjuster_assembly_height/2).hLine(adjuster_assembly_wall_thickness+adjuster_assembly_slider_width).vLine(-(adjuster_assembly_height-feet_adjuster_height)/2).hLine(-adjuster_assembly_slider_width).vLineTo(0).mirrorX().extrude(adjuster_assembly_length-2*adjuster_assembly_wall_thickness) def get_adjuster_assembly_right(): #left.mirror("YZ", basePointVector = (adjuster_assembly_width/2,0,0)) return get_adjuster_assembly_left().mirror("YZ") def get_adjuster_assembly_front_back_plate(): return Workplane("XY").box(adjuster_assembly_width,adjuster_assembly_wall_thickness,adjuster_assembly_height).faces(">Y").workplane().hole(22) def get_adjuster_assembly(): a = Assembly(None) l = get_adjuster_assembly_left() l.vertices("Y and >Z").tag("upperCorner") a.add(l, name="l") a.add(get_adjuster_assembly_right(), name="r", color=Color("red")) f = get_adjuster_assembly_front_back_plate() f.vertices("Z").tag("upperInnerCorner") a.add(f, name="f", color=Color("orange")) a.add(get_adjuster_assembly_front_back_plate(), name="b") return a ### das hier ist noch falsch... constraints chaos!!! def test_constraints(a): a.constrain("l@faces@Y", "Plane") a.constrain("l@faces@>Y", "f@faces@Y", "Plane") a.constrain("r@faces@>Y", "f@faces@X", "f@faces@>X", "Axis") #a.constrain("l@faces@X", "b@faces@>X", "Axis") #a.constrain("l@faces@X").workplane().hole(6)\ .faces(">X").workplane().hole(bearings_diam,8)\ .faces("Z").workplane().center(tabletop_connector_length/2,0).rect(tabletop_connector_length-10, tabletop_connector_width-10, forConstruction=True)\ .vertices().cskHole(4,5,45,15)\ def get_ap_attachment_rail(): pass # TODO -> better one piece for ap attachment def get_ap_attachment_plate(): return Workplane("XY").box(tabletop_connector_length+30,tabletop_connector_width,2)\ .faces(">Z").workplane().rect(tabletop_connector_length-10, tabletop_connector_width-10, forConstruction=True)\ .vertices().cskHole(4,5,45)\ .faces("Z", "ap_a_p@faces@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_feet_assembly_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) return lower_foot_side_wall_left def get_lower_foot_side_wall_right(): return get_lower_foot_side_wall_left().mirror(mirrorPlane="YZ") def get_lower_foot_front_wall(): return Workplane("XY").box(lower_feet_assembly_width-2*lower_feet_assembly_side_wall_thickness,lower_feet_assembly_side_wall_radius,lower_feet_assembly_side_wall_radius)\ .faces(">X").vertices(">YZ").workplane(centerOption="CenterOfMass")\ .circle(lower_feet_assembly_side_wall_radius).cutThruAll() def get_lower_foot_end_wall(): return get_lower_foot_front_wall().mirror(mirrorPlane="XZ") def get_lower_foot_assembly(): return Assembly(get_lower_foot_base_plate(), name='base_plate')\ .add(get_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(get_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)))\ .add(get_lower_foot_front_wall(), name='wall_front',color=Color(1,0,1,0.5), loc=Location(Vector(0,-(lower_feet_assembly_length-lower_feet_assembly_side_wall_radius)/2,lower_feet_assembly_base_plate_height)))\ .add(get_lower_foot_end_wall(), name='wall_end',color=Color(1,0,1,0.5), loc=Location(Vector(0,(lower_feet_assembly_length-lower_feet_assembly_side_wall_radius)/2,lower_feet_assembly_base_plate_height))) #show_object(get_lower_foot_assembly()) test_a = Assembly()\ .add(get_lower_foot_assembly(), name="left_foot_assembly", color=Color("red"), loc=Location(Vector(0,0,0)))\ .add(get_lower_foot_assembly(), name="right_foot_assembly", color=Color("white"), loc=Location(Vector(500,0,0))) #show_object(get_lower_foot_assembly()) #show_object(get_lower_foot_front_wall()) #show_object(get_lower_foot_end_wall()) #show_object(test_a)