diff --git a/.gitignore b/.gitignore index 31c1c9ff0b64ea70fe05590c110658af89873337..a8e1c5a132aa5390263f8d410d84af3c07e23286 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.swp *.swo +*.stl .DS_Store diff --git a/cadquery/rod_hanger.py b/cadquery/rod_hanger.py new file mode 100644 index 0000000000000000000000000000000000000000..bc41dc72398e4a95b136675edec09d3bd17b6971 --- /dev/null +++ b/cadquery/rod_hanger.py @@ -0,0 +1,45 @@ +import cadquery as cq +import math + +# input measurements in mm +stud_diameter = 6.25 +stud_length = 10.0 +rod_diameter = 19.05 +ledge_angle = 180 * 2.0 * math.pi / 360.0 +ledge_length = 15.0 +plate_thickness = 5.0 +wall_thickness = 3.5 + +# derived values +stud_radius = 0.5 * stud_diameter +rod_radius = 0.5 * rod_diameter +base_radius = rod_radius + wall_thickness + +# these four points define the rod ledge +angle_left = 0.75 * 2.0 * math.pi - 0.5 * ledge_angle +angle_right = 0.75 * 2.0 * math.pi + 0.5 * ledge_angle +p1 = ((rod_radius + wall_thickness) * math.cos(angle_left), + (rod_radius + wall_thickness) * math.sin(angle_left)) +p2 = (rod_radius * math.cos(angle_left), rod_radius * math.sin(angle_left)) +p3 = (rod_radius * math.cos(angle_right), rod_radius * math.sin(angle_right)) +p4 = ((rod_radius + wall_thickness) * math.cos(angle_right), + (rod_radius + wall_thickness) * math.sin(angle_right)) + +result = ( + cq.Workplane("YZ") + .cylinder(stud_length, stud_radius) + .faces(">X") + .workplane(origin=(0.0, 0.0, stud_radius - base_radius)) + .cylinder(plate_thickness, base_radius) + .faces(">X") + .workplane() + .moveTo(*p1) + .lineTo(*p2) + .threePointArc((0.0, -rod_radius), p3) + .lineTo(*p4) + .threePointArc((0.0, -(rod_radius + wall_thickness)), p1) + .close() + .extrude(ledge_length) +) + +cq.exporters.export(result, "rod_hanger.stl")