chiark / gitweb /
scaffold-clamp-cleat: sort out toplevels
[reprap-play.git] / pin-hinge.scad
index 658bfa31eb18fe7895a7d0dc29c8b7aa92660239..81d527e478ad50a5550861ae5cecc98bac011b78 100644 (file)
 // -*- C -*-
 
-$hinge_pin_dia = 0.795 + 0.35;
+include <utils.scad>
+
+$hinge_pin_dia = 0.795 + 0.75;
 $hinge_main_dia = 4.0;
 $hinge_inter_gap = 0.50;
+$hinge_prong_minwidth = 3.0;
 $hinge_noncrit_gap = 1.0;
 
 $fa = 3;
 $fs = 0.05;
 
+module HingePinPlan(){
+  circle(r= $hinge_pin_dia/2);
+}
+
 module HingeProngPlan(behind){
+  hull(){
+    circle(r= $hinge_main_dia/2);
+    polygon([[0,0],
+            [-$hinge_main_dia/2, -behind],
+            [+$hinge_main_dia/2, -behind]]);
+  }
+}
+
+module HingeGapPlan() {
+  circle(r = $hinge_main_dia/2 + $hinge_inter_gap);
+}
+
+module PlanDemo(){
+  HingeProngPlan(5);
+  %HingeGapPlan();
+  translate([0,0,1]) color("red") HingePinPlan();
+}
+
+module HingePinUnitCell(l) {
+  eff_l = l + $hinge_inter_gap;
+  pairs = floor(eff_l / (2*($hinge_prong_minwidth + $hinge_inter_gap)));
+  stride = eff_l / pairs;
+  $hinge__prong_width = stride/2 - $hinge_inter_gap;
+  for (i=[0:pairs-1]) {
+    translate(stride * i * [1,0,0])
+      children(0);
+  }
+}
+
+module HingePositive(l, behind){
+  HingePinUnitCell(l){
+    linextr_x_yz(0, $hinge__prong_width)
+      HingeProngPlan(behind);
+  }
+}
+
+module HingeNegative(l){
+  linextr_x_yz(-0.1, l+0.1)
+    HingePinPlan();
+  HingePinUnitCell(l){
+    linextr_x_yz($hinge__prong_width,
+                $hinge__prong_width*2 + 2*$hinge_inter_gap)
+      HingeGapPlan();
+  }
+}
+
+test_l = 30;
+test_wb = 12;
+test_h = 12;
+
+test_face_gap = 0.75;
+
+module Demo(){
   difference(){
-    hull(){
-      circle(r= $hinge_main_dia/2);
+    HingePositive(test_l, test_h/2);
+    %HingeNegative(test_l);
+  }
+}
+
+module TestBody(){
+  linextr_x_yz(0, test_l){
+    offset(delta = -test_face_gap/2)
       polygon([[0,0],
-              [-$hinge_main_dia/2, -behind],
-              [+$hinge_main_dia/2, -behind]]);
+              [-test_wb/2, -test_h],
+              [+test_wb/2, -test_h]]);
+  }
+}
+
+module Test(){
+  difference(){
+    union(){
+      TestBody();
+      HingePositive(test_l, test_h/2);
     }
-    circle(r= $hinge_pin_dia/2);
+    HingeNegative(test_l);
   }
 }
 
-HingeProngPlan(5);
+//PlanDemo();
+//Demo();
+//TestBody();
+Test();