chiark / gitweb /
scaffold-clamp: wip
[reprap-play.git] / scaffold-clamp.scad
index ef1fdd855017e8ba1f8f7d4833af4cef3b07a5cb..19c86ef6af133ee3a30fc001dff2e69ca6f75faf 100644 (file)
@@ -8,13 +8,17 @@ th = 7;
 
 pin_gap = 1.5; // around
 
-smooth_r = 10;
+smooth_r = 15;
 
 bolt_dia = 5 + 0.75;
 bolt_flat = 10 + 1;
 
 open_gap = 10;
 
+hinge_unit = 10;
+hinge_units = 4;
+hinge_z_gap = 1;
+
 // calculated
 
 pin_dia = th;
@@ -25,15 +29,20 @@ hinge_gap = pin_gap;
 hinge_o_r = 0.5 * hole_dia + th;
 
 hinge_x = -0.5 * tube_dia - hinge_o_r;
-bolt_x = 0.5 * tube_dia + bolt_flat * 0.5;
+bolt_x = 0.5 * tube_dia + th + bolt_flat * 0.5;
 max_x = bolt_x + max(0.5 + bolt_dia + th, 0.5 * bolt_flat/2);
 
 flats_y = open_gap/2 + th;
 
+stride_z = hinge_unit*2 + hinge_z_gap*2;
+total_z = hinge_units * stride_z - hinge_z_gap;
+
+pin_flatten = pin_dia/2 * (1 - cos(45));
+
 $fa = 3;
 $fs = 0.1;
 
-module MainPlan() {
+module MainPlan(flatten=false) {
   difference(){
     offset(r=-smooth_r) offset(delta=smooth_r)
       union(){
@@ -45,7 +54,14 @@ module MainPlan() {
     circle(r = tube_dia/2);
     rectfromto([0,       -open_gap/2],
               [max_x+1, +open_gap/2]);
-    translate([hinge_x, 0]) circle(r= hole_dia/2);
+    translate([hinge_x, 0]) {
+      intersection(){
+       circle(r= hole_dia/2);
+       if (flatten)
+         translate([ pin_flatten, 0 ])
+         square(center=true, [hole_dia, hole_dia + 1]);
+      }
+    }
   }
 }
 
@@ -55,21 +71,46 @@ module Portion(d=0) {
             [max_x+10, -(tube_dia/2+th+10)]);
 }
 
-module MainPlanA(){
+module MainPlanA(flatten){
   intersection(){
-    MainPlan();
+    MainPlan(flatten);
     Portion(0);
   }
 }
 
-module MainPlanB(){
+module MainPlanB(flatten){
   difference(){
-    MainPlan();
+    MainPlan(flatten);
     Portion(hinge_gap);
   }
 }
 
-module PlanDemo(){
+module HalfClampX(flatten=false){
+  difference(){
+    translate([0,0, -total_z/2]) {
+      linextr(0, total_z) mirror([0,1]) MainPlanB();
+      for (i=[0 : hinge_units-1]) {
+       translate([0,0, stride_z*i])
+         linextr(0, hinge_unit) MainPlanA(flatten);
+      }
+    }
+    for (dz=[-1,+1]) {
+      translate([ bolt_x, 0, dz * total_z/4 ]) {
+       translate([0, -tube_dia/2, 0])
+         rotate([-90,0,0])
+         cylinder(r= bolt_dia/2, h= tube_dia);
+       translate([0, -flats_y, 0])
+         rotate([90,0,0])
+         cylinder(r= bolt_flat/2, h= tube_dia/2);
+      }
+    }
+  }
+}
+
+module HalfClampA() { HalfClampX(false); }
+module HalfClampB() { rotate([180,0,0]) HalfClampX(true); }
+
+module PlanDemo(){ ////toplevel
   MainPlan();
   translate([0,0,-4]) color("red") Portion(1);
   translate([0,0,-2]) color("grey") Portion(0);
@@ -81,4 +122,18 @@ module PlanDemo(){
 //  translate([max_x - hinge_x + 20, 0]) color("blue") MainPlanA();
 }
 
-PlanDemo();
+module GeneralB(){ ////toplevel
+  HalfClampX(true);
+}
+
+module DummyB(){ ////toplevel
+  HalfClampX();
+}
+
+module Demo(){ ////toplevel
+  color("red") HalfClampA();
+  color("blue") HalfClampB();
+}
+
+//PlanDemo();
+//HalfClamp();