From 4af0f0fc9bd21e67765e6b320c5a042538621490 Mon Sep 17 00:00:00 2001
From: Erik Strand <erik.strand@cba.mit.edu>
Date: Sun, 13 Feb 2022 21:37:42 -0500
Subject: [PATCH] Add rod hanger example

---
 .gitignore             |  1 +
 cadquery/rod_hanger.py | 45 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 46 insertions(+)
 create mode 100644 cadquery/rod_hanger.py

diff --git a/.gitignore b/.gitignore
index 31c1c9f..a8e1c5a 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 0000000..bc41dc7
--- /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")
-- 
GitLab