chiark / gitweb /
cliphook wip
[reprap-play.git] / cliphook.scad
1
2 tau = 6.283;
3 function rads2degs(rads) = rads * 360/tau;
4
5 function ClipHook_r2(w,g,l,ye,k) = w/2 + g + w/2;
6 function ClipHook_r3(w,g,l,ye,k) = k * ClipHook_r2(w,g,l,ye,k);
7 function ClipHook_yce(w,g,l,ye,k) = g/2 + w + g + w/2 - ClipHook_r3(w,g,l,ye,k);
8 function ClipHook_xe(w,g,l,ye,k) =
9         sqrt(pow( ClipHook_r3(w,g,l,ye,k),      2) -
10              pow( ClipHook_yce(w,g,l,ye,k) + ye, 2));
11
12 module ClipHook(w=1.2, g=0.2, l=0.0, ye=0, k=3.0, h=3.5) {
13   r2 =  ClipHook_r2(w,g,l,ye,k);
14   r3 =  ClipHook_r3(w,g,l,ye,k);
15   yce = ClipHook_yce(w,g,l,ye,k);
16   xe =  ClipHook_xe(w,g,l,ye,k);
17
18   xc = -l/2;
19   yc = g/w + w/2;
20
21   echo("ClipHook(w g l ye k h) ", w, g, l, ye, k, h);
22   echo("ClipHook r2 r3 yce xe =", r2, r3, yce, xe);
23
24   $fn = 20;
25
26   module jcirc(x,y) { translate([x,y,0]) circle(r=w/2); }
27   module jarc(cx,cy,r,a1=0,a2=tau) {
28     astep = (a2-a1)/6;
29     size = 5*(r+w/2);
30     translate([cx,cy,0]) {
31       intersection() {
32         difference() {
33                 circle(r=r+w/2);
34                 translate([0,0,-1])
35                         circle(r=r-w/2, h=h+2);
36         }
37         scale(size,size) {
38           for (ai=[0:4]) {
39             echo(" jarc ", a1,a2, astep, ai, rads2degs(a1 + astep*ai) );
40             rotate(rads2degs(a1 + astep*ai)) {
41               polygon([ [0,0], [1,0],
42                         [cos(rads2degs(astep*2)),sin(rads2degs(astep*2))] ]);
43             }
44           }
45         }
46       }
47     }
48   }
49
50   linear_extrude(height=h) {
51     jcirc(-xc, -yc);
52     jarc(xc, yc, r2, tau*0.25, tau*0.75);
53   }
54 }
55
56 ClipHook(l=3);