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) =
7 sqrt(pow( ClipHook_r3(w,g,l,ye,k), 2) -
8 pow( ClipHook_yd(w,g,l,ye,k) - ye, 2));
10 module ClipHook_2D(w,g,l,ye,k,h) {
11 r2 = ClipHook_r2(w,g,l,ye,k);
12 r3 = ClipHook_r3(w,g,l,ye,k);
13 yd = ClipHook_yd(w,g,l,ye,k);
14 xe = ClipHook_xe(w,g,l,ye,k);
20 alpha = atan2((xe-xd)/r3, (ye-yd)/r3);
22 echo("ClipHook(w g l ye k h) ", w, g, l, ye, k, h);
23 echo("ClipHook r2 r3 xd yd xe =", r2,r3, xd,yd, xe);
27 module jcirc(x,y) { translate([x,y,0]) circle(r=w/2); }
28 module jbox(y,x1,x2) { translate([x1,y-w/2,0]) square(size=[x2-x1, w]); }
29 module jarc(cx,cy,r,a1=0,a2=360) {
32 translate([cx,cy,0]) {
37 circle(r=r-w/2, h=h+2);
41 echo(" jarc ", a1,a2, astep, ai, a1 + astep*ai );
42 rotate(a1 + astep*ai) {
43 polygon([ [0,0], [1,0],
44 [cos(astep*2),sin(astep*2)] ]);
55 jarc(xc, yc, r2, 90, 270);
57 jarc(xd, yd, r3, 90-alpha, 90);
61 module ClipHook(w=1.2, g=0.2, l=0.0, ye=0, k=2.0, h=3.5, demo=false) {
62 linear_extrude(height=h)
63 ClipHook_2D(w,g,l,ye,k);
65 %linear_extrude(height=h)
66 translate([l+w,0,0]) rotate(180) ClipHook_2D(w,g,l,ye,k);
69 ClipHook(l=3, ye=1.5, k=1, demo=true);