X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=cliphook.scad;fp=cliphook.scad;h=de9c4ae18c87d4718e81b24cef44aeacf089ffd5;hb=a0d95a03db72ade8e242e8a971fc2bc86a0b1e2b;hp=0000000000000000000000000000000000000000;hpb=88e67c38c7a2438e9ed5b2c163c25705058e2b98;p=reprap-play.git diff --git a/cliphook.scad b/cliphook.scad new file mode 100644 index 0000000..de9c4ae --- /dev/null +++ b/cliphook.scad @@ -0,0 +1,56 @@ + +tau = 6.283; +function rads2degs(rads) = rads * 360/tau; + +function ClipHook_r2(w,g,l,ye,k) = w/2 + g + w/2; +function ClipHook_r3(w,g,l,ye,k) = k * ClipHook_r2(w,g,l,ye,k); +function ClipHook_yce(w,g,l,ye,k) = g/2 + w + g + w/2 - ClipHook_r3(w,g,l,ye,k); +function ClipHook_xe(w,g,l,ye,k) = + sqrt(pow( ClipHook_r3(w,g,l,ye,k), 2) - + pow( ClipHook_yce(w,g,l,ye,k) + ye, 2)); + +module ClipHook(w=1.2, g=0.2, l=0.0, ye=0, k=3.0, h=3.5) { + r2 = ClipHook_r2(w,g,l,ye,k); + r3 = ClipHook_r3(w,g,l,ye,k); + yce = ClipHook_yce(w,g,l,ye,k); + xe = ClipHook_xe(w,g,l,ye,k); + + xc = -l/2; + yc = g/w + w/2; + + echo("ClipHook(w g l ye k h) ", w, g, l, ye, k, h); + echo("ClipHook r2 r3 yce xe =", r2, r3, yce, xe); + + $fn = 20; + + module jcirc(x,y) { translate([x,y,0]) circle(r=w/2); } + module jarc(cx,cy,r,a1=0,a2=tau) { + astep = (a2-a1)/6; + size = 5*(r+w/2); + translate([cx,cy,0]) { + intersection() { + difference() { + circle(r=r+w/2); + translate([0,0,-1]) + circle(r=r-w/2, h=h+2); + } + scale(size,size) { + for (ai=[0:4]) { + echo(" jarc ", a1,a2, astep, ai, rads2degs(a1 + astep*ai) ); + rotate(rads2degs(a1 + astep*ai)) { + polygon([ [0,0], [1,0], + [cos(rads2degs(astep*2)),sin(rads2degs(astep*2))] ]); + } + } + } + } + } + } + + linear_extrude(height=h) { + jcirc(-xc, -yc); + jarc(xc, yc, r2, tau*0.25, tau*0.75); + } +} + +ClipHook(l=3);