Spaces:
Sleeping
Sleeping
| import cadquery as cq | |
| base_width = 50 | |
| base_height = 80 | |
| base_thickness = 6 | |
| corner_radius = 4 | |
| hole_dia = 5.2 | |
| csk_dia = 10 | |
| csk_angle = 82 | |
| hole_inset_x = 10 | |
| hole_inset_y = 12 | |
| shaft_width = 14 | |
| shaft_depth = 12 | |
| shaft_length = 35 | |
| hook_inner_radius = 16 | |
| hook_outer_radius = hook_inner_radius + shaft_depth | |
| gusset_thickness = 6 | |
| bottom_gusset_length = 25 | |
| bottom_gusset_height = 18 | |
| top_gusset_length = 15 | |
| top_gusset_height = 12 | |
| base = ( | |
| cq.Workplane("XY") | |
| .box(base_width, base_height, base_thickness) | |
| .edges("|Z") | |
| .fillet(corner_radius) | |
| ) | |
| hx = base_width / 2 - hole_inset_x | |
| hy = base_height / 2 - hole_inset_y | |
| pts = [(hx, hy), (-hx, hy), (hx, -hy), (-hx, -hy)] | |
| base = ( | |
| base.faces(">Z") | |
| .workplane() | |
| .pushPoints(pts) | |
| .cskHole(diameter=hole_dia, cskDiameter=csk_dia, cskAngle=csk_angle) | |
| ) | |
| z_start = base_thickness / 2 | |
| z_arc_center = z_start + shaft_length | |
| y_inner_start = shaft_depth / 2 | |
| y_outer_start = -shaft_depth / 2 | |
| hook = ( | |
| cq.Workplane("YZ") | |
| .moveTo(y_outer_start, z_start) | |
| .lineTo(y_outer_start, z_arc_center) | |
| .threePointArc( | |
| (y_outer_start + hook_outer_radius, z_arc_center + hook_outer_radius), | |
| (y_outer_start + 2 * hook_outer_radius, z_arc_center), | |
| ) | |
| .threePointArc( | |
| (y_outer_start + 2 * hook_outer_radius - shaft_depth / 2, z_arc_center - shaft_depth / 2), | |
| (y_outer_start + 2 * hook_outer_radius - shaft_depth, z_arc_center), | |
| ) | |
| .threePointArc( | |
| (y_inner_start + hook_inner_radius, z_arc_center + hook_inner_radius), | |
| (y_inner_start, z_arc_center), | |
| ) | |
| .lineTo(y_inner_start, z_start) | |
| .close() | |
| .extrude(shaft_width / 2, both=True) | |
| ) | |
| bottom_gusset = ( | |
| cq.Workplane("YZ") | |
| .moveTo(y_outer_start, z_start) | |
| .lineTo(y_outer_start - bottom_gusset_length, z_start) | |
| .lineTo(y_outer_start, z_start + bottom_gusset_height) | |
| .close() | |
| .extrude(gusset_thickness / 2, both=True) | |
| ) | |
| top_gusset = ( | |
| cq.Workplane("YZ") | |
| .moveTo(y_inner_start, z_start) | |
| .lineTo(y_inner_start + top_gusset_length, z_start) | |
| .lineTo(y_inner_start, z_start + top_gusset_height) | |
| .close() | |
| .extrude(gusset_thickness / 2, both=True) | |
| ) | |
| fixture = base.union(hook).union(bottom_gusset).union(top_gusset) | |