chiark / gitweb /
ksafe-base: measurements
[reprap-play.git] / ksafe-base.scad
index adb2b35ef92fc9ad321b297af8c4448a98f7d874..abb74e6ff241326a46b2871e6513c432cf2eb770 100644 (file)
@@ -1,28 +1,31 @@
 // -*- C -*-
 
 // xxx from actual ksafe
-bolt_above = 4;
-wall_thick = 4;
-bolthole_height = 4;
-bolthole_width = 10;
-main_sz = 30;
-cnr_rad = 10;
+bolt_above = 14.30;
+bolthole_height = 4.24;
+wall_thick = 4.50;
+bolthole_width = 16.62;
+main_sz = 150.56;
+cnr_rad = 13.5; // approx
+lidinner_thick_allow = 20.78;
 
 // 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;
-lidinner_thick_allow = 20;
 space = 25;
 anchor_thick = 4;
 anchor_rad = 4;
-bevel = 15;
+bevel = 5;
 
 // ----- calculated -----
 
+hsz = main_sz/2;
+
 gppA = [0,0];
 gppB = gppA - [ wall_thick, 0 ];
 
@@ -42,6 +45,13 @@ module upp_app_Vars(t_bevel){
   $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] ];
+
   children();
 }
 
@@ -52,7 +62,8 @@ module upp_app_Profile(){
            $xppF,
            $xppF + [1,0],
            $xppI + [1,0],
-           $xppJ ]);
+           $xppJ ],
+         convexity=10);
 }
 
 
@@ -74,7 +85,8 @@ module AnchorProfile(){
        polygon([ $xppE,
                  $xppF,
                  $xppF + [0,1],
-                 $xppE + [1,0] ]);
+                 $xppE + [1,0] ],
+         convexity=10);
        translate(appM) circle(r= anchor_b);
       }
       translate(appM) circle(r= anchor_rad);
@@ -91,17 +103,63 @@ module AnchorWallProfile(){
        polygon([ $xppE,
                  $xppF,
                  $xppI,
-                 $xppJ ]);
+                 $xppJ ],
+         convexity=10);
       }
     }
   }
 }
 
+module WebProfile(){
+  upp_app_Vars(a_bevel){
+    if ($gppR[1] <= $gppP[1]) {
+      polygon([ $gppP,
+               $xppE,
+               $gppT,
+               $gppQ ]);
+      polygon([ $gppP,
+               $xppE,
+               $xppF,
+               $gppS,
+               $gppR ],
+         convexity=10);
+    } else {
+      polygon([ $gppP,
+               $xppE,
+               $xppF,
+               $gppS,
+               $gppP + web_height * [1,0] ],
+         convexity=10);
+    }
+    polygon([ $gppS,
+             $xppF,
+             $xppF + [1,0],
+             $gppS + [1,0] ],
+         convexity=10);
+  }
+}
+
+module KsafeBase(){
+  for (xm=[0,1]) for (ym=[0,1]) {
+    mirror([xm,0]) mirror([0,ym])
+    translate((hsz - cnr_rad) * [1,1])
+    intersection(){
+      rotate_extrude(convexity=10)
+       translate([-cnr_rad,0])
+       UsualProfile();
+      translate([0,0,-250])
+       cube([50,50,500]);
+    }
+  }
+}
+
 module DemoProfiles(){
   translate([0,0,-2]) color("yellow") AnchorWallProfile();
   color("red") AnchorProfile();
   translate([0,0,2]) color("black") NearAnchorProfile();
   translate([0,0,4]) color("blue") UsualProfile();
+  translate([0,0,-4]) color("pink") WebProfile();
 }
 
-DemoProfiles();
+//DemoProfiles();
+KsafeBase();