X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=reprap-play.git;a=blobdiff_plain;f=sealing-box.scad.m4;h=dbfb220f9519b7535a4ec66f16a40ce6d588b30b;hp=e2b5702a0f79e242eab6cae2b210b8a43ceb5ba0;hb=2e669aab002d7fcae3f038b5335a7b484abdcb2f;hpb=1bb9bf058a851096f8ab7336cd83020d7f564527;ds=sidebyside diff --git a/sealing-box.scad.m4 b/sealing-box.scad.m4 index e2b5702..dbfb220 100644 --- a/sealing-box.scad.m4 +++ b/sealing-box.scad.m4 @@ -5,20 +5,51 @@ // A. Rectangular boxes // 1. include // 2. assign() values to (xxx these should be $ variables) -// ts_xbox (outer dimensions) -// ts_ybox (outer dimension) -// ts_zbox (??? xxx) -// ts_cnrrad (outer radius of corners, leave at default normall) -// xxx default should be in this file +// $sealingbox_wallth +// $sealingbox_sz[0] (outer dimension) +// $sealingbox_sz[1] (outer dimension) +// $sealingbox_sz[2] (inner dimension) +// $sealingbox_ceilth +// $sealingbox_floorth +// $sealingbox_wallth // 3. use the modules // SealingBox_RectBox // SealingBox_RectLid +// (origin is notional outside corner, but at level of +// inside of base; box extends to positive x,y,z) // // B. Complicated shapes, but harder work // 1. Be a .m4 file and m4_include sealing-box.scad.m4 // 2. Define your own BoxDoShapeSomething like BoxDoShapeRect // 3. Invoke BoxUseShape // 4. Use the Box and Lid modules generated +// +// Other settings +// $sealingbox_cnrrad + +$sealingbox_cnrrad = 10; +$sealingbox_crude = false; +$sealingbox_inner_slop = 0.2; + +m4_define(`BoxLocals',` + xbox = $sealingbox_sz[0]; + ybox = $sealingbox_sz[1]; + zbox = $sealingbox_sz[2]; + wall = $sealingbox_wallth; + floorth = $sealingbox_floorth; + ceilth = $sealingbox_ceilth; + cnrrad = $sealingbox_cnrrad; + + xbox_lin = xbox - cnrrad*2; + ybox_lin = ybox - cnrrad*2; +') + +m4_define(`innertube', `(1.0 + 0.2)') +m4_define(`lidoverlap', `1.5') +m4_define(`lidoverhang', `6') +m4_define(`tubesealrad', `2.0') + +m4_define(`BoxFn',`$fn= $sealingbox_crude ? ($2) : ($1)') m4_dnl Box_Part($1=transl_x,$2=transl_y, $3=rot_z,$4=mirror_xy) m4_dnl $5=kind, $6=kindargs, $7=profile(profileargsargs)) @@ -53,7 +84,7 @@ m4_define(`BoxPart_Extrude_Arc',` scale(500) mirror([($1)<0, 0,0]) FArcSegment_mask($2); - rotate_extrude(convexity=10, $fs=1, $fn=36) + rotate_extrude(convexity=10, $fs=1, BoxFn(36,8)) mirror([($1)<0, 0,0]) translate([+($1),0,0]){ $3 @@ -61,74 +92,89 @@ m4_define(`BoxPart_Extrude_Arc',` } ') -ts_cidoff = (ts_cnrrad * (1-.7) + wallthick * .8) * [1,1]; - -ts_xbox_lin = ts_xbox - ts_cnrrad*2; -ts_ybox_lin = ts_ybox - ts_cnrrad*2; - m4_dnl BoxDoShapeRect(`profile(profileargs)'); m4_define(`BoxDoShapeRect',` - Box_Part(0, ts_cnrrad, 0,0, Linear,`ts_ybox_lin', `$1' ) - Box_Part(0, ts_ybox-ts_cnrrad, 0,0, Arc,`-ts_cnrrad,90' , `$1' ) - Box_Part(ts_cnrrad, ts_ybox, -90,0, Linear,`ts_xbox_lin', `$1' ) - Box_Part(ts_xbox-ts_cnrrad, ts_ybox, -90,0, Arc,`-ts_cnrrad,90' , `$1' ) - Box_Part(ts_xbox, ts_ybox-ts_cnrrad, -180,0, Linear,`ts_ybox_lin', `$1' ) - Box_Part(ts_xbox, ts_cnrrad, -180,0, Arc,`-ts_cnrrad,90' , `$1' ) - Box_Part(ts_xbox-ts_cnrrad, 0, -270,0, Linear,`ts_xbox_lin', `$1' ) - Box_Part(ts_cnrrad, 0, -270,0, Arc,`-ts_cnrrad,90' , `$1' ) + Box_Part(0, cnrrad, 0,0, Linear,`ybox_lin', `$1' ) + Box_Part(0, ybox-cnrrad, 0,0, Arc,`-cnrrad,90' , `$1' ) + Box_Part(cnrrad, ybox, -90,0, Linear,`xbox_lin', `$1' ) + Box_Part(xbox-cnrrad, ybox, -90,0, Arc,`-cnrrad,90' , `$1' ) + Box_Part(xbox, ybox-cnrrad, -180,0, Linear,`ybox_lin', `$1' ) + Box_Part(xbox, cnrrad, -180,0, Arc,`-cnrrad,90' , `$1' ) + Box_Part(xbox-cnrrad, 0, -270,0, Linear,`xbox_lin', `$1' ) + Box_Part(cnrrad, 0, -270,0, Arc,`-cnrrad,90' , `$1' ) ') m4_dnl ' module SealingBox_WallProfile(){ - z = ts_zbox - innertube - tubesealrad; - translate([0, -0.1]) square([wallthick, z]); - translate([tubesealrad, z]) circle(r=tubesealrad, $fn=20); + BoxLocals + z = zbox - innertube - tubesealrad; + translate([0, -0.1]) square([wall, z]); + translate([tubesealrad, z]) circle(r=tubesealrad, BoxFn(20,6)); } module SealingBox_FloorProfile(){ - mirror([0,1]) square([wallthick, floorth]); + BoxLocals + mirror([0,1]) square([wall, floorth]); } +function SealingBox_lidbigger() = lidoverlap + innertube; + module SealingBox_LidProfile(){ + BoxLocals rad = tubesealrad + innertube; - morex = wallthick; + morex = wall; + inner_buttress_h = tubesealrad*1.5 + innertube + ceilth; + difference(){ - translate([-lidoverlap - innertube, - ts_zbox - lidoverhang - innertube]) - square([lidoverlap + innertube + wallthick, + translate([0, zbox + ceilth]) mirror([0,1]) { + translate([-SealingBox_lidbigger(), + 0]) + square([lidoverlap + innertube + tubesealrad, lidoverhang + innertube + ceilth]); + square([tubesealrad*2 + innertube + lidoverlap, + inner_buttress_h]); + } hull(){ translate([tubesealrad, - ts_zbox - innertube - tubesealrad]) + zbox - innertube - tubesealrad]) for (t=[ [0,0], - [morex*2, 0], - [0, -ts_zbox] + [0, -zbox] ]) { translate(t) - circle(r= tubesealrad + innertube, $fn=20); + circle(r= tubesealrad + innertube, BoxFn(20,6)); } } } + translate([tubesealrad*2 + $sealingbox_inner_slop, + zbox + ceilth]) { + mirror([0,1]) { + square([lidoverlap + innertube, + inner_buttress_h]); + } + } } module SealingBox_CeilProfile(){ - translate([0, ts_zbox]) - square([wallthick*2, ceilth]); + BoxLocals + translate([0, zbox]) + square([wall*2, ceilth]); } // BoxDoShape(Basename,BoxDoShapeSomething) // generates modules BasenameBox and BasenameLid m4_define(`BoxUseShape',` module $1Box(){ + BoxLocals $2(SealingBox_WallProfile();); hull(){ $2(SealingBox_FloorProfile();); } } module $1Lid(){ + BoxLocals $2(SealingBox_LidProfile();); hull(){ $2(SealingBox_CeilProfile();); } } ') -BoxUseShape(`TestSealBox',`BoxDoShapeRect') +BoxUseShape(`SealingBox_Rect',`BoxDoShapeRect')