chiark / gitweb /
ksafe-base: wip, web
[reprap-play.git] / ksafe-base.scad
index b21b6939f94952fa26bd66ed445b3d8f3c8b79b1..0f881c33401085b87af74c4688793ad09890abdf 100644 (file)
@@ -1,12 +1,22 @@
 // -*- C -*-
 
-// xxx
+// xxx from actual ksafe
 bolt_above = 4;
 wall_thick = 4;
 bolthole_height = 4;
 bolthole_width = 10;
-base_thick = 5;
+main_sz = 30;
+cnr_rad = 10;
 lidinner_thick_allow = 20;
+
+// other parameters
+web_thick = 4;
+web_height = 20; // excluding wall and base thick
+bolthole_rhs = 20;
+bolthole_lhs = 20;
+boltreinf_thick = 6;
+anchor_wall_space = 45;
+base_thick = 4;
 space = 25;
 anchor_thick = 4;
 anchor_rad = 4;
@@ -26,53 +36,107 @@ appM = gppL + anchor_b * [1,1];
 
 a_bevel = 2 * anchor_b * (1 + sqrt(0.5));
 
-module upp_app_Profile(t_bevel){
-  xppE = gppL + t_bevel * [0,1];
-  xppF = gppL + t_bevel * [1,0];
+module upp_app_Vars(t_bevel){
+  $xppE = gppL + t_bevel * [0,1];
+  $xppF = gppL + t_bevel * [1,0];
+
+  $xppJ = $xppE + wall_thick * [ 1, tan(22.5) ];
+  $xppI = $xppF + base_thick * [ tan(22.5), 1 ];
+
+  // must pass a_bevel for t_bevel for these to be valid
+  $gppP = gppA + [0,-1] * lidinner_thick_allow;
+  $gppQ = $gppP + [1,-1] * web_height;
+  $gppR = $xppJ + [ 1, tan(22.5) ] * web_height;
+  $gppS = $xppI + [ tan(22.5), 1 ] * web_height;
+  $gppT = [ $gppQ[0], $xppE[1] ];
 
-  xppJ = xppE + wall_thick * [ 1, tan(22.5) ];
-  xppI = xppF + base_thick + [ tan(22.5), 1 ];
+  children();
+}
 
+module upp_app_Profile(){
   polygon([ gppA,
            gppB,
-           xppE,
-           xppF,
-           xppF + [1,0],
-           xppI + [1,0],
-           xppJ ]);
+           $xppE,
+           $xppF,
+           $xppF + [1,0],
+           $xppI + [1,0],
+           $xppJ ]);
 }
 
 
 module UsualProfile(){
-  upp_app_Profile(bevel);
+  upp_app_Vars(bevel) upp_app_Profile();
 }
 
 module NearAnchorProfile(){
-  upp_app_Profile(a_bevel);
+  upp_app_Vars(a_bevel) upp_app_Profile();
 }
 
 module AnchorProfile(){
-  xppE = gppL + t_bevel * [0,1];
-  xppF = gppL + t_bevel * [1,0];
-
-  upp_app_Profile(a_bevel);
-
-  difference(){
-    hull(){
-      polygon([ xppE,
-               xppF,
-               xppF + [0,1],
-               xppE + [1,0] ]);
-      translate(appM) circle(r= anchor_b);
+  upp_app_Vars(a_bevel) {
+
+    upp_app_Profile();
+
+    difference(){
+      hull(){
+       polygon([ $xppE,
+                 $xppF,
+                 $xppF + [0,1],
+                 $xppE + [1,0] ]);
+       translate(appM) circle(r= anchor_b);
+      }
+      translate(appM) circle(r= anchor_rad);
+    }
+  }
+}
+
+module AnchorWallProfile(){
+  UsualProfile();
+  NearAnchorProfile();
+  hull(){
+    for (bev = [bevel, a_bevel]) {
+      upp_app_Vars(bev) {
+       polygon([ $xppE,
+                 $xppF,
+                 $xppI,
+                 $xppJ ]);
+      }
+    }
+  }
+}
+
+module WebProfile(){
+  upp_app_Vars(a_bevel){
+    if ($gppR[1] <= $gppP[1]) {
+      polygon([ $gppP,
+               $xppE,
+               $gppT,
+               $gppQ ]);
+      polygon([ $gppP,
+               $xppE,
+               $xppF,
+               $gppS,
+               $gppR ]);
+    } else {
+      polygon([ $gppP,
+               $xppE,
+               $xppF,
+               $gppS,
+               $gppP + web_height * [1,0] ]);
     }
-    translate(appM) circle(r= anchor_rad);
+    polygon([ $gppS,
+             $xppF,
+             $xppF + [1,0],
+             $gppS + [1,0] ]);
   }
 }
 
-module Demo(){
+module DemoProfiles(){
+  translate([0,0,-2]) color("yellow") AnchorWallProfile();
   color("red") AnchorProfile();
   translate([0,0,2]) color("black") NearAnchorProfile();
-  color("blue") UsualProfile();
+  translate([0,0,4]) color("blue") UsualProfile();
+  translate([0,0,-4]) color("pink") WebProfile();
 }
 
-Demo();
+DemoProfiles();