// -*- C -*-
-// xxx from actual ksafe, needs slop adding
-bolt_above = 14.30;
-bolthole_height = 4.24;
+// from actual ksafe
+bolt_above = 8.50 - 0.50;
+bolthole_height = 4.24 + 1.00;
wall_thick = 4.50;
-bolthole_width = 16.62;
-main_sz = 150.56;
+bolthole_width = 16.62 + 2.00;
+main_sz = 150.56 + 0.75;
cnr_rad = 13.5; // approx
-lidinner_thick_allow = 20.78;
+lidinner_thick_allow = 20.78 + 0.50;
+
+dpp3 = [ -5.5, 8.5 ];
+dpp2 = [ -11.0, 7.0 ];
+dpp1 = [ -34.0, 14.0 ];
// other parameters
web_thick = 4;
anchor_thick = 4;
anchor_rad = 4;
bevel = 8;
+string_slot = 3.0;
+string_depth = 6.0;
+thumbslot_depth = 5.0;
+thumbslot_width = 15.0;
+thumbslot_between = 10;
+dcover_endthick = 3.0;
+dcover_mainthick = 5.0;
+dcover_slop_height = 0.25;
+dcover_slop_depth = 0.25;
+dcover_slop_inside = 1.25;
// ----- calculated -----
}
}
-module KsafeBase(){
- /// corners
- for (xm=[0,1]) for (ym=[0,1]) {
- mirror([xm,0,0]) mirror([0,ym,0])
+module AtTwoCorners(){
+ for (xm=[0,1]) {
+ mirror([xm,0,0])
translate((hsz - cnr_rad) * [1,1])
intersection(){
rotate_extrude(convexity=10)
translate([-cnr_rad,0])
- UsualProfile();
+ children();
translate([0,0,-250])
cube([50,50,500]);
}
}
+}
+
+module Box(){
+ /// corners, and front and back of base
+ for (ym=[0,1]) mirror([0,ym,0]) {
+ AtTwoCorners(){
+ UsualProfile();
+ }
+ hull() AtTwoCorners(){
+ upp_app_Vars(bevel){
+ polygon([ $xppI,
+ $xppF,
+ $xppF + [0.1, 0],
+ $xppI + [0.1, 0]
+ ]);
+ }
+ }
+ }
// side walls and base
SWalls(yw6 , yw4 , bevel ) { UsualProfile(); BaseProfile(); }
SWalls(yw3 , yw2 , a_bevel) { AnchorProfile(); BaseProfile(); }
SWalls(yw11, yw12, a_bevel) { AnchorWallProfile(); BaseProfile(); }
SWalls(yw11, yw13, bevel ) { UsualProfile(); BaseProfile(); }
+ SWalls(yw1, yw10, a_bevel) { WebProfile(); SomeBaseProfile($gppS, $xppF); }
+
+ // front and rear walls
+ rotate([0,0,90]) SWalls(yw6, yw13, bevel) UsualProfile();
}
-module DemoProfiles(){
+module KsafeBase(){ ////toplevel
+ cut = main_sz + 20;
+
+ difference(){
+ Box();
+
+ // bolt holes
+ translate([0,0, -bolt_above -0.5 * bolthole_height])
+ cube(center=true, [ cut, bolthole_width, bolthole_height ]);
+
+ // string slot
+ translate([ -cut,
+ -(bolthole_width/2 + bolthole_rhs),
+ 1 ])
+ mirror([0,1,0]) mirror([0,0,1])
+ cube([ cut*2,
+ string_slot,
+ lidinner_thick_allow + string_depth + 1 ]);
+
+ // thumb slots
+ for (mx=[0,1]) mirror([mx,0,0]) {
+ translate([ thumbslot_between/2,
+ 0,
+ -thumbslot_depth ])
+ cube([ thumbslot_width,
+ cut,
+ thumbslot_depth+1 ]);
+ }
+ }
+}
+
+module DemoProfiles(){ ////toplevel
translate([0,0,-2]) color("yellow") AnchorWallProfile();
color("red") AnchorProfile();
translate([0,0,2]) color("black") NearAnchorProfile();
translate([0,0,-4]) color("pink") WebProfile();
}
+module RimTest(){ ////toplevel
+ intersection(){
+ Box();
+ cube(center=true, [ main_sz*2, main_sz*2,
+ 2.5 ]);
+ }
+}
+
+module BoltTest(){ ////toplevel
+ dy = 0.5 * (bolthole_width+4);
+ intersection(){
+ KsafeBase();
+ translate([ 0, -dy, -(bolt_above + bolthole_height + 1) ])
+ cube([ main_sz, dy*2, 50 ]);
+ }
+}
+
//DemoProfiles();
-KsafeBase();
+//Box();
+//KsafeBase();
+//RimTest();