chiark / gitweb /
splitpin wip
[reprap-play.git] / splitpin.scad
1 // -*- C -*-
2
3 include <cliphook.scad>
4
5 tau = 6.28318530718;
6 function deg2rad(deg) = deg/360 * tau;
7 function rad2deg(rad) = rad/tau * 360;
8
9 module SplitPin(w=1.5, holeminrad=4, thick=3, deviationrad=1.5,
10                 mainlen=20, handlerad=10, handlelen=7){
11   spare = holeminrad - deviationrad - w;
12   echo("splitpin spare",spare);
13   %translate([0,mainlen+handlelen,0]) cylinder(r=spare, h=thick);
14   %translate([0,mainlen,thick/2]) rotate([90,0,0])
15      cylinder(r=holeminrad, h=thick);
16
17   bent_x0 = w*1.5;
18   bent_x1 = holeminrad;
19   bent_dx = bent_x1 - bent_x0;
20   bent_y1 = mainlen;
21   bent_dy = bent_y1;
22   bent_rad = (bent_dy / bent_dx) * bent_dy;
23   bent_subang = atan(bent_dx / bent_dy);
24   actual_mainlen = bent_rad * deg2rad(bent_subang);
25
26   unbent_dx = bent_dx + deviationrad;
27   unbent_subang = atan(unbent_dx / actual_mainlen);
28   unbent_rad = actual_mainlen / deg2rad(unbent_subang);
29
30   main_cx = w*1.5 + unbent_rad;
31
32   for (xmir=[0,1]) mirror([xmir,0,0]) {
33     linear_extrude(height=thick) {
34       FlatArc(0,0, w*0.5, w*1.5, 270-1,360);
35       FlatArc($fa=1, main_cx,0, unbent_rad, unbent_rad+w,
36               180-unbent_subang, 180);
37       translate([unbent_rad * (1 - cos(unbent_subang)) + w*1.5,
38                  unbent_rad * sin(unbent_subang)])
39         rotate([0,0,-unbent_subang]) {
40         translate([-(w + deviationrad), -0.1])
41           square(size=[w + deviationrad, w+0.1]);
42         FlatArc(-deviationrad + handlerad, w,
43                 handlerad, handlerad+w,
44                 180-rad2deg(handlelen/handlerad), 180);
45       }
46     }
47   }
48 }
49
50 SplitPin();