chiark / gitweb /
pull-cord-keeper: Add RoundEdges
[reprap-play.git] / pull-cord-keeper.scad
index ddbcaf6310b8849ff13adebd50b73f858a354f00..b23ac47c30a2f2faa6578ea9b755467154662221 100644 (file)
@@ -11,14 +11,22 @@ blockwidth = hcentredist*2 + 6;
 
 height = 20;
 
 
 height = 20;
 
+roundedgedia = 7.5;
+
 ziglen = hcentredist/2;
 
 feedxgap = 5;
 ziglen = hcentredist/2;
 
 feedxgap = 5;
-
 feedzgap = 5;
 feedzgap = 5;
+ribsgap = 1;
+
+ribdepth = 3;
+ribheight = 4;
 
 
-ribdepth = 2;
-ribheight = 3;
+backxgap = 1;
+
+blockoverlapcnr = 5;
+
+screwholedia = 4 + 0.5;
 
 module Oval(centredist, rad) {
   hull() {
 
 module Oval(centredist, rad) {
   hull() {
@@ -27,10 +35,20 @@ module Oval(centredist, rad) {
   }
 }  
 
   }
 }  
 
+module VExtrude(){
+  translate([0,0, -height/2])
+    linear_extrude(height=20)
+    children(0);
+}
+
+module OuterOval(){
+  Oval(hcentredist, houterrad);
+}
+
 module Hoop(){
   difference(){
     hull(){
 module Hoop(){
   difference(){
     hull(){
-      Oval(hcentredist, houterrad);
+      OuterOval();
       translate([0, (blockdepth + hoopthick)/2 + hinnerrad])
        square([blockwidth,
                blockdepth + hoopthick],
       translate([0, (blockdepth + hoopthick)/2 + hinnerrad])
        square([blockwidth,
                blockdepth + hoopthick],
@@ -40,18 +58,34 @@ module Hoop(){
   }
 }
 
   }
 }
 
-module Positive(){
-  translate([0,0, -height/2])
-    linear_extrude(height=20)
-    Hoop();
+module RoundEdges(){
+  intersection(){
+    VExtrude()
+      OuterOval();
+
+    for (xi=[-1,1]) {
+      for (yi=[-1,1]) {
+       translate([xi * (hcentredist/2 + hinnerrad),
+                  houterrad,
+                  yi * (height/2 - roundedgedia / 4 * sqrt(2))])
+         rotate([90,0,0])
+         cylinder(r=roundedgedia/2, h=houterrad*2, $fn=20);
+      }
+    }
+  }
 }
 
 }
 
-module Division(biggerpi) {
-  xgap = feedxgap * biggerpi;
-  zgap = feedzgap * biggerpi;
-  mirror([0,0,1])
-    translate([-(ziglen + xgap/2), -100, zgap/2])
-    cube([100, 100, 10]);
+module Positive(){
+  difference(){
+    VExtrude()
+      Hoop();
+
+    rotate([90,0,0])
+      translate([0,0,-50])
+      cylinder(r=screwholedia/2, h=100);
+  }
+
+  RoundEdges();
 }
 
 module Ribs(){
 }
 
 module Ribs(){
@@ -70,12 +104,65 @@ module Ribs(){
   }
 }          
 
   }
 }          
 
-module Demo(){
+module Division(cutmore) {
+  mirror([0,0,1]) {
+    translate([0, 0, -cutmore*feedzgap/2]) {
+      translate([-ziglen + -cutmore*feedxgap/2, -100, 0])
+       cube([100, 100, 50]);
+    }
+  }
+  translate([blockwidth/2 - blockoverlapcnr + -cutmore*backxgap/2,
+            -1,
+            -50])
+    cube([100, 100, 100]);
+
+  translate([ziglen + -cutmore*feedxgap/2,
+            -50,
+            -50])
+    cube([100, 51, 100]);
+
+  translate([50,
+            hinnerrad/2 + houterrad/2 + blockdepth/2 + -cutmore*ribsgap/2,
+            0])
+    rotate([-90,0,90])
+    linear_extrude(height=100)
+    Ribs();
+}
+
+module SDemo(){
   //difference(){
   %  Positive();
   //  Division(0);
   //}
   //difference(){
   %  Positive();
   //  Division(0);
   //}
-  Division(1);
+  Division(-1);
 }
 
 }
 
-Ribs();
+module A(){
+  difference(){
+    Positive();
+    Division(+1);
+  }
+}
+
+module B(){
+  intersection(){
+    Positive();
+    Division(-1);
+  }
+}
+
+module Demo(){
+  color("red") A();
+  color("blue") B();
+}
+
+//Ribs();
+//Demo();
+
+//A();
+//B();
+//%Division(+1);
+
+//Hoop();
+
+Demo();