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
This commit is contained in:
2025-07-08 10:27:58 -04:00
parent f2d2fdf404
commit 99bc9e5dda
2 changed files with 150 additions and 63 deletions

13
README
View File

@@ -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

196
box.scad
View File

@@ -10,9 +10,9 @@ include <fdmouse.scad>
/* [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)
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]);
translate([rl+fl,0]) square([fl, rh+fl]);
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();
}