X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=reprap-play.git;a=blobdiff_plain;f=ksafe-base.scad;h=c2e2704557e494b15ffc4097faf3e6a8122b13b7;hp=1d4048b5a78bd3cbbc6fc8925e8e54dc0e559d73;hb=3c75c6575c9ec874afd93fe9d2e1c7f28390806f;hpb=ab17fe6f88cd97bd30a7cbd66162246b1d137ae3 diff --git a/ksafe-base.scad b/ksafe-base.scad index 1d4048b..c2e2704 100644 --- a/ksafe-base.scad +++ b/ksafe-base.scad @@ -1,13 +1,18 @@ // -*- 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; -cnr_rad = 13.5; // approx -lidinner_thick_allow = 20.78; +bolthole_width = 16.62 + 1.00; +main_sz = 149.06 - 0.25; +cnr_rad = 19.5; +lidinner_thick_allow = 20.78 + 0.50; +display_width = 69.81 - 0.50; + +dpp3 = [ -5.5, 8.5 ]; +dpp2 = [ -11.0, 7.0 ]; +dpp1 = [ -34.0, 14.0 ]; // other parameters web_thick = 4; @@ -21,10 +26,25 @@ space = 25; 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; +ksafecover_lip = 4.62; +display_rhs_secs = 15; +dcover_endthick = 3.0; +dcover_mainthick = 5.0; +dcover_slop_height = 0.35; +dcover_slop_depth = 0.25; +dcover_slop_inside = 1.50; +dcover_commonvertoff = 0.00; // slop_height or slop_inside is added too +dcover_edge_gap_more_width = 2.0; // each side // ----- calculated ----- hsz = main_sz/2; +cut = main_sz + 20; gppA = [0,0]; gppB = gppA - [ wall_thick, 0 ]; @@ -43,6 +63,19 @@ yw11 = yw2 + anchor_wall_space; yw12 = yw11 + wall_thick; yw13 = -yw6; +cpp1 = dpp1 + [ dcover_slop_depth, dcover_slop_height ]; +cpp2 = [ dpp2[0] - dcover_slop_depth, dpp3[1] + dcover_slop_height ]; +cppH = cpp1 + [ 0, dcover_endthick ]; +cppA = [ cpp2[0], dpp3[1] + dcover_slop_inside ]; +cppK = cppA + [ 0, dcover_mainthick ]; +cppZ = [ -ksafecover_lip, -dcover_commonvertoff ]; +cppD = cppZ + [ 0, -dcover_slop_inside ]; +cppC = [ dcover_slop_inside, cppD[1] ]; +cppF = cppC + dcover_mainthick * [1,-1]; +cppB = [ cppC[0], cppA[1] ]; +cppG = [ cppF[0], cppK[1] ]; +cppE = [ cppD[0], cppF[1] - (cppF[0] - cppD[0]) ]; + // anchor anchor_b = anchor_thick + anchor_rad; @@ -162,6 +195,27 @@ module BaseProfile(){ SomeBaseProfile($xppI, $xppF); } +module DCoverProfileRaw(){ + polygon([ cpp1, + cpp2, + cppA, + cppB, + cppC, + cppD, + cppE, + cppF, + cppG, + cppK, + cppH ], + convexity = 10); +} + +module DCoverProfile(){ + mirror([1,0]) + translate(-cppZ) + DCoverProfileRaw(); +} + module SWalls(ymin, ymax, t_bevel) { upp_app_Vars(t_bevel) { translate([0,ymin,0]) @@ -189,12 +243,21 @@ module AtTwoCorners(){ } } -module KsafeBase(){ - /// corners +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 @@ -205,15 +268,106 @@ module KsafeBase(){ 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 DCover(){ ////toplevel + translate([ -display_width/2, -hsz, 0 ]) + rotate([0,90,0]) + rotate([0,0,90]) + linear_extrude( display_width - display_rhs_secs, convexity = 10) + DCoverProfile(); +} + +module DCoverSupportAllowance(){ + translate([0, -hsz, 0]) + cube(center=true, + [ display_width + 2 * dcover_edge_gap_more_width, + wall_thick * 2, + dcover_slop_inside * 2 + 0.01 ]); +} + +module BoltHoles(){ + translate([0,0, -(bolt_above + 0.5 * bolthole_height)]) + cube(center=true, [ cut, bolthole_width, bolthole_height ]); } -module DemoProfiles(){ +module KsafeBase(){ ////toplevel + DCover(); + + difference(){ + Box(); + + BoltHoles(); + + // 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 ]); + } + + DCoverSupportAllowance(); + } +} + +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("blue") UsualProfile(); translate([0,0,-4]) color("pink") WebProfile(); + translate([0,0,6]) color("purple") DCoverProfile(); +} + +module RimTest(){ ////toplevel + intersection(){ + Box(); + cube(center=true, [ main_sz*2, main_sz*2, + 2.5 ]); + } +} + +module DCoverTest(){ ////toplevel + intersection(){ + difference(){ + union(){ + Box(); + DCover(); + } + DCoverSupportAllowance(); + BoltHoles(); + } + translate([0,0,60]) + cube(center=true, [ main_sz*2, main_sz*2, + 2 * (60 + 10) ]); + } +} + +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();