Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
f67aa3d3b0
|
|||
| 41776c7f87 | |||
| f3eb7858a7 | |||
| 4357cb940d | |||
| d54c3fa1ce | |||
| 332f8c58fe | |||
| 444e25866d | |||
| ae6433cf38 | |||
| db656c08d3 | |||
| 5522231048 | |||
| a8eff8370c | |||
| 8482bcca1f | |||
| e28fac97d1 | |||
| 01194bd206 | |||
| 56dd7f504d | |||
| 52f53fe074 | |||
| 24e2bdd688 | |||
| 99bc9e5dda |
6
README
6
README
@@ -1,6 +0,0 @@
|
|||||||
|
|
||||||
Bottom Y + Feet 13hr 160g (29g support)
|
|
||||||
Top Corners 13hr 126g
|
|
||||||
Top Corners 13hr 126g
|
|
||||||
Back Bottom Edge (pcm) 12h 136 g
|
|
||||||
|
|
||||||
64
README.md
Normal file
64
README.md
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
Drybox-NG an Unoriginal Drybox Implemented in OpenSCAD
|
||||||
|
|
||||||
|
Openscad Code by sjc (Stephen Carpenter)
|
||||||
|
|
||||||
|
|
||||||
|
# Background
|
||||||
|
|
||||||
|
I really liked some of the Drybox options I found, especially the
|
||||||
|
[Unoriginal Prusa Drybox](https://www.printables.com/model/551828-unoriginal-prusa-drybox)
|
||||||
|
but I stock different sized heat set inserts and I don't use normal CAD.
|
||||||
|
So I set about to rebuild it in OpenSCAD; my way.
|
||||||
|
|
||||||
|
Version 1.0 fell off its mount.
|
||||||
|
V2.0 has feet that hook onto the mount, Magnets for hinged lid and
|
||||||
|
doors, and a buffer mount for the rear.
|
||||||
|
Version 3.0 goes together without glue so parts are replacable.
|
||||||
|
|
||||||
|
Silica cup mounts have inserts spaced to mount a 1x3 Gridfinity base.
|
||||||
|
Cup and base generated from gridfinity_extended. (see Other Sources)
|
||||||
|
|
||||||
|
# Building
|
||||||
|
|
||||||
|
Insert models use my
|
||||||
|
[Inserts Library](https://sancus.carpanet.net/sjc/inserts)
|
||||||
|
|
||||||
|
Box parts rely on [BOSL](https://github.com/revarbat/BOSL)
|
||||||
|
|
||||||
|
Modify parameters as you like, the default will give a pretty decent
|
||||||
|
aproximation of the original that it is based on which will mount on
|
||||||
|
similar stands. Change dimensions and you are on your own. Not all
|
||||||
|
parameters have been well tested. Good Luck.
|
||||||
|
|
||||||
|
Parts snap together solidly, shove a small piece of filament in the
|
||||||
|
tiny holes in between them.
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
- Cleanup
|
||||||
|
- Need lid magnet
|
||||||
|
|
||||||
|
Lid has features that block access to magnets. Also, handle too large.
|
||||||
|
Need to bridge gap!
|
||||||
|
|
||||||
|
## Done
|
||||||
|
- Hinge cut for door fit
|
||||||
|
- Removed inserts behind door
|
||||||
|
- Removed window/floor inserts from corners
|
||||||
|
- inset offset to edge
|
||||||
|
- Need Mount for Buffer
|
||||||
|
- Door Handle
|
||||||
|
- ALL THE MAGNETS!
|
||||||
|
|
||||||
|
|
||||||
|
V1:
|
||||||
|
Bottom Y + Feet 13hr 160g (29g support)
|
||||||
|
Top Corners 13hr 126g
|
||||||
|
Top Corners 13hr 126g
|
||||||
|
Back Bottom Edge (pcm) 12h 136 g
|
||||||
|
|
||||||
|
# Other Sources
|
||||||
|
|
||||||
|
Magnet.svg by [Solar Icons](https://www.figma.com/community/file/1166831539721848736?ref=svgrepo.com) in CC Attribution License
|
||||||
|
|
||||||
|
Silica Cup and Gridfinity base generated from
|
||||||
|
[gridfinity_extended](https://github.com/ostat/gridfinity_extended_openscad)
|
||||||
376
box.scad
376
box.scad
@@ -10,9 +10,9 @@ include <fdmouse.scad>
|
|||||||
|
|
||||||
/* [Part] */
|
/* [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_rear, corner_top_front_l, corner_top_front_r, corner_bottom, edge_back_bottom_a, edge_back_bottom_b, edge_back_bottom_c, edge_back_bottom_d, edge_front_bottom, edge_side_top, edge_side_front, edge_side_foot_left, edge_side_foot_right, edge_top_front, edge_top_back, edge_test, full_box, joiner_top, joiner_bottom, joiner_slop, profile, side_edge, rbfoot, hinge, new_joiner, rear_mount, grid_mount, handle ]
|
||||||
|
|
||||||
/* [Dimensions] */
|
/* [Profile Dimensions] */
|
||||||
|
|
||||||
PROFILE_SIZE = 34;
|
PROFILE_SIZE = 34;
|
||||||
|
|
||||||
@@ -27,8 +27,11 @@ WIN_THICK = 3;
|
|||||||
FLOOR_LIP = 10;
|
FLOOR_LIP = 10;
|
||||||
FLOOR_THICK = 5;
|
FLOOR_THICK = 5;
|
||||||
|
|
||||||
JOINER_H = 18;
|
//JOINER_H = 26;
|
||||||
|
//JOINER_W = 10;
|
||||||
|
JOINER_H = 14;
|
||||||
JOINER_W = 10;
|
JOINER_W = 10;
|
||||||
|
JOINER_SLOP = .1;
|
||||||
|
|
||||||
RB_MOUNT_INSET=17;
|
RB_MOUNT_INSET=17;
|
||||||
RB_MOUNT_WIDTH=9;
|
RB_MOUNT_WIDTH=9;
|
||||||
@@ -36,6 +39,9 @@ RB_MOUNT_LEN=136;
|
|||||||
RB_MOUNT_OUT_H=19;
|
RB_MOUNT_OUT_H=19;
|
||||||
RB_MOUNT_IN_H=6.15;
|
RB_MOUNT_IN_H=6.15;
|
||||||
|
|
||||||
|
/* [Print Options] */
|
||||||
|
Print_Ears = false;
|
||||||
|
|
||||||
/* [Render Options] */
|
/* [Render Options] */
|
||||||
render_fs=.4;
|
render_fs=.4;
|
||||||
render_fn=undef;
|
render_fn=undef;
|
||||||
@@ -56,7 +62,7 @@ $fa= ($preview) ? $fa : render_fa;
|
|||||||
***/
|
***/
|
||||||
|
|
||||||
//profile();
|
//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)
|
conv = (wx && wy && flx)
|
||||||
? 3
|
? 3
|
||||||
: ((wx && wy) || (wy && flx))
|
: ((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(
|
gon=concat(
|
||||||
[[0,ps-wl-wtr]], // Trim Start
|
[[0,ps-wl-wtr]], // Trim Start
|
||||||
// Y Window
|
// 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]],
|
: [[0,ps]],
|
||||||
[[2*wt,ps]], // End of Y.
|
[[2*wt,ps]], // End of Y.
|
||||||
// Inner Cut to X
|
// Inner Cut to X
|
||||||
@@ -81,12 +88,33 @@ module profile(ps=PROFILE_SIZE, wl=WIN_LIP, wt=WIN_THICK, wtr=WIN_TRIM, fl=FLOOR
|
|||||||
polygon(points = gon, convexity=conv);
|
polygon(points = gon, convexity=conv);
|
||||||
}
|
}
|
||||||
|
|
||||||
module rb_foot(fw=RB_MOUNT_WIDTH, rl=RB_MOUNT_LEN, rh=RB_MOUNT_OUT_H, fl=10) {
|
module rb_foot(fw=RB_MOUNT_WIDTH, rl=RB_MOUNT_LEN+5, rh=RB_MOUNT_OUT_H, li=false, fl=10) {
|
||||||
translate([-(fl+rl/2),0]) linear_extrude(height=fw-1)
|
difference() {
|
||||||
|
union() {
|
||||||
|
translate([-(fl+rl/2),0]) {
|
||||||
|
linear_extrude(height=fw-1) {
|
||||||
offset(r=1)offset(delta=-1)union() {
|
offset(r=1)offset(delta=-1)union() {
|
||||||
square([rl+2*fl, rh]);
|
square([rl+2*fl, rh]);
|
||||||
square([fl, rh+fl]);
|
square([fl+2, rh+fl+6]);
|
||||||
translate([rl+fl,0]) square([fl, rh+fl]);
|
translate([0,rh+fl-2,0]) square([15, 8]);
|
||||||
|
translate([rl+fl,0]) {
|
||||||
|
square([fl, rh+fl+6]);
|
||||||
|
polygon([[-3,0+rh], [0,0+rh], [0,3+rh] ]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//up(fl/2) xspread(l=fl+rl, n=2) cuboid([fl,rh+fl+6,2*fw], fillet=2, align=V_BACK);
|
||||||
|
//up(fl/2)left(rl/2)back(1.5+rh+fl+6-fl/2)cuboid([15,7,2*fw], fillet=2);
|
||||||
|
}
|
||||||
|
left(rl/2 - 3) down(.01)back(fw+rh-4.5) hull() {
|
||||||
|
cyl(r=4.5, h=fw, align=V_TOP);
|
||||||
|
right(20)cyl(r=4.5, h=fw, align=V_TOP);
|
||||||
|
}
|
||||||
|
if (li == true) {
|
||||||
|
up(4) right(fl+rl/2) back(rh + 6) xrot(180)yrot(90)m3s_clear(bl=12,bz=-12, sh=0, drop=true, $die=true);
|
||||||
|
}
|
||||||
|
up(fw/2-.5)xspread(l=2+rl+rh/2, n=2) #back(23)cuboid([3,20,3]);
|
||||||
}
|
}
|
||||||
back=5;
|
back=5;
|
||||||
bmax = back + (fw-1);
|
bmax = back + (fw-1);
|
||||||
@@ -94,29 +122,35 @@ module rb_foot(fw=RB_MOUNT_WIDTH, rl=RB_MOUNT_LEN, rh=RB_MOUNT_OUT_H, fl=10) {
|
|||||||
fwd(bmax)up(fw-1)
|
fwd(bmax)up(fw-1)
|
||||||
yrot(90)linear_extrude(height=rl, center=true) polygon([[0,bmax-fw+1],[0,bmax],[fw-1,bmax]]);
|
yrot(90)linear_extrude(height=rl, center=true) polygon([[0,bmax-fw+1],[0,bmax],[fw-1,bmax]]);
|
||||||
|
|
||||||
|
back(8)xrot(90)fwd(bmax)up(fw-1)
|
||||||
|
yrot(90)linear_extrude(height=rl, center=true) polygon([[0,bmax-fw+1],[0,bmax],[fw-1,bmax]]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module hinge_mount(bz=WIN_THICK, bl=10) {
|
module hinge_mount(bz=WIN_THICK, inv=false, bl=10) {
|
||||||
zspread(l=40) {
|
zspread(l=40) {
|
||||||
zrot(-90)xrot(90)right(5) {
|
zrot(-90)xrot(90)right(5) {
|
||||||
up(3+2) cyl(d1=7, d2=9,h=7, align=V_TOP);
|
up(3+2) cyl(d1=7, d2=9,h=7, align=V_TOP);
|
||||||
thread_insertM3(bl=bl,bz=-(bl-3), $die=true);
|
//thread_insertM3(bl=bl,bz=-(bl-3), $die=true);
|
||||||
|
m3s_clear(bl=bl,bz=-(bl-3), sh=inv ? .23 : 0, $die=true);
|
||||||
//%thread_insertM3(bl=10,bz=-7);
|
//%thread_insertM3(bl=10,bz=-7);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
zrot(-90)xrot(90)left(5) {
|
zrot(-90)xrot(90)left(5) {
|
||||||
up(3+2) cyl(d1=7, d2=9,h=7, align=V_TOP);
|
up(3+2) cyl(d1=7, d2=9,h=7, align=V_TOP);
|
||||||
thread_insertM3(bl=bl,bz=-(bl-3), $die=true);
|
//thread_insertM3(bl=bl,bz=-(bl-3), $die=true);
|
||||||
|
m3s_clear(bl=bl,bz=-(bl-3), sh=inv ? .23 : 0, $die=true);
|
||||||
//%thread_insertM3(bl=10,bz=-7);
|
//%thread_insertM3(bl=10,bz=-7);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module hinge(theta=90) {
|
module hinge(theta=90, mx=1.8, my=5, mz=20, show=true) {
|
||||||
x=7;
|
x=7;
|
||||||
py=20;
|
py=20;
|
||||||
d = .4 / sqrt(2);
|
d = .4 / sqrt(2);
|
||||||
difference() {
|
difference() {
|
||||||
left(x/2)cuboid([x,20+2*d,50], fillet=2, edges=EDGES_X_ALL);
|
left(x/2)cuboid([x,20+2*d,50], fillet=2, edges=EDGES_X_ALL);
|
||||||
|
zspread(n=2, l=(-1+py+mz/2)) back(5)left(x-.4-mx/2) cuboid([mx, my, mz+2]);
|
||||||
hinge_mount($die=true);
|
hinge_mount($die=true);
|
||||||
}
|
}
|
||||||
left(5+d)back(py/2 + 5+2*d)zrot(theta){
|
left(5+d)back(py/2 + 5+2*d)zrot(theta){
|
||||||
@@ -125,35 +159,74 @@ module hinge(theta=90) {
|
|||||||
right(5.3)fwd(9/4)cuboid([x,2*d+1+9/2,6], align=V_LEFT, chamfer=1, edges=EDGES_Y_RT+EDGE_BK_RT);
|
right(5.3)fwd(9/4)cuboid([x,2*d+1+9/2,6], align=V_LEFT, chamfer=1, edges=EDGES_Y_RT+EDGE_BK_RT);
|
||||||
}
|
}
|
||||||
cyl(r=2, h=42);
|
cyl(r=2, h=42);
|
||||||
zspread(n=3, l=25 ) difference() {
|
zspread(n=3, l=25 ) {difference() {
|
||||||
union() {
|
union() {
|
||||||
cyl(d=9, h=6, chamfer=.8);
|
cyl(d=9, h=6, chamfer=.8);
|
||||||
right(5+d)back(9/4)cuboid([x,2+9/2,6], align=V_LEFT, chamfer=1, edges=EDGES_Y_RT+EDGE_FR_RT);
|
right(5+d)back(9/4)cuboid([x,2+9/2,6], align=V_LEFT, chamfer=1, edges=EDGES_Y_RT+EDGE_FR_RT);
|
||||||
}
|
}
|
||||||
cyl(r=2.2, h=6.2);
|
cyl(r=2.2, h=6.2);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
difference() {
|
difference() {
|
||||||
left((x)/2-(5+d))back(15+5)cuboid([x,30+2*d,50], fillet=2, edges=EDGES_X_ALL);
|
left((x)/2-(5+d))back(15+5)cuboid([x,30+2*d,50], fillet=2, edges=EDGES_X_ALL);
|
||||||
right(5)back(20+6)zrot(180) {
|
right(5)back(20+6)zrot(180) {
|
||||||
hinge_mount(bl=9, $die=true);
|
hinge_mount(bl=9, $die=true);
|
||||||
%hinge_mount(bl=9,$die=false);
|
if (show) %hinge_mount(bl=9,$die=false);
|
||||||
}
|
}
|
||||||
|
zspread(n=2, l=(-1+py+mz/2)) back(10)right(.4-mx/2) cuboid([mx, my, mz+2]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
module rearMount(md=141.333, theta=90, show=true) {
|
||||||
inner_off = ps/2 + wt;
|
x=7;
|
||||||
joiner_off = inner_off - jb/sqrt(2);
|
py=30;
|
||||||
|
d = .4 / sqrt(2);
|
||||||
|
zspread(n=2, l=md) difference() {
|
||||||
|
left(x/2)cuboid([x,20+2*d,50], fillet=2, edges=EDGES_X_ALL+EDGES_Y_RT+EDGES_Z_RT);
|
||||||
|
left(x)xflip()hinge_mount($die=true);
|
||||||
|
}
|
||||||
|
left(5+d)back(13+py/2 + 5+2*d)zrot(theta) {
|
||||||
|
zrot(-theta)zspread(n=2, l=md+25+25/2 )
|
||||||
|
hull() {
|
||||||
|
right(5.3)fwd(5+py/2)cuboid([x,2*d+1+9/2+20,25/2], fillet=2, align=V_LEFT, edges=EDGES_Y_RT);
|
||||||
|
right(2*4.5+2*d) cyl(fillet=2, r=6, h=25/2);
|
||||||
|
right(4.75/2+2*d)cyl(fillet=2, r=4.75, h=25/2);
|
||||||
|
}
|
||||||
|
fwd(2*4.5+2*d) {
|
||||||
|
cyl(r=4.75, fillet=2, h=md+50);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module handle(d=15, l=110) {
|
||||||
|
w=1.2;
|
||||||
|
up((d+10)/2) {
|
||||||
|
cyl(d=d, h=l+1, orient=ORIENT_X);
|
||||||
|
xspread(n=2, l=l) difference() {
|
||||||
|
hull() {
|
||||||
|
cyl(d=d+10, h=8, orient=ORIENT_X, fillet=1);
|
||||||
|
down((d+10-6)/2)fwd(10)cyl(d=6, h=8, orient=ORIENT_X, fillet=1);
|
||||||
|
}
|
||||||
|
down((d+10)/2)xrot(180)m3s_clear(bl=12, bz=-12);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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, hs=false, tubepass=false, tn = 2, ix=true, iy=true, rbfoot=false, rbleft=false, cm=false, gm=false, my=false, align=V_CENTER) {
|
||||||
jzoff = l/2-jw/2;
|
jzoff = l/2-jw/2;
|
||||||
|
inner_off = ps/2 + wt;
|
||||||
|
jdiff = (ps-wt)/2 - jh;
|
||||||
|
joiner_off = inner_off - (jh+jdiff/2)/sqrt(2)/2;//- (ps-.14)/(2*sqrt(2)) + jw/2; //- (jw)/sqrt(2);
|
||||||
psoff = ps/2 - wl - wt;
|
psoff = ps/2 - wl - wt;
|
||||||
face_off = ((ps+psoff)/4);
|
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) {
|
orient_and_align([ps,ps,l], orient=orient, align=align, orig_orient=ORIENT_Z) left(ps/2) fwd(ps/2) {
|
||||||
difference() {
|
difference() {
|
||||||
linear_extrude(height=l, center=true)
|
linear_extrude(height=l, center=true)
|
||||||
profile(flx=flx, fly=true, wx=wx, wy=true);
|
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, 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 (tubepass) {
|
||||||
if (tn > 1) {
|
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);
|
zspread(l=l/2, n=tn) zrot(-45)back(face_off*sqrt(2)-.01)pc4M10_clear(orient=ORIENT_Y,align=V_BACK);
|
||||||
@@ -161,32 +234,58 @@ module box_edge(ps=PROFILE_SIZE, l=10, orient=ORIENT_Z, jh = JOINER_H,jw = JOINE
|
|||||||
zrot(-45)back(face_off*sqrt(2)-.01)pc4M10_clear(orient=ORIENT_Y,align=V_BACK);
|
zrot(-45)back(face_off*sqrt(2)-.01)pc4M10_clear(orient=ORIENT_Y,align=V_BACK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (hm) right(face_off)back(face_off)zrot(45) color("gold") hinge_mount();
|
if (hm) right(face_off)back(face_off)zrot(45) color("gold") hinge_mount(inv=true);
|
||||||
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 (my) up(ioff) back(ps-wl/2)right(wt)yrot(-90) {
|
||||||
|
back(5)down(2.4)cuboid([20.2,12,1.8], align=V_BOTTOM);
|
||||||
|
up(.01)cuboid([22,6,2.11], align=V_BOTTOM);
|
||||||
|
}
|
||||||
if (ix && flx )
|
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)
|
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){
|
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=true);
|
||||||
%thread_insertM3(bl=6, bz=-4, $die=false);
|
//%thread_insertM3(bl=6, bz=-4, $die=false);
|
||||||
|
}
|
||||||
|
if (gm) zspread(n=2, l=42) 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (hm) zrot(45) right(face_off*sqrt(2)) %hinge(theta=ht);
|
if (hm && hs) zrot(45) right(face_off*sqrt(2)) %hinge(theta=ht);
|
||||||
if (tubepass) {
|
if (tubepass) {
|
||||||
if (tn > 1) {
|
if (tn > 1) {
|
||||||
zspread(l=l/2, n=tn) right(0)zrot(-45)back(face_off*sqrt(2))pc4M10(orient=ORIENT_Y,align=V_BACK);
|
zspread(l=l/2, n=tn) right(0)zrot(-45)back(face_off*sqrt(2))pc4M10(orient=ORIENT_Y,align=V_BACK);
|
||||||
} else {
|
} else {
|
||||||
right(0)zrot(-45)back(face_off*sqrt(2))pc4M10(orient=ORIENT_Y,align=V_BACK);
|
right(0)zrot(-45)back(face_off*sqrt(2)) {
|
||||||
|
pc4M10(orient=ORIENT_Y,align=V_BACK);
|
||||||
|
difference() {
|
||||||
|
cyl(h=2.28, r=1.7, orient=ORIENT_Y, align=V_BACK);
|
||||||
|
cyl(h=2.28, r=1.4, orient=ORIENT_Y, align=V_BACK);
|
||||||
|
}
|
||||||
|
difference() {
|
||||||
|
cyl(h=2.28, r=3.3, orient=ORIENT_Y, align=V_BACK);
|
||||||
|
cyl(h=2.28, r=3, orient=ORIENT_Y, align=V_BACK);
|
||||||
|
}
|
||||||
|
cyl(r=3.4, h=.2, 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);
|
difference() {
|
||||||
if (rbfoot) right(ps/2+psoff-2)zrot(180)yrot(90)rb_foot();
|
union() {
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
back(wl+6)right(ps-wl/2-.01)cuboid([wl,wl,l+10]);
|
||||||
|
}
|
||||||
|
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;
|
psoff = ps/2 - wl - wt;
|
||||||
coff = ps + psoff;
|
coff = ps + psoff;
|
||||||
sz = 3*ps/2 + psoff;
|
sz = 3*ps/2 + psoff;
|
||||||
@@ -197,17 +296,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);
|
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);
|
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);
|
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, orient=ORIENT_X, jdown=true, align=V_BACK+V_LEFT, flx=zfl, wx=zw);
|
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=ORIENT_Z_90, align=V_TOP, jup=true, flx=false, wx=true);
|
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() {
|
difference() {
|
||||||
union() {
|
union() {
|
||||||
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(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)
|
if (fl)
|
||||||
left(jh/2)down(3)yrot(45)cuboid([jw,2*jh,4]);
|
left(jh/2)down(3)yrot(45)cuboid([jw,2*jh,4]);
|
||||||
@@ -217,10 +316,10 @@ module beam_joiner(jw=JOINER_W, jh=JOINER_H, fl=false) {
|
|||||||
|
|
||||||
module box_all_corners(ex=0) {
|
module box_all_corners(ex=0) {
|
||||||
// top
|
// 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) fwd(ex) left(ex) box_corner(cl=true, 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) 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) 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);
|
up(ex) fwd(ex) right(ex) box_corner(cr=true, zfl=false, zw=true, align=V_UP+V_FRONT+V_RIGHT, orient=ORIENT_ZNEG_270);
|
||||||
// bottom
|
// bottom
|
||||||
down(ex) fwd(ex) right(ex) box_corner(align=V_DOWN+V_FRONT+V_RIGHT, orient=ORIENT_Z);
|
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) right(ex) box_corner(align=V_DOWN+V_BACK+V_RIGHT, orient=ORIENT_Z_90);
|
||||||
@@ -228,29 +327,59 @@ 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);
|
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)
|
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)
|
color(cl)
|
||||||
orient_and_align([jw,inset,jh],orient=orient, align=align) fwd() {
|
orient_and_align([jw,inset,jh],orient=orient, align=align) fwd() {
|
||||||
cuboid([jw+slop,inset+slop,jh], align=V_BACK);
|
cuboid([jw,inset,jh], align=V_BACK);
|
||||||
joiner_clear(h=jh, w=jw+slop);
|
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 : 2);
|
||||||
|
right(spread/2) half_joiner2(h=jh, w=jw, l=l, screwsize=$preview ? undef : 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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(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(spread/2) half_joiner_clear(h=jh, w=jw);
|
||||||
|
right(spread/2) half_joiner_clear(h=jh, w=jw);
|
||||||
|
cyl(d=2, h=50, orient=ORIENT_X);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
wt=WIN_TRIM;
|
wt=WIN_TRIM;
|
||||||
wl=WIN_LIP;
|
wl=WIN_LIP;
|
||||||
ps = PROFILE_SIZE;
|
ps = PROFILE_SIZE;
|
||||||
psoff = ps/2 - wl - wt;
|
psoff = ps/2 - wl - wt;
|
||||||
coff = ps + psoff;
|
coff = ps + psoff;
|
||||||
|
eoff=2 + coff;
|
||||||
sz = 3*ps/2;
|
sz = 3*ps/2;
|
||||||
lx = BOX_X - 2* sz - 2*psoff;
|
lx = BOX_X - 2* sz - 2*psoff;
|
||||||
ly = BOX_Y - sz;
|
ly = BOX_Y - sz;
|
||||||
lz = BOX_Z - sz;
|
lz = BOX_Z - sz;
|
||||||
|
ioff = 4*lx/50;
|
||||||
|
// edge ears
|
||||||
|
ear_sy = 2*(coff/2-2*psoff);
|
||||||
|
ear_sx = lx/5;
|
||||||
|
|
||||||
echo(str("Edge Len X: ", lx, " (3 x ", lx/3, ")"));
|
echo(str("Edge Len X: ", lx, " (3 x ", lx/3, ")"));
|
||||||
echo(str("Edge Len Y: ", ly, " (1 x ", ly, ")"));
|
echo(str("Edge Len Y: ", ly, " (1 x ", ly, ")"));
|
||||||
@@ -263,84 +392,138 @@ if (PART == "profile") {
|
|||||||
}
|
}
|
||||||
if (PART == "all_corners")
|
if (PART == "all_corners")
|
||||||
box_all_corners(ex=30);
|
box_all_corners(ex=30);
|
||||||
if (PART == "corner_top") box_corner(zw=true, zfl=false);
|
if (PART == "corner_top_rear") box_corner(zw=true, zfl=false, top=true);
|
||||||
|
if (PART == "corner_top_front_l") box_corner(cl=true, zw=true, zfl=false, top=true);
|
||||||
|
if (PART == "corner_top_front_r") box_corner(cr=true, zw=true, zfl=false, top=true);
|
||||||
if (PART == "corner_bottom") box_corner(zw=false, zfl=true);
|
if (PART == "corner_bottom") box_corner(zw=false, zfl=true);
|
||||||
if (PART == "edge_front_bottom") {
|
if (PART == "edge_front_bottom") {
|
||||||
|
if (Print_Ears) {
|
||||||
left(coff/2-2*psoff) back(lx/3/2)zrot(315)ear(thick=.2, dis=-2);
|
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);
|
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);
|
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);
|
right(coff/2-2*psoff) fwd(lx/3/2)zrot(135)ear(thick=.2, dis=-2);
|
||||||
|
}
|
||||||
|
difference() {
|
||||||
up((wt+wl)/sqrt(2))xrot(90) zrot(45)
|
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);
|
box_edge(l=lx/3, jup=true, jdown=true, flx=true, wx=false, my=true, iy=false, tubepass=false, orient=ORIENT_Z);
|
||||||
|
yspread(n=5, l=22) up(2+.6) {
|
||||||
|
cuboid([20+1.2,5.2,2], chamfer=.6, edges=EDGES_Y_BOT , align=V_BOTTOM);
|
||||||
|
up(.6+.8)right(20)cuboid([50,5.2,2], chamfer=.6, edges=EDGES_Y_BOT, align=V_BOTTOM);
|
||||||
}
|
}
|
||||||
if (PART == "edge_back_bottom") {
|
linear_extrude(height=.6) scale(.1) import("magnet.svg", center=true);
|
||||||
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_side_foot") {
|
color("orange")linear_extrude(height=.6) scale(.1) import("magnet.svg", center=true);
|
||||||
box_edge(l=ly, rbfoot=true, flx=true, wx=false, jup=true, jdown=true, cm=true, orient=ORIENT_Y);
|
}
|
||||||
|
if (PART == "edge_back_bottom_a") {
|
||||||
|
if (Print_Ears) {
|
||||||
|
xspread(n=2, l=ear_sx) yspread(n=2, l=ear_sy) ear(thick=.2, dis=-2);
|
||||||
|
}
|
||||||
|
up((wt+wl)/sqrt(2))
|
||||||
|
xrot(45) {
|
||||||
|
box_edge(l=lx/5, jup=true, jdown=true, ioff=ioff, flx=true, wx=false, tubepass=true, tn=1, orient=ORIENT_X);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (PART == "edge_back_bottom_b") {
|
||||||
|
if (Print_Ears) {
|
||||||
|
xspread(n=2, l=ear_sx) yspread(n=2, l=ear_sy) ear(thick=.2, dis=-2);
|
||||||
|
}
|
||||||
|
up((wt+wl)/sqrt(2)) xrot(45) box_edge(l=lx/5, jup=true, jdown=true, ix=false, iy=false, flx=true, wx=false, tubepass=true, tn=1, orient=ORIENT_X);
|
||||||
|
}
|
||||||
|
if (PART == "edge_back_bottom_c") {
|
||||||
|
if (Print_Ears) {
|
||||||
|
xspread(n=2, l=ear_sx) yspread(n=2, l=ear_sy) ear(thick=.2, dis=-2);
|
||||||
|
}
|
||||||
|
up((wt+wl)/sqrt(2)) xrot(45) box_edge(l=lx/5, jup=true, jdown=true, ix=true, iy=true, flx=true, wx=false, tubepass=true, tn=1, orient=ORIENT_X);
|
||||||
|
}
|
||||||
|
if (PART == "edge_back_bottom_d") {
|
||||||
|
if (Print_Ears) {
|
||||||
|
xspread(n=2, l=ear_sx) yspread(n=2, l=ear_sy) ear(thick=.2, dis=-2);
|
||||||
|
}
|
||||||
|
up((wt+wl)/sqrt(2)) xrot(45) box_edge(l=lx/5, jup=true, jdown=true, ix=true, iy=true, ioff=-ioff, flx=true, wx=false, tubepass=true, tn=1, orient=ORIENT_X);
|
||||||
|
}
|
||||||
|
if (PART == "edge_side_foot_left") {
|
||||||
|
box_edge(l=ly, rbfoot=true, rbleft=true, flx=true, wx=false, jup=true, jdown=true, gm=true, orient=ORIENT_Y);
|
||||||
|
}
|
||||||
|
if (PART == "edge_side_foot_right") {
|
||||||
|
box_edge(l=ly, rbfoot=true, flx=true, wx=false, jup=true, jdown=true, gm=true, orient=ORIENT_Y);
|
||||||
}
|
}
|
||||||
if (PART == "edge_side_top") {
|
if (PART == "edge_side_top") {
|
||||||
|
if (Print_Ears) {
|
||||||
left(coff/2-2*psoff) back(ly/2)zrot(315)ear(thick=.2, dis=-2);
|
left(coff/2-2*psoff) back(ly/2)zrot(315)ear(thick=.2, dis=-2);
|
||||||
right(coff/2-2*psoff) back(ly/2)zrot(225)ear(thick=.2, dis=-2);
|
right(coff/2-2*psoff) back(ly/2)zrot(225)ear(thick=.2, dis=-2);
|
||||||
left(coff/2-2*psoff) fwd(ly/2)zrot(45)ear(thick=.2, dis=-2);
|
left(coff/2-2*psoff) fwd(ly/2)zrot(45)ear(thick=.2, dis=-2);
|
||||||
right(coff/2-2*psoff) fwd(ly/2)zrot(135)ear(thick=.2, dis=-2);
|
right(coff/2-2*psoff) fwd(ly/2)zrot(135)ear(thick=.2, dis=-2);
|
||||||
up((wt+wl)/sqrt(2))yrot(45)box_edge(l=ly, rbfoot=false, flx=false, wx=true, jup=true, jdown=true, cm=true, orient=ORIENT_Y);
|
}
|
||||||
|
up((wt+wl)/sqrt(2))yrot(45)box_edge(l=ly, rbfoot=false, flx=false, wx=true, jup=true, jdown=true, cm=false, orient=ORIENT_Y);
|
||||||
|
}
|
||||||
|
if (PART == "edge_side_front") {
|
||||||
|
if (Print_Ears) {
|
||||||
|
left(coff/2-2*psoff) back(ly/2)zrot(315)ear(thick=.2, dis=-2);
|
||||||
|
right(coff/2-2*psoff) back(ly/2)zrot(225)ear(thick=.2, dis=-2);
|
||||||
|
left(coff/2-2*psoff) fwd(ly/2)zrot(45)ear(thick=.2, dis=-2);
|
||||||
|
right(coff/2-2*psoff) fwd(ly/2)zrot(135)ear(thick=.2, dis=-2);
|
||||||
|
}
|
||||||
|
up((wt+wl)/sqrt(2))yrot(45)box_edge(l=ly, rbfoot=false, flx=false, wx=true, iy=false, my=true, jup=true, jdown=true, cm=false, orient=ORIENT_Y);
|
||||||
}
|
}
|
||||||
if (PART == "edge_top_front") {
|
if (PART == "edge_top_front") {
|
||||||
//r = $t *90 - 45;
|
//r = $t *90 - 45;
|
||||||
r=-45;
|
r=-45;
|
||||||
|
if (Print_Ears) {
|
||||||
left(coff/2-2*psoff) back(lx/3/2)zrot(315)ear(thick=.2, dis=-2);
|
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);
|
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);
|
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);
|
right(coff/2-2*psoff) fwd(lx/3/2)zrot(135)ear(thick=.2, dis=-2);
|
||||||
up((wt+wl)/sqrt(2)) yrot(45+90)zrot(90)box_edge(l=lx/3, rbfoot=false, hm=true, ht=r, flx=false, iy=false, wx=true, jup=true, jdown=true, cm=true, orient=ORIENT_XNEG_180);
|
}
|
||||||
|
up((wt+wl)/sqrt(2)) yrot(45+90)zrot(90)box_edge(l=lx/3, rbfoot=false, hm=true, hc=true, ht=r, hs=true, flx=false, iy=false, wx=true, jup=true, jdown=true, cm=false, orient=ORIENT_XNEG_180);
|
||||||
face_off = ((ps+psoff)/4);
|
face_off = ((ps+psoff)/4);
|
||||||
//xrot(45)yrot(-90)right(face_off+7/2)zrot(180)hinge();
|
//xrot(45)yrot(-90)right(face_off+7/2)zrot(180)hinge();
|
||||||
}
|
}
|
||||||
if (PART == "edge_top_back") {
|
if (PART == "edge_top_back") {
|
||||||
|
if (Print_Ears) {
|
||||||
left(coff/2-2*psoff) back(lx/3/2)zrot(315)ear(thick=.2, dis=-2);
|
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);
|
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);
|
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);
|
right(coff/2-2*psoff) fwd(lx/3/2)zrot(135)ear(thick=.2, dis=-2);
|
||||||
up((wt+wl)/sqrt(2)) yrot(45+90)zrot(90)box_edge(l=lx/3, rbfoot=false, hm=false, flx=false, iy=true, wx=true, jup=true, jdown=true, cm=true, orient=ORIENT_XNEG_180);
|
}
|
||||||
|
up((wt+wl)/sqrt(2)) yrot(45+90)zrot(90)box_edge(l=lx/3, rbfoot=false, hm=true, flx=false, iy=true, wx=true, jup=true, jdown=true, cm=false, orient=ORIENT_XNEG_180);
|
||||||
}
|
}
|
||||||
if (PART == "full_box") {
|
if (PART == "full_box") {
|
||||||
up(lz/2+ps) {
|
up(lz/2+ps) {
|
||||||
// Top Corners:
|
// 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);
|
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) 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
|
up(lz/2+eoff) { // 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);
|
fwd(eoff + ly/2) xspread(n=3, lx/3) box_edge(l=lx/3, hm=true, hc=true, hs=true, jup=true, jdown=true, iy=false, flx=true, wx=false, orient=ORIENT_XNEG_180);
|
||||||
back(coff + ly/2) {
|
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);
|
xspread(n=3, lx/3)box_edge(l=lx/3, jup=true, jdown=true, hm=true, hc=false, 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);
|
right(eoff + 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);
|
left(eoff + lx/2) zrot(180)box_edge(l=ly, jup=true, jdown=true, flx=true, wx=false, orient=ORIENT_YNEG_180);
|
||||||
}
|
}
|
||||||
{ // vertical
|
{ // 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);
|
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);
|
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);
|
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);
|
box_edge(l=lz,jup=true, jdown=true, orient=ORIENT_Z_270);
|
||||||
}
|
}
|
||||||
down(lz/2+coff) {
|
down(lz/2+eoff) {
|
||||||
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);
|
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(coff + ly/2) zrot(180) { // rear
|
back(eoff + 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);
|
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);
|
right(eoff + lx/2) box_edge(l=ly, jup=true, jdown=true, flx=true, wx=false, rbfoot=true, rbleft=false, 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);
|
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) {
|
down(lz/2+ps) {
|
||||||
// Bottom Corners:
|
// Bottom Corners:
|
||||||
@@ -350,7 +533,7 @@ if (PART == "full_box") {
|
|||||||
left(ps+lx/2) fwd(ps+ly/2)box_corner(orient=ORIENT_Z_270);
|
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_top") beam_joiner(fl=false);
|
||||||
if (PART == "joiner_bottom") {
|
if (PART == "joiner_bottom") {
|
||||||
@@ -361,12 +544,47 @@ if (PART == "joiner_bottom") {
|
|||||||
up(5) beam_joiner(fl=true);
|
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 == "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=18, tubepass=false, jup=true, jdown=true, tn=1, flx=false, wx = true, ix = false , my=false, iy = false, orient=ORIENT_Y);
|
||||||
|
|
||||||
if (PART == "hinge") {
|
if (PART == "hinge") {
|
||||||
r = $t *90;
|
r = $t *90;
|
||||||
hinge(theta=r);
|
// r = 135; // max
|
||||||
|
yrot(90)hinge(theta=r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (PART == "rear_mount") {
|
||||||
|
up(7) yrot(-90) rearMount();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PART == "handle") {
|
||||||
|
handle();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PART == "new_joiner") {
|
||||||
|
new_joiner();
|
||||||
|
//#new_joiner_clear();
|
||||||
|
//boxjoiner();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PART == "grid_mount") {
|
||||||
|
difference() {
|
||||||
|
union() {
|
||||||
|
fwd(19.799/2-1)cuboid([48,3+19.799,4], fillet=1, align=V_TOP);
|
||||||
|
up(1)fwd(3.4+19.799)xrot(-45) cuboid([10+84,6,25], fillet=1, align=V_TOP+V_BACK);
|
||||||
|
}
|
||||||
|
|
||||||
|
cuboid([200,200,10], align=V_BOTTOM);
|
||||||
|
xspread(n=2, l=42) cyl(d=3.3, h=50);
|
||||||
|
xrot(45)back(5)up(17.2)xspread(n=2, l=84)m3s_clear(bl=10,bz=-9, sh=0, drop=false, $die=true);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
9
magnet.svg
Normal file
9
magnet.svg
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||||
|
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M13.6943 3H11C6.02943 3 2 7.02944 2 12C2 16.9706 6.02944 21 11 21H13.6943V16.5H10.9444C8.45916 16.5 6.44444 14.4853 6.44444 12C6.44444 9.51472 8.45916 7.5 10.9444 7.5H13.6943V3Z" fill="#1C274C"/>
|
||||||
|
<path d="M15.1943 7.5H16.5C17.3284 7.5 18 6.82843 18 6V4.5C18 3.67157 17.3284 3 16.5 3H15.1943V7.5Z" fill="#1C274C"/>
|
||||||
|
<path d="M15.1943 16.5V21H16.5C17.3284 21 18 20.3284 18 19.5V18C18 17.1716 17.3284 16.5 16.5 16.5H15.1943Z" fill="#1C274C"/>
|
||||||
|
<path d="M20.1556 8.63577C19.9545 8.27368 19.4979 8.14322 19.1358 8.34438C18.7768 8.54383 18.6455 8.99441 18.8393 9.35499L18.8443 9.36522C18.8512 9.37962 18.8643 9.40834 18.8818 9.45198C18.9167 9.53919 18.9691 9.6865 19.0235 9.89878C19.1322 10.3228 19.25 11.0101 19.25 12C19.25 12.9899 19.1322 13.6772 19.0235 14.1012C18.9691 14.3135 18.9167 14.4608 18.8818 14.548C18.8643 14.5917 18.8512 14.6204 18.8443 14.6348L18.8393 14.645C18.6455 15.0056 18.7768 15.4562 19.1358 15.6556C19.4979 15.8568 19.9545 15.7263 20.1556 15.3642L19.5 15C20.1556 15.3642 20.1556 15.3642 20.1556 15.3642L20.1563 15.3629L20.1571 15.3615L20.1588 15.3585L20.1626 15.3514L20.1723 15.333C20.1795 15.3189 20.1884 15.3012 20.1986 15.2797C20.2191 15.2367 20.2451 15.1787 20.2745 15.1051C20.3333 14.9579 20.4059 14.749 20.4765 14.4738C20.6178 13.9228 20.75 13.1101 20.75 12C20.75 10.8899 20.6178 10.0772 20.4765 9.52622C20.4059 9.251 20.3333 9.04206 20.2745 8.89489C20.2451 8.82135 20.2191 8.76335 20.1986 8.72032C20.1884 8.69881 20.1795 8.68106 20.1723 8.66699L20.1626 8.64864L20.1588 8.64152L20.1571 8.63847L20.1563 8.63708C20.1563 8.63708 20.1556 8.63577 19.5 9L20.1556 8.63577Z" fill="#1C274C"/>
|
||||||
|
<path d="M23.5031 14.846C23.3541 15.6504 23.1541 16.3136 22.95 16.8443C22.7463 17.3741 22.5394 17.7692 22.3775 18.0391C22.2966 18.1739 22.227 18.2773 22.1748 18.3504C22.1487 18.387 22.1269 18.416 22.1102 18.4376C22.1019 18.4484 22.0948 18.4573 22.0891 18.4644L22.0816 18.4737L22.0786 18.4773L22.0773 18.4788L22.0762 18.4802C21.811 18.7984 21.3381 18.8414 21.0199 18.5762C20.7032 18.3123 20.6591 17.8427 20.92 17.5245L20.9235 17.52C20.9288 17.5132 20.9393 17.4994 20.9542 17.4785C20.984 17.4368 21.0316 17.3668 21.0913 17.2673C21.2106 17.0683 21.3788 16.751 21.55 16.3058C21.7115 15.8859 21.8767 15.3499 22.006 14.6894C22.1332 14.0394 22.2258 13.2688 22.2459 12.3696C22.2486 12.2487 22.25 12.1255 22.25 12C22.25 11.4979 22.2276 11.0333 22.1887 10.6049C22.0719 9.31976 21.8063 8.36076 21.55 7.69429C21.3788 7.24907 21.2106 6.93174 21.0913 6.7328C21.0316 6.63328 20.984 6.56324 20.9542 6.52153C20.9393 6.50068 20.9288 6.4869 20.9235 6.48006L20.92 6.47558C20.6591 6.15743 20.7032 5.68775 21.0199 5.42385C21.3381 5.15868 21.811 5.20167 22.0762 5.51988L22.0773 5.52126L22.0786 5.5228L22.0816 5.52641L22.0891 5.53568C22.0948 5.54278 22.1019 5.55171 22.1102 5.5625C22.1269 5.58408 22.1487 5.61307 22.1748 5.64964C22.227 5.72277 22.2966 5.82617 22.3775 5.96102C22.5394 6.23084 22.7463 6.626 22.95 7.15578C23.2513 7.93896 23.5435 9.01067 23.676 10.3992C23.7231 10.8924 23.75 11.4256 23.75 12C23.75 12 23.75 12 23.75 12" fill="#1C274C"/>
|
||||||
|
<path d="M23.75 12C23.75 13.0958 23.6521 14.0415 23.5031 14.846L23.75 12Z" fill="#1C274C"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.3 KiB |
Reference in New Issue
Block a user