chiark / gitweb /
filamentclip wip
[reprap-play.git] / cliphook.scad
1
2 function ClipHook_r2(w,g,l,ye,k) = w/2 + g + w/2;
3 function ClipHook_r3(w,g,l,ye,k) = k * (ClipHook_r2(w,g,l,ye,k) + w + g);
4 function ClipHook_yd(w,g,l,ye,k) = g/2 + w + g + w/2 - ClipHook_r3(w,g,l,ye,k);
5 function ClipHook_xe(w,g,l,ye,k) =
6         l*1.5 + w +
7         sqrt(pow( ClipHook_r3(w,g,l,ye,k),      2) -
8              pow( ClipHook_yd(w,g,l,ye,k) - ye, 2));
9
10 module FlatArc(cx,cy,r1,r2,a1,a2=360) {
11   astep = (a2-a1)/6;
12   size = 5*(r2/2);
13   translate([cx,cy,0]) {
14     intersection() {
15       difference() {
16         circle(r=r2);
17         translate([0,0,-1])
18           circle(r=r1, h=h+2);
19       }
20       scale(size) {
21         for (ai=[0:4]) {
22           echo(" jarc ", a1,a2, astep, ai, a1 + astep*ai );
23           rotate(a1 + astep*ai) {
24             polygon([ [0,0], [1,0],
25                       [cos(astep*2),sin(astep*2)] ]);
26           }
27         }
28       }
29     }
30   }
31 }
32
33 module ClipHook_2D(w,g,l,ye,k,h) {
34   r2 =  ClipHook_r2(w,g,l,ye,k);
35   r3 =  ClipHook_r3(w,g,l,ye,k);
36   yd =  ClipHook_yd(w,g,l,ye,k);
37   xe =  ClipHook_xe(w,g,l,ye,k);
38
39   xd = l*1.5 + w;
40   xc = -l/2;
41   yc = g/w + w/2;
42
43   alpha = atan2((xe-xd)/r3, (ye-yd)/r3);
44
45   echo("ClipHook(w g l ye k h) ", w, g, l, ye, k, h);
46   echo("ClipHook r2 r3 xd yd xe =", r2,r3, xd,yd, xe);
47
48   $fn = 20;
49
50   module jcirc(x,y) { translate([x,y,0]) circle(r=w/2); }
51   module jbox(y,x1,x2) { translate([x1,y-w/2,0]) square(size=[x2-x1, w]); }
52   module jarc(cx,cy,r,a1=0,a2=360) { FlatArc(cx,cy,r-w/2,r+w/2,a1,a2); }
53
54   jcirc(-xc, -yc);
55   jbox(-yc, xc, -xc);
56   jarc(xc, yc, r2, 90, 270);
57   jbox(yc+r2, xc, xd);
58   jarc(xd, yd, r3, 90-alpha, 90);
59   jcirc(xe,ye);
60 }
61
62 module ClipHook(w=1.2, g=0.2, l=0.0, ye=0, k=2.0, h=3.5, demo=false) {
63   linear_extrude(height=h)
64     ClipHook_2D(w,g,l,ye,k);
65   if (demo)
66     %linear_extrude(height=h)
67       translate([l+w,0,0]) rotate(180) ClipHook_2D(w,g,l,ye,k);
68 }
69
70 //ClipHook(l=3, ye=1.5, k=1, demo=true);