summaryrefslogtreecommitdiff
path: root/examples/example020.scad
diff options
context:
space:
mode:
Diffstat (limited to 'examples/example020.scad')
-rw-r--r--examples/example020.scad37
1 files changed, 37 insertions, 0 deletions
diff --git a/examples/example020.scad b/examples/example020.scad
index 8322939..e008f0b 100644
--- a/examples/example020.scad
+++ b/examples/example020.scad
@@ -32,8 +32,45 @@ module nut(type = 2, r1 = 16, r2 = 21, r3 = 30, s = 6, n = 7, h = 100/5, t = 8/5
}
}
+module spring(r1 = 100, r2 = 10, h = 100, hr = 12)
+{
+ stepsize = 1/16;
+ module segment(i1, i2) {
+ alpha1 = i1 * 360*r2/hr;
+ alpha2 = i2 * 360*r2/hr;
+ len1 = sin(acos(i1*2-1))*r2;
+ len2 = sin(acos(i2*2-1))*r2;
+ if (len1 < 0.01)
+ polygon([
+ [ cos(alpha1)*r1, sin(alpha1)*r1 ],
+ [ cos(alpha2)*(r1-len2), sin(alpha2)*(r1-len2) ],
+ [ cos(alpha2)*(r1+len2), sin(alpha2)*(r1+len2) ]
+ ]);
+ if (len2 < 0.01)
+ polygon([
+ [ cos(alpha1)*(r1+len1), sin(alpha1)*(r1+len1) ],
+ [ cos(alpha1)*(r1-len1), sin(alpha1)*(r1-len1) ],
+ [ cos(alpha2)*r1, sin(alpha2)*r1 ],
+ ]);
+ if (len1 >= 0.01 && len2 >= 0.01)
+ polygon([
+ [ cos(alpha1)*(r1+len1), sin(alpha1)*(r1+len1) ],
+ [ cos(alpha1)*(r1-len1), sin(alpha1)*(r1-len1) ],
+ [ cos(alpha2)*(r1-len2), sin(alpha2)*(r1-len2) ],
+ [ cos(alpha2)*(r1+len2), sin(alpha2)*(r1+len2) ]
+ ]);
+ }
+ linear_extrude(height = 100, twist = 180*h/hr,
+ $fn = (hr/r2)/stepsize, convexity = 5) {
+ for (i = [ stepsize : stepsize : 1+stepsize/2 ])
+ segment(i-stepsize, min(i, 1));
+ }
+}
+
translate([ -30, 0, 0 ])
screw();
translate([ 30, 0, 0 ])
nut();
+
+spring();
contact: Jan Huwald // Impressum