From 99bc9e5dda4bd59c4c80010442767983bd0303f0 Mon Sep 17 00:00:00 2001 From: Stephen J Carpenter Date: Tue, 8 Jul 2025 10:27:58 -0400 Subject: [PATCH] Major Update Foot: Added lock to prevent falls Door: Removed Inserts from behind Added Cutout behind hinge Rear: Removed 6th tube Edges: Added ability to offset window inserts Added hinge cutout Reworked joiners to not need seperate part --- README | 13 ++++ box.scad | 200 +++++++++++++++++++++++++++++++++++++------------------ 2 files changed, 150 insertions(+), 63 deletions(-) diff --git a/README b/README index 12c5c62..7a28864 100644 --- a/README +++ b/README @@ -1,4 +1,17 @@ +Drybox-NG an Unoriginal Drybox Implemented in OpenSCAD +WIP: +- Need Mount for Buffer + +Done: +- Hinge cut for door fit +- Removed inserts behind door +- Removed window/floor inserts from corners +- inset offset to edge + + + +V1: Bottom Y + Feet 13hr 160g (29g support) Top Corners 13hr 126g Top Corners 13hr 126g diff --git a/box.scad b/box.scad index 173b75e..fddec9a 100644 --- a/box.scad +++ b/box.scad @@ -10,9 +10,9 @@ include /* [Part] */ -PART = ""; // [ all_corners, corner_top, corner_bottom, edge_back_bottom, edge_front_bottom, edge_side_top, edge_side_foot, edge_top_front, edge_top_back, edge_test, full_box, joiner_top, joiner_bottom, profile, side_edge, rbfoot, hinge ] +PART = ""; // [ all_corners, corner_top, corner_bottom, edge_back_bottom_a, edge_back_bottom_b, edge_front_bottom, edge_side_top, edge_side_foot, edge_top_front, edge_top_back, edge_test, full_box, joiner_top, joiner_bottom, joiner_slop, profile, side_edge, rbfoot, hinge, new_joiner ] -/* [Dimensions] */ +/* [Profile Dimensions] */ PROFILE_SIZE = 34; @@ -27,8 +27,11 @@ WIN_THICK = 3; FLOOR_LIP = 10; FLOOR_THICK = 5; -JOINER_H = 18; -JOINER_W = 10; +//JOINER_H = 26; +//JOINER_W = 10; +JOINER_H = 10; +JOINER_W = 8; +JOINER_SLOP = .2; RB_MOUNT_INSET=17; RB_MOUNT_WIDTH=9; @@ -36,6 +39,9 @@ RB_MOUNT_LEN=136; RB_MOUNT_OUT_H=19; RB_MOUNT_IN_H=6.15; +/* [Print Options] */ +Print_Ears = false; + /* [Render Options] */ render_fs=.4; render_fn=undef; @@ -56,7 +62,7 @@ $fa= ($preview) ? $fa : render_fa; ***/ //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) { +module profile(ps=PROFILE_SIZE, wl=WIN_LIP, wt=WIN_THICK, wtr=WIN_TRIM, fl=FLOOR_LIP, ft=FLOOR_THICK, hc=false, flx=false, fly=false, wx=true, wy=true) { conv = (wx && wy && flx) ? 3 : ((wx && wy) || (wy && flx)) @@ -67,7 +73,8 @@ module profile(ps=PROFILE_SIZE, wl=WIN_LIP, wt=WIN_THICK, wtr=WIN_TRIM, fl=FLOOR gon=concat( [[0,ps-wl-wtr]], // Trim Start // Y Window - wy ? [[0,ps-wl],[wt,ps-wl],[wt,ps]] + wy ? hc ? [[0,ps-wl-wt],[wt,ps-wl],[wt,ps]] + : [[0,ps-wl],[wt,ps-wl],[wt,ps]] : [[0,ps]], [[2*wt,ps]], // End of Y. // Inner Cut to X @@ -81,12 +88,18 @@ module profile(ps=PROFILE_SIZE, wl=WIN_LIP, wt=WIN_THICK, wtr=WIN_TRIM, fl=FLOOR polygon(points = gon, convexity=conv); } -module rb_foot(fw=RB_MOUNT_WIDTH, rl=RB_MOUNT_LEN, rh=RB_MOUNT_OUT_H, fl=10) { - translate([-(fl+rl/2),0]) linear_extrude(height=fw-1) - offset(r=1)offset(delta=-1)union() { - square([rl+2*fl, rh]); - square([fl, rh+fl]); - translate([rl+fl,0]) square([fl, rh+fl]); +module rb_foot(fw=RB_MOUNT_WIDTH, rl=RB_MOUNT_LEN+5, rh=RB_MOUNT_OUT_H, fl=10) { + difference() { + translate([-(fl+rl/2),0]) + linear_extrude(height=fw-1) { + offset(r=1)offset(delta=-1)union() { + square([rl+2*fl, rh]); + square([fl, rh+fl+6]); + translate([0,rh+fl-2,0]) square([15, 8]); + translate([rl+fl,0]) square([fl, rh+fl+6]); + } + } + up(4) right(fl-3.5+rl/2) back(rh + 6) yrot(90)thread_insertM3(bl=10,bz=-10, $die=true); } back=5; bmax = back + (fw-1); @@ -142,18 +155,21 @@ module hinge(theta=90) { } } -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, ft=FLOOR_THICK, wl=WIN_LIP, wx=true, wt=WIN_THICK, wtr = WIN_TRIM, hm=false, ht=0, tubepass=false, tn = 2, ix=true, iy=true, rbfoot=false, cm=false, align=V_CENTER) { - inner_off = ps/2 + wt; - joiner_off = inner_off - jb/sqrt(2); +module box_edge(ps=PROFILE_SIZE, l=10, orient=ORIENT_Z, jh = JOINER_H,jw = JOINER_W, slop=JOINER_SLOP, jb=5, jup = false, jdown=false, flx=false, ft=FLOOR_THICK, wl=WIN_LIP, ioff=0, wx=true, wt=WIN_THICK, wtr = WIN_TRIM, hm=false, hc=false, ht=0, tubepass=false, tn = 2, ix=true, iy=true, rbfoot=false, rbleft=false, cm=false, align=V_CENTER) { jzoff = l/2-jw/2; + inner_off = ps/2 + wt; + jdiff = (ps-wt)/2 - jh; + joiner_off = inner_off - 1 - (jh+jdiff/2)/sqrt(2)/2;//- (ps-.14)/(2*sqrt(2)) + jw/2; //- (jw)/sqrt(2); psoff = ps/2 - wl - wt; face_off = ((ps+psoff)/4); 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, cl="green"); - if (jdown) down(jzoff)back(joiner_off)right(joiner_off)zrot(45)boxjoiner_clear(orient=ORIENT_Y_90, align=V_CENTER, cl="brown"); + profile(flx=flx, hc=hc, 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, cl="green"); + //if (jdown) down(jzoff)back(joiner_off)right(joiner_off)zrot(45)boxjoiner_clear(orient=ORIENT_Y_90, align=V_CENTER, cl="brown"); + if (jup) up(l/2)back(joiner_off)right(joiner_off)zrot(-45)new_joiner_clear(orient=ORIENT_Y_180, align=V_CENTER, cl="green"); + if (jdown) down(l/2)back(joiner_off)right(joiner_off)zrot(-45)yrot(180)new_joiner_clear(orient=ORIENT_Y, align=V_CENTER, cl="brown"); if (tubepass) { if (tn > 1) { zspread(l=l/2, n=tn) zrot(-45)back(face_off*sqrt(2)-.01)pc4M10_clear(orient=ORIENT_Y,align=V_BACK); @@ -162,11 +178,11 @@ module box_edge(ps=PROFILE_SIZE, l=10, orient=ORIENT_Z, jh = JOINER_H,jw = JOINE } } if (hm) right(face_off)back(face_off)zrot(45) color("gold") hinge_mount(); - if (iy) back(ps-wl/2)right(wt)yrot(-90) thread_insertM3(bl=5+wt, bz=-wt-2, $die=true); + if (iy) up(ioff) back(ps-wl/2)right(wt)yrot(-90) thread_insertM3(bl=5+wt, bz=-5, $die=true); if (ix && flx ) - right(ps-wl/2)back(ps/2-ft-1)xrot(-90) thread_insertM3(bl=ft+3, bz=-ft, $die=true); + up(ioff) right(ps-wl/2)back(ps/2-ft-1)xrot(-90) thread_insertM3(bl=ft+6, bz=-6, $die=true); if (ix && wx) - right(ps-wl/2)back(wt)xrot(90) thread_insertM3(bl=5+wt, bz=-wt-2, $die=true); + up(ioff) right(ps-wl/2)back(wt)xrot(90) thread_insertM3(bl=5+wt, bz=-5, $die=true); if (cm) zspread(n=2, l=20) right(inner_off)back(inner_off)zrot(-45)xrot(-90){ thread_insertM3(bl=6, bz=-4, $die=true); %thread_insertM3(bl=6, bz=-4, $die=false); @@ -180,13 +196,18 @@ module box_edge(ps=PROFILE_SIZE, l=10, orient=ORIENT_Z, jh = JOINER_H,jw = JOINE right(0)zrot(-45)back(face_off*sqrt(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); - if (rbfoot) right(ps/2+psoff-2)zrot(180)yrot(90)rb_foot(); + //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); + //if (jup) up(l/2)back(joiner_off)right(joiner_off)zrot(-45)new_joiner(slop=slop, orient=ORIENT_Y, align=V_CENTER); + //if (jdown) down(l/2)back(joiner_off)right(joiner_off)zrot(-45)yrot(180)new_joiner(slop=slop, orient=ORIENT_Y, align=V_CENTER); + if (jup) up(l/2)back(joiner_off)right(joiner_off)zrot(-45)new_joiner(slop=slop, orient=ORIENT_Y, align=V_CENTER); + if (jdown) down(l/2)back(joiner_off)right(joiner_off)zrot(-45)yrot(180)new_joiner(slop=slop, orient=ORIENT_Y, align=V_CENTER); + if (rbfoot) right(ps/2+psoff-2)zrot(180) { + if (rbleft) { yrot(90) rb_foot(); } else { yrot(-90) zflip() rb_foot(); } + } } } - -module box_corner(ps = PROFILE_SIZE, l=0, zfl = true, zw = false, wl=WIN_LIP, wt=WIN_THICK, align=V_CENTER, orient=ORIENT_Z) { +module box_corner(ps = PROFILE_SIZE, l=0, zfl = true, zw = false, iz=false, top=false, cl=false, cr=false, wl=WIN_LIP, wt=WIN_THICK, align=V_CENTER, orient=ORIENT_Z) { psoff = ps/2 - wl - wt; coff = ps + psoff; sz = 3*ps/2 + psoff; @@ -197,17 +218,17 @@ module box_corner(ps = PROFILE_SIZE, l=0, zfl = true, zw = false, wl=WIN_LIP, w right(ps)fwd(psoff)down(psoff)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(psoff)right(psoff)box_edge(l=PROFILE_SIZE, orient=ORIENT_Z_90, align=V_TOP, flx=false, wx=true); } - fwd(1)right(psoff)down(psoff)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(psoff)down(psoff)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(psoff)right(psoff)box_edge(l=ps+1, orient=ORIENT_Z_90, align=V_TOP, jup=true, flx=false, wx=true); + fwd(1)right(psoff)down(psoff)right(ps/2)box_edge(l=ps+1, hc=cr ? true : false, orient=ORIENT_Y, jup=true, align=V_BACK+V_LEFT, flx=zfl, wx=zw, ix=false, iy=false); + right(1)fwd(psoff)down(psoff)fwd(ps/2)box_edge(l=ps+1, hc=cl ? true : false, orient=ORIENT_X, jdown=true, align=V_BACK+V_LEFT, flx=zfl, wx=zw, ix=false, iy=false); + down(1)fwd(psoff)right(psoff)box_edge(l=ps+1, orient=top ? ORIENT_ZNEG : ORIENT_Z_90, align=V_TOP, jup=true, jdown=true, flx=false, wx=true, ix=false, iy=false); } } -module beam_joiner(jw=JOINER_W, jh=JOINER_H, fl=false) { +module beam_joiner(jw=JOINER_W, jh=JOINER_H, fl=false, slop=JOINER_SLOP) { difference() { union() { - boxjoiner(jh=jh, jw=jw,l=5,align=V_FRONT, orient=ORIENT_X); - zrot(180)boxjoiner(jh=jh, jw=jw,l=5,align=V_FRONT, orient=ORIENT_X); + boxjoiner(slop=slop, jh=jh, jw=jw,l=5,align=V_FRONT, orient=ORIENT_X); + zrot(180)boxjoiner(slop=slop, jh=jh, jw=jw,l=5,align=V_FRONT, orient=ORIENT_X); } if (fl) left(jh/2)down(3)yrot(45)cuboid([jw,2*jh,4]); @@ -228,25 +249,50 @@ module box_all_corners(ex=0) { 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) { +module boxjoiner(slop=JOINER_SLOP, align=V_FRONT, jh=JOINER_H, jw=JOINER_W, l=4, 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); + joiner(slop=slop, h=jh, w=jw, l=l, screwsize=$preview ? undef : undef); } -module boxjoiner_clear(inset=5, slop=.01, jh=JOINER_H, jw=JOINER_W, align=V_FRONT, orient=ORIENT_Z, cl=undef) { +module boxjoiner_clear(inset=0, slop=JOINER_SLOP, jh=JOINER_H, jw=JOINER_W, align=V_FRONT, orient=ORIENT_Z, cl=undef) { color(cl) 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); + cuboid([jw,inset,jh], align=V_BACK); + joiner_clear(h=jh, w=jw); } } +module new_joiner(spacing=0, slop=JOINER_SLOP, align=V_FRONT, jh=JOINER_H, jw=JOINER_W, l=4, orient=ORIENT_Z, cl=undef) { + spread = jw + spacing; + color(cl) + orient_and_align([2*jw+spacing,0,jh], orig_align=V_FRONT, align=align, orient=orient) { + left(spread/2) half_joiner(slop=slop, h=jh, w=jw, l=l, screwsize=$preview ? undef : undef); + right(spread/2) half_joiner2(h=jh, w=jw, l=l, screwsize=$preview ? undef : undef); + } +} +module new_joiner2(spacing=0, slop=JOINER_SLOP, align=V_FRONT, jh=JOINER_H, jw=JOINER_W, l=4, orient=ORIENT_Z, cl=undef) { + spread = jw + spacing; + color(cl) + orient_and_align([2*jw+spacing,0,jh], orig_align=V_FRONT, align=align, orient=orient) { + left(0*spread/2) half_joiner2(slop=slop, h=jh, w=jw, l=l, screwsize=$preview ? undef : undef); + //right(spread/2) half_joiner2(h=jh, w=jw, l=l, screwsize=$preview ? undef : undef); + } +} +module new_joiner_clear(spacing=0, slop=JOINER_SLOP, align=V_FRONT, jh=JOINER_H, jw=JOINER_W, l=4, orient=ORIENT_Z, cl=undef) { + spread= jw+spacing; + color(cl) + orient_and_align([2*jw+spacing,0,jh], orig_align=V_FRONT, align=align, orient=orient) { + left(0*spread/2) half_joiner_clear(h=jh, w=jw); + //right(spread/2) half_joiner_clear(h=jh, w=jw); + } +} wt=WIN_TRIM; wl=WIN_LIP; ps = PROFILE_SIZE; psoff = ps/2 - wl - wt; coff = ps + psoff; +eoff=2 + coff; sz = 3*ps/2; lx = BOX_X - 2* sz - 2*psoff; ly = BOX_Y - sz; @@ -263,7 +309,7 @@ if (PART == "profile") { } if (PART == "all_corners") box_all_corners(ex=30); -if (PART == "corner_top") box_corner(zw=true, zfl=false); +if (PART == "corner_top") box_corner(zw=true, zfl=false, top=true); if (PART == "corner_bottom") box_corner(zw=false, zfl=true); if (PART == "edge_front_bottom") { left(coff/2-2*psoff) back(lx/3/2)zrot(315)ear(thick=.2, dis=-2); @@ -273,12 +319,23 @@ if (PART == "edge_front_bottom") { up((wt+wl)/sqrt(2))xrot(90) zrot(45) box_edge(l=lx/3, jup=true, jdown=true, flx=true, wx=false, tubepass=false, orient=ORIENT_Z); } -if (PART == "edge_back_bottom") { - left(coff/2-2*psoff) back(lx/3/2)zrot(315)ear(thick=.2, dis=-2); - right(coff/2-2*psoff) back(lx/3/2)zrot(225)ear(thick=.2, dis=-2); - left(coff/2-2*psoff) fwd(lx/3/2)zrot(45)ear(thick=.2, dis=-2); - right(coff/2-2*psoff) fwd(lx/3/2)zrot(135)ear(thick=.2, dis=-2); - up((wt+wl)/sqrt(2))xrot(90) zrot(45) box_edge(l=lx/3, jup=true, jdown=true, flx=true, wx=false, tubepass=true, orient=ORIENT_Z); +if (PART == "edge_back_bottom_a") { + if (Print_Ears) { + left(coff/2-2*psoff) back(lx/5/2)zrot(315)ear(thick=.2, dis=-2); + right(coff/2-2*psoff) back(lx/5/2)zrot(225)ear(thick=.2, dis=-2); + left(coff/2-2*psoff) fwd(lx/5/2)zrot(45)ear(thick=.2, dis=-2); + right(coff/2-2*psoff) fwd(lx/5/2)zrot(135)ear(thick=.2, dis=-2); + } + up((wt+wl)/sqrt(2))xrot(90) zrot(45) box_edge(l=lx/5, jup=true, jdown=true, flx=true, wx=false, tubepass=true, tn=1, orient=ORIENT_Z); +} +if (PART == "edge_back_bottom_b") { + if (Print_Ears) { + left(coff/2-2*psoff) back(lx/5/2)zrot(315)ear(thick=.2, dis=-2); + right(coff/2-2*psoff) back(lx/5/2)zrot(225)ear(thick=.2, dis=-2); + left(coff/2-2*psoff) fwd(lx/5/2)zrot(45)ear(thick=.2, dis=-2); + right(coff/2-2*psoff) fwd(lx/5/2)zrot(135)ear(thick=.2, dis=-2); + } + up((wt+wl)/sqrt(2))xrot(90) zrot(45) box_edge(l=lx/5, jup=true, jdown=true, ix=false, iy=false, flx=true, wx=false, tubepass=true, tn=1, orient=ORIENT_Z); } if (PART == "edge_side_foot") { box_edge(l=ly, rbfoot=true, flx=true, wx=false, jup=true, jdown=true, cm=true, orient=ORIENT_Y); @@ -311,36 +368,41 @@ if (PART == "edge_top_back") { if (PART == "full_box") { up(lz/2+ps) { // Top Corners: - right(ps+lx/2) fwd(ps+ly/2) box_corner(orient=ORIENT_ZNEG_270, zfl=false); + right(ps+lx/2) fwd(ps+ly/2) box_corner(orient=ORIENT_ZNEG_270, zfl=false, cr=true); 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); + left(ps+lx/2) fwd(ps+ly/2) box_corner(orient=ORIENT_ZNEG, cl=true); } - up(lz/2+coff) { // Top Edges - fwd(coff + ly/2) xspread(n=3, lx/3) box_edge(l=lx/3, hm=true, jup=true, jdown=true, iy=false, flx=true, wx=false, orient=ORIENT_XNEG_180); - back(coff + ly/2) { + up(lz/2+eoff) { // Top Edges + fwd(eoff + ly/2) xspread(n=3, lx/3) box_edge(l=lx/3, hm=true, hc=true, jup=true, jdown=true, iy=false, flx=true, wx=false, orient=ORIENT_XNEG_180); + back(eoff + 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); + right(eoff + lx/2) box_edge(l=ly, jup=true, jdown=true, flx=true, wx=false, orient=ORIENT_YNEG_180); + left(eoff + 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) + left(eoff+lx/2)fwd(eoff+ly/2) box_edge(l=lz,jup=true, ix=false, jdown=true); - right(coff+lx/2)fwd(coff+ly/2) + right(eoff+lx/2)fwd(eoff+ly/2) box_edge(l=lz,jup=true, iy=false, jdown=true, orient=ORIENT_Z_90); - right(coff+lx/2)back(coff+ly/2) + right(eoff+lx/2)back(eoff+ly/2) box_edge(l=lz,jup=true, jdown=true, orient=ORIENT_Z_180); - left(coff+lx/2)back(coff+ly/2) + left(eoff+lx/2)back(eoff+ly/2) box_edge(l=lz,jup=true, jdown=true, orient=ORIENT_Z_270); } - down(lz/2+coff) { - fwd(coff + ly/2) xspread(n=3, lx/3) box_edge(l=lx/3, iy=false, 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); + down(lz/2+eoff) { + fwd(eoff + ly/2) xspread(n=3, lx/3) box_edge(l=lx/3, iy=false, jup=true, jdown=true, flx=true, wx=false, orient=ORIENT_X); + back(eoff + ly/2) zrot(180) { // rear + ioff = 4*lx/50; + box_edge(l=lx/5, jup=true, jdown=true, flx=true, wx=false, tubepass=true, tn=1, orient=ORIENT_X); + xspread(n=2, 2*lx/5)box_edge(l=lx/5, jup=true, jdown=true, flx=true, wx=false, tubepass=true, tn=1, ix=false, iy=false, orient=ORIENT_X); + left(4*lx/10)box_edge(l=lx/5, jup=true, jdown=true, flx=true, wx=false, tubepass=true, tn=1, ioff=ioff, orient=ORIENT_X); + right(4*lx/10)box_edge(l=lx/5, jup=true, jdown=true, flx=true, wx=false, tubepass=true, tn=1, ioff=-ioff, orient=ORIENT_X); } - right(coff + lx/2) box_edge(l=ly, jup=true, jdown=true, flx=true, wx=false, rbfoot=true, orient=ORIENT_Y); - left(coff + lx/2) zrot(180)box_edge(l=ly, jup=true, jdown=true, flx=true, wx=false, rbfoot=true, orient=ORIENT_Y); + right(eoff + lx/2) box_edge(l=ly, jup=true, jdown=true, flx=true, wx=false, rbfoot=true, rbleft=false, orient=ORIENT_Y); + left(eoff + lx/2) zrot(180)box_edge(l=ly, jup=true, jdown=true, flx=true, wx=false, rbfoot=true, rbleft=true, orient=ORIENT_Y); } down(lz/2+ps) { // Bottom Corners: @@ -350,7 +412,7 @@ if (PART == "full_box") { left(ps+lx/2) fwd(ps+ly/2)box_corner(orient=ORIENT_Z_270); } - xspread(n=6, l=70*6) %cyl(d=200, l=70, orient=ORIENT_X); + down(10)xspread(n=5, l=70*5) %cyl(d=200, l=70, orient=ORIENT_X); } if (PART == "joiner_top") beam_joiner(fl=false); if (PART == "joiner_bottom") { @@ -361,12 +423,24 @@ if (PART == "joiner_bottom") { up(5) beam_joiner(fl=true); } +if (PART == "joiner_slop") { + %beam_joiner(fl=false, slop=.2); + beam_joiner(fl=false, slop=.3); +} if (PART == "rbfoot") rb_foot(); -if (PART == "edge_test") box_edge(l=35, tubepass=true, jup=true, jdown=true, tn=1, flx=true, wx = false, orient=ORIENT_Y); +if (PART == "edge_test") + yrot(45) + //box_edge(l=35, tubepass=true, jup=true, jdown=true, tn=1, flx=true, wx = false, orient=ORIENT_Y); + box_edge(l=10, tubepass=false, jup=true, jdown=true, tn=1, flx=true, wx = true, ix = false ,iy = false, orient=ORIENT_Y); if (PART == "hinge") { r = $t *90; hinge(theta=r); } +if (PART == "new_joiner") { + new_joiner(); + //#new_joiner_clear(); + //boxjoiner(); +}