X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=reprap-play.git;a=blobdiff_plain;f=ksafe-base.scad;h=0f881c33401085b87af74c4688793ad09890abdf;hp=b2536af81f05fa49f37732f7a265229a73b7b18c;hb=8b47f909e8ebd46b953900143f01e17637230ad4;hpb=c5b9f398993c756ff4446a2ef09c66aa8d58d662 diff --git a/ksafe-base.scad b/ksafe-base.scad index b2536af..0f881c3 100644 --- a/ksafe-base.scad +++ b/ksafe-base.scad @@ -1,33 +1,142 @@ // -*- 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; -minbevel = space/2; +bevel = 15; + +// ----- calculated ----- -// calculated +gppA = [0,0]; +gppB = gppA - [ wall_thick, 0 ]; -uppA = [0,0]; -uppB = uppA - [ wall_thick, 0 ]; +gppL = [ gppB[0], -(lidinner_thick_allow + space + base_thick) ]; + +// anchor -uppL = [ uppB[0], -(lidinner_thick_allow + space + base_thick) ]; anchor_b = anchor_thick + anchor_rad; -uppM = uppL + anchor_b * [1,1]; +appM = gppL + anchor_b * [1,1]; + +a_bevel = 2 * anchor_b * (1 + sqrt(0.5)); + +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] ]; + + children(); +} -bevel = max(minbevel, 2 * anchor_b * (1 + sqrt(0.5))); -uppE = uppL + bevel * [0,1]; -uppF = uppL + bevel * [1,0]; +module upp_app_Profile(){ + polygon([ gppA, + gppB, + $xppE, + $xppF, + $xppF + [1,0], + $xppI + [1,0], + $xppJ ]); +} -uppJ = uppE + wall_thick * [ 1, tan(22.5) ]; -uppI = uppF + base_thick + [ tan(22.5), 1 ]; -uppH = upp module UsualProfile(){ - + upp_app_Vars(bevel) upp_app_Profile(); +} + +module NearAnchorProfile(){ + upp_app_Vars(a_bevel) upp_app_Profile(); +} + +module AnchorProfile(){ + 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] ]); + } + polygon([ $gppS, + $xppF, + $xppF + [1,0], + $gppS + [1,0] ]); + } +} + +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();