chiark / gitweb /
splitpin wip
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 16 Sep 2012 15:27:31 +0000 (16:27 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 16 Sep 2012 15:27:31 +0000 (16:27 +0100)
splitpin.scad

index 553d14cf5b2e1cfa911d0edc02b281b000d5d50f..7120037a088668db33445931418bfc84bae03438 100644 (file)
@@ -4,22 +4,45 @@ include <cliphook.scad>
 
 tau = 6.28318530718;
 function deg2rad(deg) = deg/360 * tau;
 
 tau = 6.28318530718;
 function deg2rad(deg) = deg/360 * tau;
+function rad2deg(rad) = rad/tau * 360;
+
+module SplitPin(w=1.5, holeminrad=4, thick=3, deviationrad=1.5,
+               mainlen=20, handlerad=10, handlelen=7){
+  spare = holeminrad - deviationrad - w;
+  echo("splitpin spare",spare);
+  %translate([0,mainlen+handlelen,0]) cylinder(r=spare, h=thick);
+  %translate([0,mainlen,thick/2]) rotate([90,0,0])
+     cylinder(r=holeminrad, h=thick);
 
 
-module SplitPin(w=1.5, holeminrad=3, deviationrad=1, thick=3,
-               mainlen=20){
   bent_x0 = w*1.5;
   bent_x1 = holeminrad;
   bent_dx = bent_x1 - bent_x0;
   bent_y1 = mainlen;
   bent_x0 = w*1.5;
   bent_x1 = holeminrad;
   bent_dx = bent_x1 - bent_x0;
   bent_y1 = mainlen;
+  bent_dy = bent_y1;
   bent_rad = (bent_dy / bent_dx) * bent_dy;
   bent_subang = atan(bent_dx / bent_dy);
   actual_mainlen = bent_rad * deg2rad(bent_subang);
   bent_rad = (bent_dy / bent_dx) * bent_dy;
   bent_subang = atan(bent_dx / bent_dy);
   actual_mainlen = bent_rad * deg2rad(bent_subang);
+
   unbent_dx = bent_dx + deviationrad;
   unbent_dx = bent_dx + deviationrad;
-  
+  unbent_subang = atan(unbent_dx / actual_mainlen);
+  unbent_rad = actual_mainlen / deg2rad(unbent_subang);
+
+  main_cx = w*1.5 + unbent_rad;
+
   for (xmir=[0,1]) mirror([xmir,0,0]) {
     linear_extrude(height=thick) {
       FlatArc(0,0, w*0.5, w*1.5, 270-1,360);
   for (xmir=[0,1]) mirror([xmir,0,0]) {
     linear_extrude(height=thick) {
       FlatArc(0,0, w*0.5, w*1.5, 270-1,360);
-      FlatArc();
+      FlatArc($fa=1, main_cx,0, unbent_rad, unbent_rad+w,
+             180-unbent_subang, 180);
+      translate([unbent_rad * (1 - cos(unbent_subang)) + w*1.5,
+                unbent_rad * sin(unbent_subang)])
+       rotate([0,0,-unbent_subang]) {
+       translate([-(w + deviationrad), -0.1])
+         square(size=[w + deviationrad, w+0.1]);
+       FlatArc(-deviationrad + handlerad, w,
+               handlerad, handlerad+w,
+               180-rad2deg(handlelen/handlerad), 180);
+      }
     }
   }
 }
     }
   }
 }