/* */ include include include include include <./pc4m10.scad> /* [Part] */ PART = ""; // [corner, edge, all_corners, simple_box, beamjoiner] /* [Dimensions] */ PROFILE_SIZE = 34; BOX_X = 530; BOX_Y = 210; BOX_Z = 210; WIN_LIP = 10; WIN_TRIM = 5; WIN_THICK = 3; FLOOR_LIP = 10; FLOOR_THICK = 5; JOINER_H = 18; JOINER_W = 10; /* [Render Options] */ render_fs=.4; render_fn=0; render_fa=.4; // Set Render Options $fs= ($preview) ? $fs : render_fs; $fn= ($preview) ? $fn : render_fn; $fa= ($preview) ? $fa : render_fa; /*** sides: V_TOP, [0,0,1] : Top Middle Brace V_ALLPOS, [1,1,1] POS Corner V_TOPLEFT, [-1,0,1] : Left Top Edge ***/ module dryboxNG( ps = PROFILE_SIZE, wl = WIN_LIP, wt = WIN_THICK, wtr = WIN_TRIM, jh = JOINER_H, jw = JOINER_W, walls = [], sides = [], windows = EDGES_NONE ) { cuboid([ps,ps,ps]); } //dryboxNG(); //profile(); module profile(ps=PROFILE_SIZE, wl=WIN_LIP, wt=WIN_THICK, wtr=WIN_TRIM, fl=FLOOR_LIP, ft=FLOOR_THICK, flx=false, fly=false, wx=true, wy=true) { gon=concat( [[0,ps-wl-wtr]], // Trim Start // Y Window wy ? [[0,ps-wl],[wt,ps-wl],[wt,ps]] : [[0,ps]], [[2*wt,ps]], // End of Y. // Inner Cut to X flx ? [[ps-fl,2*wt+fl],[ps-fl,2*wt+fl-ft],[ps,2*wt+fl-ft]] : [[ps,2*wt]], // X Window wx ? [[ps,wt],[ps-wl,wt],[ps-wl,0]] : [[ps,0]], [[ps-wl-wtr,0]] ); polygon(gon); } module box_edge(ps=PROFILE_SIZE, l=10, orient=ORIENT_Z, jh = JOINER_H,jw = JOINER_W, jb=5, jup = false, jdown=false, flx=false, wl=WIN_LIP, wx=true, wt=WIN_THICK, wtr = WIN_TRIM, tubepass=false, align=V_CENTER) { joiner_off = ps/2 + wt - jb/sqrt(2); jzoff = l/2-jw/2; orient_and_align([ps,ps,l], orient=orient, align=align, orig_orient=ORIENT_Z) left(ps/2) fwd(ps/2) { difference() { linear_extrude(height=l, center=true) profile(flx=flx, fly=true, wx=wx, wy=true); if (jup) up(jzoff)back(joiner_off)right(joiner_off)zrot(45)boxjoiner_clear(orient=ORIENT_Y_90, align=V_CENTER); if (jdown) down(jzoff)back(joiner_off)right(joiner_off)zrot(45)boxjoiner_clear(orient=ORIENT_Y_90, align=V_CENTER); if (tubepass) zspread(l=l/2) right(6+2+wl/2)pc4M10_clear(orient=ORIENT_Y,align=V_BACK); } if (tubepass) zspread(l=l/2) right(wtr+wt+wl/2)pc4M10(orient=ORIENT_Y,align=V_BACK); if (jup) up(l/2 - jw/2)back(joiner_off)right(joiner_off)zrot(45)boxjoiner(orient=ORIENT_Y_90, align=V_CENTER); if (jdown) down(l/2 - jw/2)back(joiner_off)right(joiner_off)zrot(45)xrot(180)boxjoiner(orient=ORIENT_Y_90, align=V_CENTER); } } module box_corner(ps = PROFILE_SIZE, l=0, zfl = true, zw = false, wt=WIN_THICK, align=V_CENTER, orient=ORIENT_Z) { orient_and_align([ps,ps,ps], orient=orient, align=align) { intersection() { // Cap fwd(ps)right(4)down(4)right(ps/2)box_edge(l=PROFILE_SIZE, orient=ORIENT_Y, align=V_BACK+V_LEFT, flx=zfl, wx=zw); right(ps)fwd(4)down(4)fwd(ps/2)box_edge(l=PROFILE_SIZE, orient=ORIENT_X, align=V_BACK+V_LEFT, flx=zfl, wx=zw); down(ps/2+WIN_TRIM)fwd(4)right(4)box_edge(l=PROFILE_SIZE, orient=ORIENT_Z_90, align=V_TOP, flx=false, wx=true); } fwd(1)right(4)down(4)right(ps/2)box_edge(l=ps, orient=ORIENT_Y, jup=true, align=V_BACK+V_LEFT, flx=zfl, wx=zw); right(1)fwd(4)down(4)fwd(ps/2)box_edge(l=PROFILE_SIZE, orient=ORIENT_X, jdown=true, align=V_BACK+V_LEFT, flx=zfl, wx=zw); down(1)fwd(4)right(4)box_edge(l=ps, orient=ORIENT_Z_90, align=V_TOP, jup=true, flx=false, wx=true); } } module beam_joiner(jw=JOINER_W, jh=JOINER_H, fl=false) { difference() { union() { fwd(jw/2)boxjoiner(h=jh, w=jw,l=5,align=FRONT, orient=ORIENT_X); back(jw/2)zrot(180)boxjoiner(h=jh, w=jw,l=5,align=FRONT, orient=ORIENT_X); } if (fl) left(jh/2)down(3)yrot(45)cuboid([4,2*jh,4]); } } module box_all_corners(ex=0) { // top up(ex) fwd(ex) left(ex) box_corner(zfl=false, zw=true,align=V_UP+V_FRONT+V_LEFT, orient=ORIENT_ZNEG); up(ex) back(ex) left(ex) box_corner(zfl=false, zw=true,align=V_UP+V_BACK+V_LEFT, orient=ORIENT_ZNEG_90); up(ex) back(ex) right(ex) box_corner(zfl=false, zw=true, align=V_UP+V_BACK+V_RIGHT, orient=ORIENT_ZNEG_180); up(ex) fwd(ex) right(ex) box_corner(zfl=false,zw=true,align=V_UP+V_FRONT+V_RIGHT, orient=ORIENT_ZNEG_270); // bottom down(ex) fwd(ex) right(ex) box_corner(align=V_DOWN+V_FRONT+V_RIGHT, orient=ORIENT_Z); down(ex) back(ex) right(ex) box_corner(align=V_DOWN+V_BACK+V_RIGHT, orient=ORIENT_Z_90); down(ex) back(ex) left(ex) box_corner(align=V_DOWN+V_BACK+V_LEFT, orient=ORIENT_Z_180); down(ex) fwd(ex) left(ex) box_corner(align=V_DOWN+V_FRONT+V_LEFT, orient=ORIENT_Z_270); } module boxjoiner(slop=.01, align=V_FRONT, jh=JOINER_H, jw=JOINER_W, l=3, orient=ORIENT_Z) { orient_and_align([jw,0,jh], orig_align=V_FRONT, align=align, orient=orient) joiner(h=jh, w=jw, l=l, screwsize= $preview ? undef : .8); } module boxjoiner_clear(inset=5, slop=.01, jh=JOINER_H, jw=JOINER_W, align=V_FRONT, orient=ORIENT_Z) { orient_and_align([jw,inset,jh],orient=orient, align=align) fwd() { cuboid([jw+slop,inset+slop,jh], align=V_BACK); joiner_clear(h=jh, w=jw+slop); } } if (PART == "corner") box_corner(); if (PART == "edge") { xbeam = BOX_X - 2 * PROFILE_SIZE; xrot(90) zrot(0) box_edge(l=xbeam/3, jup=true, jdown=true, flx=true, wx=false, tubepass=true, orient=ORIENT_Z); } if (PART == "all_corners") box_all_corners(ex=30); if (PART == "simple_box") { lx = BOX_X - 2 * PROFILE_SIZE; ly = BOX_Y - 2 * PROFILE_SIZE; lz = BOX_Z - 2 * PROFILE_SIZE; ps = PROFILE_SIZE; fwd(ps+ly/2) box_edge(l=lx, jup=true, jdown=true, flx=true, wx=false, orient=ORIENT_X); back(ps+ly/2) zrot(180) box_edge(l=lx, jup=true, jdown=true, flx=true, wx=false, orient=ORIENT_X); back(3)#right(ps+lx/2+4) box_edge(l=ly, jup=true, jdown=true, flx=true, wx=false, orient=ORIENT_Y); left(ps+lx/2) zrot(-90)box_edge(l=ly, jup=true, jdown=true, flx=true, wx=false, orient=ORIENT_X); up(4)right(ps+lx/2)fwd(ps+ly/2-4)box_corner(); up(4)right(ps+lx/2)back(ps+ly/2-4)box_corner(orient=ORIENT_Z_90); up(4)left(ps+lx/2)back(ps+ly/2-4)box_corner(orient=ORIENT_Z_180); up(4)left(ps+lx/2)fwd(ps+ly/2-4)box_corner(orient=ORIENT_Z_270); } if (PART == "beamjoiner") beam_joiner(fl=false);