Backpack Organizer v9: add shells.
This commit is contained in:
@@ -6,15 +6,20 @@ $fn=128;
|
|||||||
outerWall=4;
|
outerWall=4;
|
||||||
innerWall=2;
|
innerWall=2;
|
||||||
layerClearance = 0.5;
|
layerClearance = 0.5;
|
||||||
verStr="v8";
|
verStr="v9";
|
||||||
font="Montserrat";
|
font="Montserrat";
|
||||||
|
ep = 0.01; // smallest unit to ensure overlap between shapes
|
||||||
|
|
||||||
// as a convention, outer dimensions refer to measurements from outside wall to
|
// as a convention, outer dimensions refer to measurements from outside wall to
|
||||||
// outside wall, as if you put a caliper around the whole thing. Inner
|
// outside wall, as if you put a caliper around the whole thing. Inner
|
||||||
// dimesions refers to inside or void dimensions: the space available to be
|
// dimesions refers to inside or void dimensions: the space available to be
|
||||||
// filled.
|
// filled.
|
||||||
|
layer1H = 44;
|
||||||
|
layer2H = 40;
|
||||||
|
|
||||||
outerBoxLength = 300;
|
outerBoxLength = 300;
|
||||||
outerBoxWidth = 154;
|
outerBoxWidth = 154;
|
||||||
|
outerBoxHeight = layer1H + layer2H + 2*outerWall;
|
||||||
|
|
||||||
innerBoxLength = outerBoxLength - 2*outerWall;
|
innerBoxLength = outerBoxLength - 2*outerWall;
|
||||||
innerBoxWidth = outerBoxWidth - 2*outerWall;
|
innerBoxWidth = outerBoxWidth - 2*outerWall;
|
||||||
@@ -25,8 +30,114 @@ audioTrayIS = audioTraySide - 2*innerWall;
|
|||||||
audioTrayIH = audioTrayHeight - innerWall;
|
audioTrayIH = audioTrayHeight - innerWall;
|
||||||
|
|
||||||
|
|
||||||
|
module shellBottom(dims) {
|
||||||
|
lipClearance = innerWall + 1;
|
||||||
|
bottomShellH = dims[2]*0.75;
|
||||||
|
difference() {
|
||||||
|
union() {
|
||||||
|
difference() {
|
||||||
|
// main body
|
||||||
|
chamferedCube(dims,
|
||||||
|
chamfer=4);
|
||||||
|
|
||||||
|
// top-cut (75% up)
|
||||||
|
translate([-outerWall, -outerWall, bottomShellH])
|
||||||
|
cube([dims[0] + 2*outerWall, dims[1] + 2*outerWall, dims[2]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// add lip to mate with top
|
||||||
|
translate([lipClearance, lipClearance, bottomShellH - ep])
|
||||||
|
roundedCube(
|
||||||
|
[dims[0] - 2*lipClearance, dims[1] - 2*lipClearance, 4 - 1],
|
||||||
|
[2, 2, 0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// carve out the interior
|
||||||
|
translate([outerWall, outerWall, outerWall])
|
||||||
|
cube([dims[0] - 2*outerWall, dims[1] - 2*outerWall, dims[2]]);
|
||||||
|
|
||||||
|
// carve out a 0.6mm sliver for the fabric to sit in
|
||||||
|
fabricClearance = 0.6;
|
||||||
|
translate([
|
||||||
|
lipClearance - fabricClearance,
|
||||||
|
lipClearance - fabricClearance,
|
||||||
|
bottomShellH - 4])
|
||||||
|
difference() {
|
||||||
|
roundedCube(
|
||||||
|
[ dims[0] - 2*lipClearance + 2*fabricClearance,
|
||||||
|
dims[1] - 2*lipClearance + 2*fabricClearance,
|
||||||
|
7],
|
||||||
|
[2, 2, 0]);
|
||||||
|
|
||||||
|
translate([fabricClearance, fabricClearance, -ep])
|
||||||
|
roundedCube(
|
||||||
|
[dims[0] - 2*lipClearance, dims[1] - 2*lipClearance, 8],
|
||||||
|
[2, 2, 0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// version marker
|
||||||
|
color("black")
|
||||||
|
translate([0.6, 20, 8]) rotate([90, 0,-90])
|
||||||
|
linear_extrude(0.61) text(text = verStr, font = font, size = 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module shellTop(dims) {
|
||||||
|
lipClearance = innerWall + 1;
|
||||||
|
topShellH = dims[2]*0.25;
|
||||||
|
difference() {
|
||||||
|
union() {
|
||||||
|
difference() {
|
||||||
|
// main body
|
||||||
|
chamferedCube(dims,
|
||||||
|
chamfer=4);
|
||||||
|
|
||||||
|
// top-cut (75% up)
|
||||||
|
translate([-outerWall, -outerWall, topShellH + 4])
|
||||||
|
cube([dims[0] + 2*outerWall, dims[1] + 2*outerWall, dims[2]]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// carve out the interior
|
||||||
|
translate([outerWall, outerWall, outerWall])
|
||||||
|
cube([dims[0] - 2*outerWall, dims[1] - 2*outerWall, dims[2]]);
|
||||||
|
|
||||||
|
// carve out the interior of the lip
|
||||||
|
translate([lipClearance, lipClearance, topShellH])
|
||||||
|
roundedCube(
|
||||||
|
[dims[0] - 2*lipClearance, dims[1] - 2*lipClearance, dims[2]],
|
||||||
|
[2, 2, 0]);
|
||||||
|
|
||||||
|
// carve out a 0.6mm sliver for the fabric to sit in
|
||||||
|
fabricClearance = 0.6;
|
||||||
|
translate([
|
||||||
|
lipClearance,
|
||||||
|
lipClearance,
|
||||||
|
topShellH - 4])
|
||||||
|
difference() {
|
||||||
|
roundedCube(
|
||||||
|
[ dims[0] - 2*lipClearance,
|
||||||
|
dims[1] - 2*lipClearance,
|
||||||
|
7],
|
||||||
|
[2, 2, 0]);
|
||||||
|
|
||||||
|
translate([fabricClearance, fabricClearance, -ep])
|
||||||
|
roundedCube(
|
||||||
|
[ dims[0] - 2*lipClearance - 2*fabricClearance,
|
||||||
|
dims[1] - 2*lipClearance - 2*fabricClearance,
|
||||||
|
8],
|
||||||
|
[2, 2, 0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// version marker
|
||||||
|
color("black")
|
||||||
|
translate([0.6, 20, 8]) rotate([90, 0,-90])
|
||||||
|
linear_extrude(0.61) text(text = verStr, font = font, size = 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
module layer1() {
|
module layer1() {
|
||||||
oH = 44;
|
oH = layer1H;
|
||||||
oL = innerBoxLength - 2*layerClearance; // outer length
|
oL = innerBoxLength - 2*layerClearance; // outer length
|
||||||
oW = innerBoxWidth - 2*layerClearance; // outer width
|
oW = innerBoxWidth - 2*layerClearance; // outer width
|
||||||
iL = oL - 2*innerWall; // inner length
|
iL = oL - 2*innerWall; // inner length
|
||||||
@@ -66,7 +177,7 @@ module layer1() {
|
|||||||
// plain cube version (we're going to oversize and chamfer to get
|
// plain cube version (we're going to oversize and chamfer to get
|
||||||
// diagonal edges)
|
// diagonal edges)
|
||||||
// translate([(handleDia - bitW) / 2, handleDia / 2, 0]) cube([bitW, bitL + handleDia/2, oH]);
|
// translate([(handleDia - bitW) / 2, handleDia / 2, 0]) cube([bitW, bitL + handleDia/2, oH]);
|
||||||
translate([(handleDia - bitW) / 2 - 5, handleDia / 2 - 5, -0.01])
|
translate([(handleDia - bitW) / 2 - 5, handleDia / 2 - 5, -ep])
|
||||||
chamferedCube([bitW + 10, bitL + handleDia/2 + 10, 16], chamfer=5);
|
chamferedCube([bitW + 10, bitL + handleDia/2 + 10, 16], chamfer=5);
|
||||||
|
|
||||||
// power block cutout
|
// power block cutout
|
||||||
@@ -139,7 +250,7 @@ module layer1() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module layer2() {
|
module layer2() {
|
||||||
oH = 40;
|
oH = layer2H;
|
||||||
oL = innerBoxLength - 2*layerClearance; // outer length
|
oL = innerBoxLength - 2*layerClearance; // outer length
|
||||||
oW = innerBoxWidth - 2*layerClearance; // outer width
|
oW = innerBoxWidth - 2*layerClearance; // outer width
|
||||||
iL = oL - 2*innerWall; // inner length
|
iL = oL - 2*innerWall; // inner length
|
||||||
@@ -159,21 +270,21 @@ module layer2() {
|
|||||||
|
|
||||||
// Tekton tool kit
|
// Tekton tool kit
|
||||||
translate([2, 103 + innerWall, 0])
|
translate([2, 103 + innerWall, 0])
|
||||||
cube([105.5, 57, oH]);
|
cube([105.5, 61, oH]);
|
||||||
|
|
||||||
// Slice knife
|
// Slice knife
|
||||||
translate([114, 103 + innerWall, 0])
|
translate([114, 103 + innerWall, 0])
|
||||||
cube([22.5, 153, oH]);
|
cube([22.5, 156, oH]);
|
||||||
|
|
||||||
// cables
|
// cables
|
||||||
translate([56, 224, 0])
|
translate([56, 226, 0])
|
||||||
cylinder(d=110, h=oH);
|
cylinder(d=110, h=oH);
|
||||||
|
|
||||||
// fingerways
|
// fingerways
|
||||||
translate([30, 80, 0])
|
translate([30, 80, 0])
|
||||||
cube([36, 30, oH]);
|
cube([36, 30, oH]);
|
||||||
|
|
||||||
translate([105, 126, 0])
|
translate([105, 130, 0])
|
||||||
cube([12, 36, oH]);
|
cube([12, 36, oH]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,7 +296,7 @@ module layer2() {
|
|||||||
|
|
||||||
translate([32, 96, 0]) scale([6, 22, 1]) cylinder(d=1, h=oH);
|
translate([32, 96, 0]) scale([6, 22, 1]) cylinder(d=1, h=oH);
|
||||||
translate([68, 96, 0]) scale([6, 22, 1]) cylinder(d=1, h=oH);
|
translate([68, 96, 0]) scale([6, 22, 1]) cylinder(d=1, h=oH);
|
||||||
translate([112.75, 128, 0]) scale([6.5, 6, 1]) cylinder(d=1, h=oH);
|
translate([112.75, 132, 0]) scale([6.5, 6, 1]) cylinder(d=1, h=oH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -426,9 +537,19 @@ module usbBitsTray() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
layer1();
|
standoffX = outerBoxWidth + 10;
|
||||||
//layer2();
|
standoffY = outerBoxLength + 10;
|
||||||
//translate([outerBoxWidth + 10, 0, 0]) audioJackTray();
|
|
||||||
//translate([outerBoxWidth + 10, 80, 0]) usbBitsTray();
|
// test-print the lip
|
||||||
//translate([outerBoxWidth + 10, 160, 0]) headphoneAmpTray();
|
shellBottom([20, 30, 30]);
|
||||||
//translate([outerBoxWidth + 10, 240, 0]) drumKeyTray();
|
translate([24, 0, 0]) shellTop([20, 30, 30]);
|
||||||
|
/*
|
||||||
|
shellBottom([outerBoxWidth, outerBoxLength, outerBoxHeight]);
|
||||||
|
translate([0, standoffY, 0]) shellTop([outerBoxWidth, outerBoxLength, outerBoxHeight]);
|
||||||
|
translate([standoffX, 0, 0]) layer1();
|
||||||
|
translate([standoffX, standoffY, 0]) layer2();
|
||||||
|
translate([2*standoffX, 0, 0]) audioJackTray();
|
||||||
|
translate([2*standoffX, 80, 0]) usbBitsTray();
|
||||||
|
translate([2*standoffX, 160, 0]) headphoneAmpTray();
|
||||||
|
translate([2*standoffX, 240, 0]) drumKeyTray();
|
||||||
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user