From db4451761214d02cfd616082835c87c9ee0bc525 Mon Sep 17 00:00:00 2001 From: Stephen J Carpenter Date: Tue, 19 Mar 2024 21:32:27 -0400 Subject: [PATCH] Added Full Box Full Box model does a mockup of all parts. Fixed alignments --- box.scad | 92 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 76 insertions(+), 16 deletions(-) diff --git a/box.scad b/box.scad index 9eaec28..0007965 100644 --- a/box.scad +++ b/box.scad @@ -8,7 +8,7 @@ include <./pc4m10.scad> /* [Part] */ -PART = ""; // [corner, edge, all_corners, simple_box, beamjoiner] +PART = ""; // [corner, back_edge, all_corners, full_box, beamjoiner, profile] /* [Dimensions] */ @@ -28,6 +28,12 @@ FLOOR_THICK = 5; JOINER_H = 18; JOINER_W = 10; +RB_MOUNT_INSET=17; +RB_MOUNT_WIDTH=9; +RB_MOUNT_LEN=136; +RB_MOUNT_OUT_H=19; +RB_MOUNT_IN_H=6.15; + /* [Render Options] */ render_fs=.4; render_fn=0; @@ -67,6 +73,13 @@ module 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) { + conv = (wx && wy && flx) + ? 3 + : ((wx && wy) || (wy && flx)) + ? 2 + : (wx || wy || flx) + ? 1 + : 0; gon=concat( [[0,ps-wl-wtr]], // Trim Start // Y Window @@ -81,7 +94,11 @@ module profile(ps=PROFILE_SIZE, wl=WIN_LIP, wt=WIN_THICK, wtr=WIN_TRIM, fl=FLOOR : [[ps,0]], [[ps-wl-wtr,0]] ); - polygon(gon); + polygon(points = gon, convexity=conv); +} + +module rb_foot() { + } 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) { @@ -102,16 +119,17 @@ module box_edge(ps=PROFILE_SIZE, l=10, orient=ORIENT_Z, jh = JOINER_H,jw = JOINE } 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) { + sz = 2*ps; + orient_and_align([sz,sz,sz], 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); + fwd(1)right(4)down(4)right(ps/2)box_edge(l=ps+1, 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=ps+1, orient=ORIENT_X, jdown=true, align=V_BACK+V_LEFT, flx=zfl, wx=zw); + down(1)fwd(4)right(4)box_edge(l=ps+1, orient=ORIENT_Z_90, align=V_TOP, jup=true, flx=false, wx=true); } } @@ -152,27 +170,69 @@ module boxjoiner_clear(inset=5, slop=.01, jh=JOINER_H, jw=JOINER_W, align=V_FRON } } +if (PART == "profile") { + profile(flx=true); +} if (PART == "corner") box_corner(); -if (PART == "edge") { +if (PART == "back_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") { +if (PART == "full_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); + psoff = ps/2 - WIN_LIP - WIN_THICK; + coff = ps + psoff; + + echo(str("Edge Len X: ", lx, " (3 x ", lx/3, ")")); + echo(str("Edge Len Y: ", ly, " (1 x ", ly, ")")); + echo(str("Edge Len Z: ", lz, " (1 x ", lz, ")")); + up(lz/2+ps) { + // Bottom Corners: + right(lx/2) fwd(ps+ly/2)box_corner(orient=ORIENT_ZNEG_270, align=V_RIGHT); + right(ps+lx/2) back(ps+ly/2)box_corner(orient=ORIENT_ZNEG_180); + left(ps+lx/2) back(ps+ly/2)box_corner(orient=ORIENT_ZNEG_90); + left(ps+lx/2) fwd(ps+ly/2)box_corner(orient=ORIENT_ZNEG); + } + up(lz/2+coff) { // Top Edges + fwd(coff + ly/2) box_edge(l=lx, jup=true, jdown=true, flx=true, wx=false, orient=ORIENT_XNEG_180); + back(coff + ly/2) { + xspread(n=3, lx/3)box_edge(l=lx/3, jup=true, jdown=true, flx=true, wx=false, tubepass=false, orient=ORIENT_X_180); + } + right(coff + lx/2) box_edge(l=ly, jup=true, jdown=true, flx=true, wx=false, orient=ORIENT_YNEG_180); + left(coff + lx/2) zrot(180)box_edge(l=ly, jup=true, jdown=true, flx=true, wx=false, orient=ORIENT_YNEG_180); + } + { // vertical + left(coff+lx/2)fwd(coff+ly/2) + box_edge(l=lz,jup=true, jdown=true); + right(coff+lx/2)fwd(coff+ly/2) + box_edge(l=lz,jup=true, jdown=true, orient=ORIENT_Z_90); + right(coff+lx/2)back(coff+ly/2) + box_edge(l=lz,jup=true, jdown=true, orient=ORIENT_Z_180); + left(coff+lx/2)back(coff+ly/2) + box_edge(l=lz,jup=true, jdown=true, orient=ORIENT_Z_270); + } + down(lz/2+coff) { // Bottom Edges, XXX: down to align with corner. This may be an issue when we add feet. + fwd(coff + ly/2) box_edge(l=lx, jup=true, jdown=true, flx=true, wx=false, orient=ORIENT_X); + back(coff + ly/2) zrot(180) { // rear + xspread(n=3, lx/3)box_edge(l=lx/3, jup=true, jdown=true, flx=true, wx=false, tubepass=true, orient=ORIENT_X); + } + // Sides - XXX: Add feet + right(coff + lx/2) box_edge(l=ly, jup=true, jdown=true, flx=true, wx=false, orient=ORIENT_Y); + left(coff + lx/2) zrot(180)box_edge(l=ly, jup=true, jdown=true, flx=true, wx=false, orient=ORIENT_Y); + } + down(lz/2+ps) { + // Bottom Corners: + right(lx/2) fwd(ps+ly/2)box_corner(align=V_RIGHT); + right(ps+lx/2) back(ps+ly/2)box_corner(orient=ORIENT_Z_90); + left(ps+lx/2) back(ps+ly/2)box_corner(orient=ORIENT_Z_180); + left(ps+lx/2) fwd(ps+ly/2)box_corner(orient=ORIENT_Z_270); + } } if (PART == "beamjoiner") beam_joiner(fl=false);