diff --git a/box.scad b/box.scad new file mode 100644 index 0000000..c5d3b5a --- /dev/null +++ b/box.scad @@ -0,0 +1,163 @@ +/* */ + +include +include +include +include +include <./pc4m10.scad> + +/* [Dimensions] */ + +PROFILE_SIZE = 38; + +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-wt-wtr]], + // Y Window + wy ? [[0,ps-wl-wt],[wt,ps-wl-wt],[wt,ps-wt]] + : [[0,ps-wt]], + // inner cut + [[2*wt,ps-wt]], + flx ? [[ps-wt-fl,2*wt+fl],[ps-wt-fl,2*wt+fl-ft],[ps,2*wt+fl-ft]] + : [[ps-wt,2*wt]], + // X Window + wx ? [[ps-wt,wt],[ps-wl-wt,wt],[ps-wl-wt,0]] + : [[ps-wt,0]], + [[ps-wl-wt-wtr,0]] + ); + polygon(gon); +} + + +module box_edge(ps=PROFILE_SIZE, l=10, orient=ORIENT_Z, jh = JOINER_H,jw = JOINER_W, jup = false, jdown=false, flx=false, wx=true, align=V_CENTER) { + orient_and_align([ps,ps,l], orient=orient, align=align, orig_orient=ORIENT_Z) { + difference() { + linear_extrude(height=l, center=true) + profile(flx=flx, fly=true, wx=wx, wy=true); + if (jup) up(l/2-jw/2)back(ps/2-sqrt(2))right(ps/2-sqrt(2))zrot(45)boxjoiner_clear(orient=ORIENT_Y_90, align=V_CENTER); + if (jdown) down(l/2-jw/2)back(ps/2-sqrt(2))right(ps/2-sqrt(2))zrot(45)boxjoiner_clear(orient=ORIENT_Y_90, align=V_CENTER); + } + if (jup) up(l/2 - jw/2)back(ps/2-sqrt(2))right(ps/2-sqrt(2))zrot(45)boxjoiner(orient=ORIENT_Y_90, align=V_CENTER); + if (jdown) down(l/2 - jw/2)back(ps/2-sqrt(2))right(ps/2-sqrt(2))zrot(45)xrot(180)boxjoiner(orient=ORIENT_Y_90, align=V_CENTER); + } +} + +module box_corner(l=0, zfl = true, zw = false, wt=WIN_THICK, align=V_CENTER, orient=ORIENT_Z) { + orient_and_align([PROFILE_SIZE+l, PROFILE_SIZE+l, PROFILE_SIZE+l], align=align, orient=orient) + back((PROFILE_SIZE-l)/2)left((PROFILE_SIZE-l)/2)down((PROFILE_SIZE-l)/2) { + intersection() { + fwd(PROFILE_SIZE/2)right(PROFILE_SIZE/2)box_edge(l=PROFILE_SIZE, orient=ORIENT_Y, align=V_RIGHT, flx=zfl, wx=zw); + right(PROFILE_SIZE)fwd(PROFILE_SIZE/2)box_edge(l=PROFILE_SIZE, orient=ORIENT_X, align=V_FRONT, flx=zfl, wx=zw); + up(0)right(PROFILE_SIZE)fwd(PROFILE_SIZE)zrot(90)box_edge(l=PROFILE_SIZE, orient=ORIENT_Z, align=V_TOP, flx=false, wx=true); + } + difference() { + union() { + fwd(PROFILE_SIZE/4-l/2-5)right(PROFILE_SIZE/2)box_edge(l=5+l/2+PROFILE_SIZE/2, jup=true, orient=ORIENT_Y, align=V_RIGHT, flx=zfl, wx=zw); + #right(PROFILE_SIZE/4-l/2-3)fwd(PROFILE_SIZE/2)box_edge(l=5+l/2+PROFILE_SIZE/2, jdown=true, orient=ORIENT_X, align=V_FRONT, flx=zfl, wx=zw); + up(PROFILE_SIZE/2)right(PROFILE_SIZE)fwd(PROFILE_SIZE)zrot(90)box_edge(l=5+l/2+PROFILE_SIZE/2, jup=true, orient=ORIENT_Z, align=V_TOP, flx=false, wx=true); + } + //up(0)fwd((0)xrot(45) boxjoiner_clear(orient=ORIENT_Z, align=V_RIGHT); + //up(PROFILE_SIZE/2+10/2-wt)right((PROFILE_SIZE)/2 + 10/2-wt) yrot(45) boxjoiner_clear(orient=ORIENT_Z_90); + //right(PROFILE_SIZE/2-wt/2) fwd(PROFILE_SIZE/2-wt/2) up((PROFILE_SIZE-10/2))zrot(45) yrot(90) boxjoiner_clear(orient=ORIENT_ZNEG); + } + //up((PROFILE_SIZE - wt)/2)fwd((PROFILE_SIZE - wt)/2)xrot(45) boxjoiner(orient=ORIENT_Z, align=V_RIGHT); + //up(wt/2+PROFILE_SIZE/2+10/2-wt)right((PROFILE_SIZE)/2 - wt + 10/2)yrot(45) boxjoiner(orient=ORIENT_Z_90); + //right(PROFILE_SIZE/2-wt/2) fwd(PROFILE_SIZE/2-wt/2) up((PROFILE_SIZE-10/2))zrot(45) yrot(90) boxjoiner(orient=ORIENT_Z); + } +} + +l=100; + + + +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=10, 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,inset+slop,jh], align=V_BACK); + joiner_clear(h=jh, w=jw); + } +} + +//box_all_corners(ex=30); +box_corner(); +//xrot(90)zrot(45)box_edge(l=25, jup=true, jdown=true); +//boxjoiner(inset=5); + +// Bottom Beam profiles: +//right(PROFILE_SIZE/2)box_edge(orient=ORIENT_Y, align=V_RIGHT, flx=true, wx=false); +//left(PROFILE_SIZE/2)box_edge(orient=ORIENT_YNEG, align=V_LEFT, flx=true, wx=false); +//fwd(PROFILE_SIZE/2)box_edge(orient=ORIENT_X, align=V_FRONT, flx=true, wx=false); +//back(PROFILE_SIZE/2)box_edge(orient=ORIENT_XNEG, align=V_BACK, flx=true, wx=false); +//box_corner(zfl=false, zw=true,align=V_UP+V_FRONT+V_LEFT, orient=ORIENT_ZNEG); + +//xrot(45) right(20) boxjoiner(orient=ORIENT_ZNEG); +//yrot(-45) back(20) boxjoiner(orient=ORIENT_ZNEG_90); +//zrot(45) down(20) yrot(90) #boxjoiner(orient=ORIENT_Z); diff --git a/pc4m10.scad b/pc4m10.scad new file mode 100644 index 0000000..ef05797 --- /dev/null +++ b/pc4m10.scad @@ -0,0 +1,54 @@ +/* */ + +include +include +include + +SEAT_DEPTH=3.50; +SEAT_DIAMETER=6.30; +SEAT_HOLE=3; + +/* [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; + +module pc4M10_inner(back_h=13, back_d = 12, orient=ORIENT_Z, align=V_CENTER) { + orient_and_align([back_d,back_d,5.82+back_h], orig_align=V_BOTTOM, orient=orient, align=align) { + difference() { + union() { + threaded_rod( + d=9.728, + l=5.81, + pitch=.907, + internal=true, + align=V_BOTTOM + ); + } + down(5.82)difference() { + cyl(d=SEAT_DIAMETER, h=SEAT_DEPTH, align=V_TOP); + cyl(d=SEAT_HOLE, h=SEAT_DEPTH+.01, align=V_TOP); + } + } + down(5.81)cyl(d1=back_d,d2=SEAT_HOLE,h=back_h+.02, align=V_BOTTOM); + } +} +module pc4M10(cd = 12, orient=ORIENT_Z, align=V_CENTER) { + difference() { + up(.01)cyl(d=cd,h=18.8, align=V_TOP); + pc4M10_inner(align=V_TOP); + } +} + +module pc4M10_clear(cd = 12, extra=15, orient=ORIENT_Z, align=V_CENTER) { + down(18.8)cyl(d=cd-.01, h=extra+18.8, align=V_TOP); +} + +//pc4M10_clear(align=V_BOTTOM); +//pc4M10(align=V_BOTTOM); +