From e6e3cf479cb87dbaf4161a100d20cac64c8942e3 Mon Sep 17 00:00:00 2001 From: Tobias Kurze Date: Mon, 15 Feb 2021 23:26:19 +0100 Subject: [PATCH] more blub --- .idea/.gitignore | 3 + .idea/hvst.iml | 8 + .idea/inspectionProfiles/Project_Default.xml | 61 ++++++++ .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 4 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + hvst.py | 141 ++++++++++++------ test_assembly.py | 107 +++++++++++++ 9 files changed, 299 insertions(+), 45 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/hvst.iml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 test_assembly.py diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/hvst.iml b/.idea/hvst.iml new file mode 100644 index 0000000..d0876a7 --- /dev/null +++ b/.idea/hvst.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..38ca391 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,61 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..a7e652c --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..0547121 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/hvst.py b/hvst.py index d58d73f..2541cab 100644 --- a/hvst.py +++ b/hvst.py @@ -1,5 +1,8 @@ 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 @@ -8,11 +11,13 @@ alpha_max = 70 tabletop_adjuster_assembly_spacing = 100 # symmetric distancing assumed +# cube in adjuster assembly 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_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 @@ -26,9 +31,11 @@ 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)") + lower_foot_width = 80 lower_foot_height = 50 -lower_foot_length = lower_feet_bore_holes_distance + lower_foot_height +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 @@ -46,58 +53,102 @@ 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) + a.add(get_adjuster_assembly_left(), name="l") + a.add(get_adjuster_assembly_right(), name="r", color=Color("red")) + a.add(get_adjuster_assembly_front_back_plate(), name="f", color=Color("orange")) + a.add(get_adjuster_assembly_front_back_plate(), name="b") + 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@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)\ +def get_lower_foot_base_plate(): + return Workplane("XY").box(lower_feet_assembly_width,lower_feet_assembly_length,lower_feet_assembly_base_plate_height)\ + .edges("|Z").fillet(lower_feet_assembly_side_wall_thickness/2) -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) +def get_lower_foot_side_wall_left(): + lower_foot_side_wall_left = Workplane("YZ").box(lower_feet_assembly_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_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 = 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_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() -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) +def get_lower_foot_end_wall(): + return get_lower_foot_front_wall().mirror(mirrorPlane="XZ") -#show_object(bearing_pin_slot) +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()) -#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)) +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))) -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) +#show_object(get_lower_foot_front_wall()) +#show_object(get_lower_foot_end_wall()) +#show_object(assy) - -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) \ No newline at end of file diff --git a/test_assembly.py b/test_assembly.py new file mode 100644 index 0000000..91de54f --- /dev/null +++ b/test_assembly.py @@ -0,0 +1,107 @@ +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 + +def get_lower_foot_base_plate(): + return 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) + +def get_lower_foot_side_wall_left(): + 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) + return lower_foot_side_wall_left + + +def get_lower_foot_side_wall_right(): + return get_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) + +b1 = Workplane("XY").box(10,5,5) +b2 = Workplane("XY").box(5,10,5) +b3 = Workplane("YZ").box(4,4,4) + +b1 = get_lower_foot_base_plate() +b2 = get_lower_foot_side_wall_left() +b3 = get_lower_foot_side_wall_right() + +#show_object(b1) + +a1 = Assembly(b1, name="1", color=Color("red"),loc=Location(Vector(0,0,0)))\ + .add(b2, name="2", 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(b3, name="3", color=Color("red"), 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(a1) + +a2 = Assembly()\ + .add(a1, name="a1", color=Color(0,1,0,0.8))\ + .add(a1, name="a2",color=Color(1,1,0,0.8), loc=Location(Vector(200,0,0))) + +a3 = Assembly()\ + .add(a2, name="a2a", color=Color(0,1,0,0.8))\ + .add(a2, name="a3",color=Color(1,1,0,0.8), loc=Location(Vector(0,800,0))) + + +show_object(a2) \ No newline at end of file