X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=sealing-box.scad.m4;h=3130e6d5463aa322d4ae98fdd5f09d43e4d3495f;hb=67913471b762962998973556e5e5db6e9ad664d9;hp=21d54ec9873d36887b98fc5f731b6ec3e7170d38;hpb=861c306bb597c7ee0736fb4127e50160bd417e2a;p=reprap-play.git diff --git a/sealing-box.scad.m4 b/sealing-box.scad.m4 index 21d54ec..3130e6d 100644 --- a/sealing-box.scad.m4 +++ b/sealing-box.scad.m4 @@ -5,9 +5,13 @@ // 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) +// $sealingbox_wallth +// $sealingbox_xbox (outer dimension) +// $sealingbox_ybox (outer dimension) +// $sealingbox_zbox (inner dimension) +// $sealingbox_ceilth +// $sealingbox_floorth +// $sealingbox_wallth // ts_cnrrad (outer radius of corners, leave at default normall) // xxx default should be in this file // 3. use the modules @@ -16,7 +20,23 @@ // // B. Complicated shapes, but harder work // 1. Be a .m4 file and m4_include sealing-box.scad.m4 -// 2. Maybe define your own BoxDoShapeRect xxx tbd +// 2. Define your own BoxDoShapeSomething like BoxDoShapeRect +// 3. Invoke BoxUseShape +// 4. Use the Box and Lid modules generated + +m4_define(`BoxLocals',` + wall = $sealingbox_wallth; + floorth = $sealingbox_floorth; + ceilth = $sealingbox_ceilth; + xbox = $sealingbox_xbox; + ybox = $sealingbox_ybox; + zbox = $sealingbox_zbox; + + ts_cidoff = (ts_cnrrad * (1-.7) + wall * .8) * [1,1]; + + xbox_lin = xbox - ts_cnrrad*2; + ybox_lin = ybox - ts_cnrrad*2; +') 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)) @@ -59,49 +79,47 @@ 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 TestSealDoBoxShape(`profile(profileargs)'); -m4_define(`TestSealDoBoxShape',` - 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' ) +m4_dnl BoxDoShapeRect(`profile(profileargs)'); +m4_define(`BoxDoShapeRect',` + Box_Part(0, ts_cnrrad, 0,0, Linear,`ybox_lin', `$1' ) + Box_Part(0, ybox-ts_cnrrad, 0,0, Arc,`-ts_cnrrad,90' , `$1' ) + Box_Part(ts_cnrrad, ybox, -90,0, Linear,`xbox_lin', `$1' ) + Box_Part(xbox-ts_cnrrad, ybox, -90,0, Arc,`-ts_cnrrad,90' , `$1' ) + Box_Part(xbox, ybox-ts_cnrrad, -180,0, Linear,`ybox_lin', `$1' ) + Box_Part(xbox, ts_cnrrad, -180,0, Arc,`-ts_cnrrad,90' , `$1' ) + Box_Part(xbox-ts_cnrrad, 0, -270,0, Linear,`xbox_lin', `$1' ) Box_Part(ts_cnrrad, 0, -270,0, Arc,`-ts_cnrrad,90' , `$1' ) ') m4_dnl ' -module WallProfile(){ - z = ts_zbox - innertube - tubesealrad; - translate([0, -0.1]) square([wallthick, z]); +module SealingBox_WallProfile(){ + BoxLocals + z = zbox - innertube - tubesealrad; + translate([0, -0.1]) square([wall, z]); translate([tubesealrad, z]) circle(r=tubesealrad, $fn=20); } -module FloorProfile(){ - mirror([0,1]) square([wallthick, floorth]); +module SealingBox_FloorProfile(){ + BoxLocals + mirror([0,1]) square([wall, floorth]); } -module LidProfile(){ +module SealingBox_LidProfile(){ + BoxLocals rad = tubesealrad + innertube; - morex = wallthick; + morex = wall; difference(){ translate([-lidoverlap - innertube, - ts_zbox - lidoverhang - innertube]) - square([lidoverlap + innertube + wallthick, + zbox - lidoverhang - innertube]) + square([lidoverlap + innertube + wall, lidoverhang + innertube + ceilth]); 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); @@ -110,17 +128,26 @@ module LidProfile(){ } } -module CeilProfile(){ - translate([0, ts_zbox]) - square([wallthick*2, ceilth]); +module SealingBox_CeilProfile(){ + BoxLocals + translate([0, zbox]) + square([wall*2, ceilth]); } -module TestSealBoxBox(){ - TestSealDoBoxShape(WallProfile();); - hull(){ TestSealDoBoxShape(FloorProfile();); } -} +// BoxDoShape(Basename,BoxDoShapeSomething) +// generates modules BasenameBox and BasenameLid +m4_define(`BoxUseShape',` + module $1Box(){ + BoxLocals + $2(SealingBox_WallProfile();); + hull(){ $2(SealingBox_FloorProfile();); } + } -module TestSealBoxLid(){ ////toplevel - TestSealDoBoxShape(LidProfile();); - hull(){ TestSealDoBoxShape(CeilProfile();); } -} + module $1Lid(){ + BoxLocals + $2(SealingBox_LidProfile();); + hull(){ $2(SealingBox_CeilProfile();); } + } +') + +BoxUseShape(`TestSealBox',`BoxDoShapeRect')