| 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) |
|
|