Initial commit with models to date.
This commit is contained in:
28
scad/autonomous-desk/headphone_cord_clip.scad
Normal file
28
scad/autonomous-desk/headphone_cord_clip.scad
Normal file
@ -0,0 +1,28 @@
|
||||
include <../lib/cable_sleeve.scad>;
|
||||
include <table_edge_clip.scad>;
|
||||
|
||||
epsilon = 0.01;
|
||||
sleeveLen = 20;
|
||||
wall = 4;
|
||||
clipLen = 8;
|
||||
|
||||
translate([0, 0, clipLen/2]) rotate([90, 0, 0])
|
||||
union() {
|
||||
translate([6, 2, sleeveLen/-2])
|
||||
rotate([0, 0, 127])
|
||||
cableSleeve(cableDiameter = 3, length = sleeveLen);
|
||||
|
||||
translate([wall - epsilon, -clipLen/2, sleeveLen/-2])
|
||||
cube([0.75*wall + epsilon, wall, sleeveLen]);
|
||||
|
||||
translate([1.32*wall, -clipLen/2 + 1.02, sleeveLen/-2])
|
||||
rotate([0, 0, -31.1])
|
||||
cube([wall/2, wall + 0.1, sleeveLen]);
|
||||
|
||||
tableEdgeClip(
|
||||
length = clipLen,
|
||||
depth = 24,
|
||||
thickness = wall,
|
||||
tableDepth = 21.58,
|
||||
clampAngle = 4);
|
||||
}
|
16
scad/autonomous-desk/table_edge_clip.scad
Normal file
16
scad/autonomous-desk/table_edge_clip.scad
Normal file
@ -0,0 +1,16 @@
|
||||
|
||||
module tableEdgeClip(length = 4, depth = 20, thickness = 4, tableDepth = 21.58, clampAngle = 3) {
|
||||
translate([0, length/-2, tableDepth/-2 - thickness])
|
||||
cube([thickness, length, tableDepth + 2*thickness]);
|
||||
|
||||
translate([0.01, length/-2, tableDepth/-2 - thickness])
|
||||
mirror([1, 0, 0])
|
||||
rotate([0, -clampAngle, 0])
|
||||
cube([depth + 0.01, length, thickness]);
|
||||
|
||||
mirror([0, 0, 1])
|
||||
translate([0.01, length/-2, tableDepth/-2 - thickness])
|
||||
mirror([1, 0, 0])
|
||||
rotate([0, -clampAngle, 0])
|
||||
cube([depth + 0.01, length, thickness]);
|
||||
}
|
3
scad/autonomous-desk/test.scad
Normal file
3
scad/autonomous-desk/test.scad
Normal file
@ -0,0 +1,3 @@
|
||||
include <table_edge_clip.scad>;
|
||||
|
||||
tableEdgeClip(length = 8, depth = 40);
|
608
scad/autonomous-desk/under_monitor_organizer.scad
Normal file
608
scad/autonomous-desk/under_monitor_organizer.scad
Normal file
@ -0,0 +1,608 @@
|
||||
// Enable/Disable parts of the composite model
|
||||
showBoundBox = false;
|
||||
showBluRay = false;
|
||||
showBluRayLid = false;
|
||||
showHddDrawer = false;
|
||||
showCubby = false;
|
||||
showRightDrawer = true;
|
||||
showLetterShelf = false;
|
||||
showShell1 = false;
|
||||
showShell2Top = false;
|
||||
showShell2Bot = false;
|
||||
|
||||
epsilon = 0.01;
|
||||
|
||||
maxAvailWidth = 303.43; // width will be on X
|
||||
maxAvailDepth = 225.63; // depth will be on Y
|
||||
maxAvailHeigth = 104; // height will be on Z
|
||||
wall = 2;
|
||||
outerWall = 3;
|
||||
slideGap = 1;
|
||||
lapDepth = 20;
|
||||
|
||||
fullWidth = 300;
|
||||
fullDepth = 225;
|
||||
fullHeight = 96;
|
||||
|
||||
// full-size base and walls
|
||||
if (showBoundBox) {
|
||||
translate([0, 0, -(wall + outerWall)])
|
||||
color("DimGray")
|
||||
cube([fullWidth, fullDepth, outerWall]);
|
||||
|
||||
translate([0, fullDepth + (wall + outerWall), 0])
|
||||
color("DimGray")
|
||||
cube([fullWidth, outerWall, fullHeight]);
|
||||
|
||||
translate([-(wall + outerWall), 0, 0])
|
||||
color("DimGray")
|
||||
cube([outerWall, fullDepth, fullHeight]);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
// Blu-Ray Drive holder
|
||||
// ===========================================================================
|
||||
bluRayWidth = 140;
|
||||
bluRayDepth = 151;
|
||||
bluRayHeight = 20;
|
||||
bluRaySidedoor = 5;
|
||||
bluRayBackWindow = bluRayWidth - 100;
|
||||
|
||||
// test fit pieces
|
||||
/*
|
||||
|
||||
// Lap joint
|
||||
translate([0, 30, 0])
|
||||
difference() {
|
||||
color("SeaGreen") union() {
|
||||
cube([20, 20, wall]);
|
||||
cube([wall, 20, 20]);
|
||||
}
|
||||
|
||||
translate([wall-epsilon, -epsilon, -epsilon])
|
||||
cube([20 + 2*epsilon - wall, lapDepth/2 + 2*epsilon, wall/2 + 2*epsilon]);
|
||||
|
||||
translate([wall/2 + epsilon, -epsilon, -epsilon])
|
||||
cube([wall/2 + 2*epsilon, lapDepth/2 + 2*epsilon, 20 + 2*epsilon]);
|
||||
}
|
||||
|
||||
difference() {
|
||||
color("SandyBrown") union() {
|
||||
cube([20, 20, wall]);
|
||||
cube([wall, 20, 20]);
|
||||
}
|
||||
|
||||
translate([0, 10, 0]) union() {
|
||||
translate([-epsilon, -epsilon, wall/2])
|
||||
cube([20 + 2*epsilon, lapDepth/2 + 2*epsilon, wall/2 + 2*epsilon]);
|
||||
|
||||
translate([-epsilon, -epsilon, -epsilon])
|
||||
cube([wall/2 + 2*epsilon, lapDepth/2 + 2*epsilon, 20 + 2*epsilon]);
|
||||
}
|
||||
}
|
||||
|
||||
// Bluray width
|
||||
color("Pink") union() {
|
||||
cube([ bluRayWidth + 2*wall, 4*wall, wall]);
|
||||
cube([wall, 4*wall, 4*wall]);
|
||||
translate([bluRayWidth + wall, 0, 0, ]) cube([wall, 4*wall, 4*wall]);
|
||||
}
|
||||
|
||||
// Bluray depth
|
||||
color("Salmon") translate([0, 5*wall, 0]) union() {
|
||||
cube([ bluRayDepth + 2*wall, 4*wall, wall]);
|
||||
cube([wall, 4*wall, 4*wall]);
|
||||
translate([bluRayDepth + wall, 0, 0, ]) cube([wall, 4*wall, 4*wall]);
|
||||
}
|
||||
|
||||
// Bluray height
|
||||
color("MistyRose") translate([0, 10*wall, 0]) union() {
|
||||
cube([ bluRayHeight + 2*wall, 4*wall, wall]);
|
||||
cube([wall, 4*wall, 4*wall]);
|
||||
translate([bluRayHeight + wall, 0, 0, ]) cube([wall, 4*wall, 4*wall]);
|
||||
}
|
||||
*/
|
||||
|
||||
translate([fullWidth - (outerWall + 4*wall + bluRayWidth + slideGap), wall, 0])
|
||||
union() {
|
||||
// Blu-Ray box
|
||||
if (showBluRay) {
|
||||
color("DodgerBlue")
|
||||
difference() {
|
||||
union() {
|
||||
cube([ // floor
|
||||
bluRayWidth + 2*wall,
|
||||
bluRayDepth + 2*wall,
|
||||
outerWall]);
|
||||
|
||||
translate([0, bluRayDepth + wall, 0])
|
||||
cube([ // +y wall
|
||||
bluRayWidth + 2*wall,
|
||||
wall,
|
||||
bluRayHeight + outerWall]);
|
||||
|
||||
cube([ // -x wall
|
||||
wall,
|
||||
bluRayDepth + 2*wall,
|
||||
bluRayHeight + outerWall]);
|
||||
|
||||
translate([bluRayWidth + wall, 0, 0])
|
||||
cube([ // +x wall
|
||||
wall,
|
||||
bluRayDepth + 2*wall,
|
||||
bluRayHeight + outerWall]);
|
||||
|
||||
cube([ // -y front sidedoor 1
|
||||
bluRaySidedoor + wall,
|
||||
wall,
|
||||
bluRayHeight + outerWall]);
|
||||
|
||||
translate([bluRayWidth + wall - bluRaySidedoor, 0, 0])
|
||||
cube([ // -y sidedoor 2
|
||||
bluRaySidedoor + wall,
|
||||
wall,
|
||||
bluRayHeight + outerWall]);
|
||||
|
||||
translate([bluRayWidth - 3, wall - 0.5, 0])
|
||||
rotate([0, 0, -15])
|
||||
cube([0.4, 20, bluRayHeight + outerWall]);
|
||||
|
||||
translate([6.6, wall - 0.5, 0])
|
||||
rotate([0, 0, 15])
|
||||
cube([0.4, 20, bluRayHeight + outerWall]);
|
||||
}
|
||||
|
||||
translate([80, bluRayDepth + wall - epsilon, outerWall])
|
||||
cube([ // +y window cutout
|
||||
bluRayBackWindow,
|
||||
wall + 2*epsilon,
|
||||
bluRayHeight + epsilon]);
|
||||
}
|
||||
}
|
||||
|
||||
// Blu-Ray lid
|
||||
if (showBluRayLid) {
|
||||
color("CornflowerBlue")
|
||||
translate([-wall, -wall, bluRayHeight + outerWall])
|
||||
// translate([0, -20, 0]) // for printing
|
||||
// rotate([180, 0, 0])
|
||||
union() {
|
||||
cube([ // ceiling
|
||||
bluRayWidth + 4*wall,
|
||||
bluRayDepth + 4*wall,
|
||||
wall]);
|
||||
|
||||
translate([0, 0, -wall])
|
||||
cube([ // -x lip
|
||||
wall - 0.2,
|
||||
bluRayDepth + 4*wall,
|
||||
2*wall]);
|
||||
|
||||
translate([bluRayWidth + 3*wall + 0.2, 0, -wall])
|
||||
cube([ // +x lip
|
||||
wall - 0.2,
|
||||
bluRayDepth + 4*wall,
|
||||
2*wall]);
|
||||
|
||||
translate([0, 0, -wall])
|
||||
cube([ // -y lip
|
||||
bluRayWidth + 4*wall,
|
||||
wall - 0.2,
|
||||
2*wall]);
|
||||
|
||||
translate([0, bluRayDepth + 3*wall + 0.2, -wall])
|
||||
cube([ // +y lip
|
||||
bluRayWidth + 4*wall,
|
||||
wall - 0.2,
|
||||
2*wall]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
// HDD Drawer + Cubby
|
||||
// ===========================================================================
|
||||
hddMinDepth = 110;
|
||||
hddMinHeight = 80;
|
||||
hddDepth = 134;
|
||||
hddHeight = 84;
|
||||
hddLargeWidth = 22;
|
||||
hddSmallWidth = 12;
|
||||
|
||||
ccDepth = 88;
|
||||
ccWidth = 56;
|
||||
fingerWidth = 24;
|
||||
|
||||
module hddSlot(width) {
|
||||
cube([ // floor
|
||||
width + 2*wall,
|
||||
hddDepth + wall,
|
||||
wall]);
|
||||
|
||||
translate([width + wall, hddDepth*0.25, 0])
|
||||
cube([ // +x wall
|
||||
wall,
|
||||
hddDepth*0.75 + wall,
|
||||
hddHeight/2 + wall]);
|
||||
|
||||
translate([0, hddDepth*0.25, 0])
|
||||
cube([ // -x wall
|
||||
wall,
|
||||
hddDepth*0.75 + wall,
|
||||
hddHeight/2 + wall]);
|
||||
|
||||
translate([0, hddDepth, 0])
|
||||
cube([ // +y wall
|
||||
width + 2*wall,
|
||||
wall,
|
||||
hddHeight/2 + wall]);
|
||||
}
|
||||
|
||||
cubbyFullWidth = 2*(hddLargeWidth + wall) + 6*(hddSmallWidth + wall) + wall;
|
||||
translate([outerWall + slideGap, 0, outerWall + slideGap])
|
||||
union() {
|
||||
|
||||
// HDD Slots
|
||||
if (showHddDrawer) {
|
||||
translate([0, fullDepth - (hddDepth + wall + outerWall + slideGap),0])
|
||||
difference() {
|
||||
color("IndianRed")
|
||||
union() {
|
||||
for (i = [0:5]) {
|
||||
translate([(hddSmallWidth + wall)*i, 0, 0])
|
||||
hddSlot(hddSmallWidth);
|
||||
}
|
||||
|
||||
for (i = [0:1]) {
|
||||
translate([(hddLargeWidth + wall)*i + 6*(hddSmallWidth + wall), 0, 0])
|
||||
hddSlot(hddLargeWidth);
|
||||
}
|
||||
|
||||
// +y wall
|
||||
translate([0, hddDepth, 0])
|
||||
cube([cubbyFullWidth, wall, hddHeight]);
|
||||
|
||||
// -x wall
|
||||
cube([wall, hddDepth, hddHeight]);
|
||||
|
||||
// +x wall
|
||||
translate([cubbyFullWidth - wall, 0, ])
|
||||
cube([wall, hddDepth, hddHeight]);
|
||||
|
||||
// floor toungue for assembly
|
||||
translate([0, (wall-lapDepth)/2, 0])
|
||||
cube([ cubbyFullWidth, lapDepth, wall/2 ]);
|
||||
|
||||
// -x wall toungue
|
||||
translate([wall/2, -lapDepth/2 + wall/2, 0])
|
||||
cube([wall/2, lapDepth, hddHeight]);
|
||||
|
||||
// +x wall toungue
|
||||
translate([cubbyFullWidth - wall, -lapDepth/2 + wall/2, 0])
|
||||
cube([wall/2, lapDepth, hddHeight]);
|
||||
}
|
||||
|
||||
// floor toungue cut-out
|
||||
translate([-epsilon, (wall-lapDepth)/2 - epsilon, wall/2 - epsilon])
|
||||
cube([cubbyFullWidth + 2*epsilon, lapDepth + 2*epsilon, wall/2 + 2*epsilon]);
|
||||
|
||||
// -x wall toungue cutout
|
||||
translate([-epsilon, -lapDepth/2 - epsilon + wall/2, -epsilon])
|
||||
cube([wall/2 + 2*epsilon, lapDepth + 2*epsilon, hddHeight + 2*epsilon]);
|
||||
|
||||
// +x wall toungue cutout
|
||||
translate([cubbyFullWidth - (wall/2 + epsilon), -lapDepth/2 - epsilon + wall/2, -epsilon])
|
||||
cube([wall/2 + 2*epsilon, lapDepth + 2*epsilon, hddHeight + 2*epsilon]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Cubby drawer
|
||||
if (showCubby) {
|
||||
color("FireBrick")
|
||||
difference() {
|
||||
union() {
|
||||
cube([ // base
|
||||
cubbyFullWidth,
|
||||
fullDepth - (hddDepth + outerWall + wall + slideGap),
|
||||
wall]);
|
||||
|
||||
cube([ // -x wall
|
||||
wall,
|
||||
fullDepth - (hddDepth + outerWall + wall + slideGap),
|
||||
hddHeight]);
|
||||
|
||||
translate([cubbyFullWidth - wall, 0, 0])
|
||||
cube([ // +x wall
|
||||
wall,
|
||||
fullDepth - (hddDepth + outerWall + wall + slideGap),
|
||||
hddHeight]);
|
||||
|
||||
cube([ // -y wall
|
||||
cubbyFullWidth,
|
||||
wall,
|
||||
hddHeight]);
|
||||
|
||||
translate([
|
||||
(cubbyFullWidth - ccDepth - 2*wall)/2,
|
||||
(fullDepth - (hddDepth + outerWall + 3*wall + slideGap + ccWidth)),
|
||||
0])
|
||||
difference() {
|
||||
// cc well walls
|
||||
union() {
|
||||
cube([ // -y wall
|
||||
ccDepth + 2*wall,
|
||||
wall,
|
||||
hddHeight/2]);
|
||||
|
||||
translate([0, ccWidth + wall, 0])
|
||||
cube([ // +y wall
|
||||
ccDepth + 2*wall,
|
||||
wall,
|
||||
hddHeight/2]);
|
||||
|
||||
cube([ // -x wall
|
||||
wall,
|
||||
ccWidth + 2*wall,
|
||||
hddHeight/2]);
|
||||
|
||||
translate([ccDepth + wall, 0, 0])
|
||||
cube([ // +x wall
|
||||
wall,
|
||||
ccWidth + 2*wall,
|
||||
hddHeight/2]);
|
||||
}
|
||||
|
||||
// finger cut-out for picking up credit cards
|
||||
union() {
|
||||
translate([ccDepth/2 + wall, ccWidth + 2*wall + epsilon, fingerWidth/2 + wall])
|
||||
rotate([90, 0, 0])
|
||||
cylinder(h=ccWidth + 2*wall + 2*epsilon, r=fingerWidth/2);
|
||||
|
||||
translate([ccDepth/2 - fingerWidth/2 + wall, -epsilon, fingerWidth/2 + epsilon])
|
||||
cube([
|
||||
fingerWidth,
|
||||
ccWidth + 2*wall + 2*epsilon,
|
||||
hddHeight/2 - fingerWidth/2]);
|
||||
}
|
||||
}
|
||||
|
||||
// floor toungue for assembly
|
||||
translate([0, fullDepth - (hddDepth + outerWall + wall + lapDepth/2), wall/2])
|
||||
cube([cubbyFullWidth, lapDepth, wall/2 ]);
|
||||
|
||||
// -w wall toungue
|
||||
translate([0, fullDepth - (hddDepth + outerWall + wall + lapDepth/2), 0])
|
||||
cube([wall/2, lapDepth, hddHeight]);
|
||||
|
||||
// +w wall toungue
|
||||
translate([cubbyFullWidth - wall/2, fullDepth - (hddDepth + outerWall + wall + lapDepth/2), 0])
|
||||
cube([wall/2, lapDepth, hddHeight]);
|
||||
}
|
||||
|
||||
// floor toungue cutaway for assembly
|
||||
translate([wall-epsilon, fullDepth - (hddDepth + outerWall + wall + lapDepth/2 - epsilon), -epsilon])
|
||||
cube([cubbyFullWidth + 2*epsilon - 2*wall, lapDepth + 2*epsilon, wall/2 + 2*epsilon ]);
|
||||
|
||||
translate([wall/2 - epsilon, fullDepth - (hddDepth + outerWall + wall + lapDepth/2), -epsilon])
|
||||
cube([wall/2 + 2*epsilon, lapDepth + 2*epsilon, hddHeight + 2*epsilon]);
|
||||
|
||||
translate([cubbyFullWidth - wall - epsilon, fullDepth - (hddDepth + outerWall + wall + lapDepth/2), -epsilon])
|
||||
cube([wall/2 + 2*epsilon, lapDepth + 2*epsilon, hddHeight + 2*epsilon]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
// Right Drawer
|
||||
// ===========================================================================
|
||||
rightDrawerHeight = 35;
|
||||
rightDrawerDepth = fullDepth - outerWall - slideGap;
|
||||
rightDrawerWidth = fullWidth - cubbyFullWidth - 3*outerWall - 4*slideGap;
|
||||
if (showRightDrawer) {
|
||||
color("MediumSeaGreen")
|
||||
translate([cubbyFullWidth + 2*outerWall + 3*slideGap, 0, bluRayHeight + 2*outerWall])
|
||||
union() {
|
||||
cube([ // floor
|
||||
rightDrawerWidth,
|
||||
rightDrawerDepth,
|
||||
wall]);
|
||||
|
||||
cube([ // -x wall
|
||||
wall,
|
||||
rightDrawerDepth,
|
||||
rightDrawerHeight]);
|
||||
|
||||
translate([rightDrawerWidth - wall, 0, 0])
|
||||
cube([ // +x wall
|
||||
wall,
|
||||
rightDrawerDepth,
|
||||
rightDrawerHeight]);
|
||||
|
||||
cube([ // -y wall
|
||||
rightDrawerWidth,
|
||||
wall,
|
||||
rightDrawerHeight]);
|
||||
|
||||
translate([0, rightDrawerDepth - wall, 0])
|
||||
cube([ // -y wall
|
||||
rightDrawerWidth,
|
||||
wall,
|
||||
rightDrawerHeight]);
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
// Letter Shelf
|
||||
// ===========================================================================
|
||||
letterBoxDepth = 20;
|
||||
letterBoxRecline = 2;
|
||||
if (showLetterShelf) {
|
||||
color("PeachPuff")
|
||||
translate([cubbyFullWidth + outerWall + 2*slideGap, 0, fullHeight - letterBoxDepth])
|
||||
rotate([-letterBoxRecline, 0, 0])
|
||||
union() {
|
||||
cube([
|
||||
fullWidth - cubbyFullWidth - outerWall - 2*slideGap,
|
||||
fullDepth,
|
||||
wall ]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ===========================================================================
|
||||
// Outer Shell
|
||||
// ===========================================================================
|
||||
shell1Width = cubbyFullWidth + outerWall + 2*slideGap;
|
||||
if (showShell1) {
|
||||
color("MidnightBlue")
|
||||
difference() {
|
||||
union() {
|
||||
cube([ // floor
|
||||
shell1Width,
|
||||
fullDepth,
|
||||
outerWall]);
|
||||
|
||||
cube([ // -x wall
|
||||
outerWall,
|
||||
fullDepth,
|
||||
fullHeight/3]);
|
||||
|
||||
translate([0, fullDepth - outerWall, 0])
|
||||
cube([ // +y wall (short)
|
||||
shell1Width,
|
||||
outerWall,
|
||||
fullHeight/3]);
|
||||
|
||||
translate([shell1Width/2, 0, -20])
|
||||
cube([ // printing support
|
||||
wall,
|
||||
fullDepth,
|
||||
20 + epsilon]);
|
||||
}
|
||||
|
||||
union() {
|
||||
translate([shell1Width - lapDepth, fullDepth - outerWall/2 + epsilon, -epsilon])
|
||||
cube([ // +y wall lip cutout
|
||||
lapDepth + epsilon,
|
||||
outerWall/2 + epsilon,
|
||||
fullHeight/3 + 2*epsilon]);
|
||||
|
||||
translate([shell1Width - lapDepth, -epsilon, outerWall/2 + epsilon])
|
||||
cube([ // floor lip cutout
|
||||
lapDepth + 2*epsilon,
|
||||
fullDepth + 2*epsilon,
|
||||
outerWall/2 + epsilon]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
shell2Width = fullWidth - cubbyFullWidth - outerWall - 2*slideGap;
|
||||
if (showShell2Top) {
|
||||
color("SlateBlue")
|
||||
translate([cubbyFullWidth + outerWall + 2*slideGap, 0, fullHeight/2])
|
||||
difference() {
|
||||
union() {
|
||||
cube([ // middle x wall
|
||||
outerWall,
|
||||
fullDepth,
|
||||
fullHeight/2]);
|
||||
|
||||
translate([shell2Width - outerWall, 0, 0])
|
||||
cube([ // +x wall
|
||||
outerWall,
|
||||
fullDepth,
|
||||
fullHeight/2]);
|
||||
|
||||
translate([0, fullDepth - outerWall, 0])
|
||||
cube([ // +y wall (tall)
|
||||
shell2Width,
|
||||
outerWall,
|
||||
fullHeight/2]);
|
||||
|
||||
translate([0, 0, fullHeight/2 - outerWall])
|
||||
cube([ // ceiling
|
||||
shell2Width,
|
||||
fullDepth,
|
||||
outerWall ]);
|
||||
}
|
||||
|
||||
union() {
|
||||
translate([-epsilon, fullDepth - outerWall/2 + epsilon, -epsilon])
|
||||
cube([ // +y wall lip cutout
|
||||
shell2Width + 2*epsilon,
|
||||
outerWall/2 + epsilon,
|
||||
lapDepth + 2*epsilon]);
|
||||
|
||||
translate([outerWall/2, -epsilon, -epsilon])
|
||||
cube([ // -x wall lip cutout
|
||||
outerWall/2 + 2*epsilon,
|
||||
fullDepth,
|
||||
lapDepth + 2*epsilon ]);
|
||||
|
||||
translate([shell2Width - outerWall -epsilon, -epsilon, -epsilon])
|
||||
cube([ // +x wall lip cutout
|
||||
outerWall/2 + 2*epsilon,
|
||||
fullDepth,
|
||||
lapDepth + 2*epsilon ]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (showShell2Bot) {
|
||||
color("DarkSlateBlue")
|
||||
translate([cubbyFullWidth + outerWall + 2*slideGap, 0, 0])
|
||||
union() {
|
||||
cube([ // floor
|
||||
shell2Width,
|
||||
fullDepth,
|
||||
outerWall]);
|
||||
|
||||
cube([ // middle x wall
|
||||
outerWall,
|
||||
fullDepth,
|
||||
fullHeight/2]);
|
||||
|
||||
translate([shell2Width - outerWall, 0, 0])
|
||||
cube([ // +x wall
|
||||
outerWall,
|
||||
fullDepth,
|
||||
fullHeight/2]);
|
||||
|
||||
translate([0, fullDepth - outerWall, 0])
|
||||
cube([ // +y wall (tall)
|
||||
shell2Width,
|
||||
outerWall,
|
||||
fullHeight/2]);
|
||||
|
||||
translate([-lapDepth, fullDepth - outerWall/2, 0])
|
||||
cube([ // +y wall lip 1 (to shell 1)
|
||||
lapDepth + epsilon,
|
||||
outerWall/2,
|
||||
fullHeight/3]);
|
||||
|
||||
translate([0, fullDepth - outerWall/2, fullHeight/2 - epsilon])
|
||||
cube([ // +y wall lip 2 (to shell 2 top)
|
||||
shell2Width,
|
||||
outerWall/2,
|
||||
lapDepth + epsilon]);
|
||||
|
||||
translate([outerWall/2, 0, fullHeight/2 - epsilon])
|
||||
cube([ // -x wall lip
|
||||
outerWall/2,
|
||||
fullDepth,
|
||||
lapDepth + epsilon ]);
|
||||
|
||||
translate([shell2Width - outerWall, 0, fullHeight/2 - epsilon])
|
||||
cube([ // +x wall lip
|
||||
outerWall/2,
|
||||
fullDepth,
|
||||
lapDepth + epsilon ]);
|
||||
|
||||
translate([-lapDepth, 0, outerWall/2])
|
||||
cube([ // floor lip
|
||||
lapDepth + epsilon,
|
||||
fullDepth,
|
||||
outerWall/2 ]);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user