Kallax Organization.
This commit is contained in:
@@ -4,3 +4,8 @@ kallaxDepth = 390; // Full depth of a Kallax shelf
|
|||||||
shelfHeight = 160; // Height of a Kallax half-shelf (shelf insert)
|
shelfHeight = 160; // Height of a Kallax half-shelf (shelf insert)
|
||||||
shelfWidth = 320; // Width of a Kallax half-shelf (shelf insert)
|
shelfWidth = 320; // Width of a Kallax half-shelf (shelf insert)
|
||||||
shelfDepth = kallaxDepth - 20;
|
shelfDepth = kallaxDepth - 20;
|
||||||
|
|
||||||
|
// boardThickness = 4.7; // 1/8" plywood
|
||||||
|
boardThickness = 7.35;
|
||||||
|
feltThickness = 2.5;
|
||||||
|
feltWidth = 12;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,118 @@
|
|||||||
|
include <../lib/chamfered-cube.scad>
|
||||||
|
include <../lib/rounded-cube.scad>
|
||||||
|
include <./constants.scad>
|
||||||
|
|
||||||
|
$fn=128;
|
||||||
|
l=shelfWidth/2;
|
||||||
|
h=shelfHeight/2;
|
||||||
|
|
||||||
|
ep = 0.01;
|
||||||
|
|
||||||
|
horizontalBoardWidth = 141.5;
|
||||||
|
drawerSideHeight = 53;
|
||||||
|
sideOffset = 2*feltThickness + boardThickness;
|
||||||
|
|
||||||
|
module faceBlank() {
|
||||||
|
size = [shelfWidth/2, shelfHeight/2, 8];
|
||||||
|
chamfer = 4;
|
||||||
|
difference() {
|
||||||
|
roundedCube([l, h, 8], [1, 1, 1]);
|
||||||
|
|
||||||
|
// front face chamfers
|
||||||
|
for (i = [1,3]) {
|
||||||
|
// X-axis
|
||||||
|
translate([-ep, size[1] * floor(i/2), size[2] * (i%2) - chamfer])
|
||||||
|
rotate([45, 0, 0]) cube([size[0] + 2*ep, 1.414*chamfer, 1.414*chamfer]);
|
||||||
|
|
||||||
|
// Y-axis
|
||||||
|
translate([size[0] * floor(i/2) - chamfer, -ep, size[2] * (i%2)])
|
||||||
|
rotate([0, 45, 0]) cube([1.414*chamfer, size[1] + 2*ep, 1.414*chamfer]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// nameplate cutouts
|
||||||
|
translate([(shelfWidth/2 - 76.4)/2, 30, 7]) cube([76.4, 36, 1 + ep]);
|
||||||
|
translate([(shelfWidth/2 - 76.4)/2, 30 + 36, 7])
|
||||||
|
rotate([30, 0, 0]) cube([76.4, 4, 4]);
|
||||||
|
|
||||||
|
// screw holes
|
||||||
|
for (i = [-1, 1]) {
|
||||||
|
color("red")
|
||||||
|
translate([shelfWidth/4 + i*20, 16, -ep]) cylinder(d=3.4, h=8 + 2*ep);
|
||||||
|
translate([shelfWidth/4 + i*20, 16, -ep]) cylinder(d=6.2, h=3 + ep);
|
||||||
|
translate([shelfWidth/4 + i*20, 16, 3 - ep]) cylinder(d1=6.2, d2=3.4, h=1 + 2*ep);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module handle() {
|
||||||
|
handleLen = 64;
|
||||||
|
//difference() {
|
||||||
|
chamferedCube([handleLen, 12, 12], chamfer=3);
|
||||||
|
|
||||||
|
// screw holes
|
||||||
|
for (i = [-1, 1]) {
|
||||||
|
difference() {
|
||||||
|
translate([handleLen/2 + i*20, 6, 12-ep]) cylinder(d=6, h=8 + ep);
|
||||||
|
translate([handleLen/2 + i*20, 6, 12-ep]) cylinder(d=3, h=8 + 2*ep);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module lowerRight() {
|
||||||
|
difference() {
|
||||||
|
faceBlank();
|
||||||
|
|
||||||
|
// label
|
||||||
|
color("blue")
|
||||||
|
translate([shelfWidth/4 + 6, shelfHeight/4 - 6, -0.2]) mirror([1, 0, 0])
|
||||||
|
linear_extrude(0.4) text(font="Iosevka", size=6, "LR");
|
||||||
|
|
||||||
|
// horizontal board recess
|
||||||
|
translate([sideOffset, sideOffset, -ep])
|
||||||
|
cube([horizontalBoardWidth, boardThickness, 4+ep]);
|
||||||
|
|
||||||
|
// vertical board recesses
|
||||||
|
translate([sideOffset, sideOffset + boardThickness, -ep])
|
||||||
|
cube([boardThickness, 62, 4+ep]);
|
||||||
|
translate([sideOffset + horizontalBoardWidth - boardThickness, sideOffset + boardThickness, -ep])
|
||||||
|
cube([boardThickness, 62, 4+ep]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module lowerLeft() {
|
||||||
|
difference() {
|
||||||
|
faceBlank();
|
||||||
|
|
||||||
|
// label
|
||||||
|
color("blue")
|
||||||
|
translate([shelfWidth/4 + 6, shelfHeight/4 - 6, -0.2]) mirror([1, 0, 0])
|
||||||
|
linear_extrude(0.4) text(font="Iosevka", size=6, "LL");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module upperRight() {
|
||||||
|
difference() {
|
||||||
|
faceBlank();
|
||||||
|
|
||||||
|
// label
|
||||||
|
color("blue")
|
||||||
|
translate([shelfWidth/4 + 6, shelfHeight/4 - 6, -0.2]) mirror([1, 0, 0])
|
||||||
|
linear_extrude(0.4) text(font="Iosevka", size=6, "UR");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module upperLeft() {
|
||||||
|
difference() {
|
||||||
|
faceBlank();
|
||||||
|
|
||||||
|
// label
|
||||||
|
color("blue")
|
||||||
|
translate([shelfWidth/4 + 6, shelfHeight/4 - 6, -0.2]) mirror([1, 0, 0])
|
||||||
|
linear_extrude(0.4) text(font="Iosevka", size=6, "UL");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lowerRight();
|
||||||
|
translate([0, 200, 0]) handle();
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,91 +0,0 @@
|
|||||||
include <./constants.scad>
|
|
||||||
|
|
||||||
// all measurements in mm
|
|
||||||
boardThickness = 4.7; // 1/8" plywood
|
|
||||||
feltThickness = 2.5;
|
|
||||||
clipThickness = boardThickness + 2*feltThickness;
|
|
||||||
|
|
||||||
// measurements for the wooden panels to cut:
|
|
||||||
//
|
|
||||||
// ───────────── - top board (A)
|
|
||||||
// │ │ │
|
|
||||||
// │───────────│
|
|
||||||
// │ │ │
|
|
||||||
// │───────────│
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// top board: 320.0 x 370.0
|
|
||||||
// bottom board: 305.6 x 370.0 (320 - 2*4.7 - 2*2.5) x 370
|
|
||||||
// side boards: 152.8 x 370.0 (160 - 4.7 - 2.5) x 370
|
|
||||||
// inner boards: 70.45 x 370.0 ((160 - 3*4.7 - 2*2.5)/2) x 370
|
|
||||||
//
|
|
||||||
|
|
||||||
module customSupport() {
|
|
||||||
// 45-degree supports
|
|
||||||
difference() {
|
|
||||||
translate([clipThickness/2, -clipThickness/2, 0])
|
|
||||||
cube([1, clipThickness, clipThickness - 2]);
|
|
||||||
|
|
||||||
rotate([45, 0, 0])
|
|
||||||
translate([0, -0.1, -0.1])
|
|
||||||
cube([clipThickness, clipThickness, clipThickness]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module cornerClip() {
|
|
||||||
difference() {
|
|
||||||
cube([clipThickness, clipThickness, clipThickness]);
|
|
||||||
|
|
||||||
translate([feltThickness, feltThickness, feltThickness])
|
|
||||||
cube([boardThickness, clipThickness, clipThickness]);
|
|
||||||
|
|
||||||
translate([feltThickness, feltThickness, feltThickness])
|
|
||||||
cube([clipThickness, boardThickness, clipThickness]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module sideClip() {
|
|
||||||
difference() {
|
|
||||||
cube([clipThickness, 2 * clipThickness, clipThickness]);
|
|
||||||
|
|
||||||
translate([-0.1, feltThickness, feltThickness])
|
|
||||||
cube([clipThickness + 0.2, boardThickness, clipThickness]);
|
|
||||||
|
|
||||||
translate([feltThickness, feltThickness, feltThickness])
|
|
||||||
cube([boardThickness, 2 * clipThickness, clipThickness]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module crossClip() {
|
|
||||||
difference() {
|
|
||||||
cube([2 * clipThickness, clipThickness, clipThickness]);
|
|
||||||
|
|
||||||
translate([-0.1, feltThickness, feltThickness])
|
|
||||||
cube([2 * clipThickness + 0.2, boardThickness, clipThickness]);
|
|
||||||
|
|
||||||
translate([clipThickness - boardThickness/2, -0.1, feltThickness])
|
|
||||||
cube([boardThickness, clipThickness + 0.2, clipThickness]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
difference() {
|
|
||||||
translate([0, 0, -1.4])
|
|
||||||
union() {
|
|
||||||
for (i = [0:7])
|
|
||||||
translate([i * (clipThickness + 2), clipThickness, 0])
|
|
||||||
rotate([45, 0, 0])
|
|
||||||
cornerClip();
|
|
||||||
|
|
||||||
for (i = [0:7])
|
|
||||||
translate([i * (clipThickness + 2), 3 * clipThickness, 0])
|
|
||||||
rotate([0, 0, 0])
|
|
||||||
sideClip();
|
|
||||||
|
|
||||||
for (i = [0:1])
|
|
||||||
translate([i * (2 * clipThickness + 2), 5 * clipThickness, 0])
|
|
||||||
rotate([45, 0, 0])
|
|
||||||
crossClip();
|
|
||||||
}
|
|
||||||
|
|
||||||
translate([-1, -1, -1.4]) cube([100, 100, 1.4]);
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,15 +1,16 @@
|
|||||||
include <./constants.scad>
|
include <./constants.scad>
|
||||||
include <../lib/metric-machine-screws.scad>
|
include <../lib/metric-machine-screws.scad>
|
||||||
|
include <../lib/chamfered-cube.scad>
|
||||||
|
include <../lib/rounded-cube.scad>
|
||||||
|
|
||||||
// all measurements in mm
|
// all measurements in mm
|
||||||
// boardThickness = 4.7; // 1/8" plywood
|
$fn=128;
|
||||||
boardThickness = 7.35;
|
ep = 0.01;
|
||||||
feltThickness = 2.5;
|
|
||||||
feltWidth = 12;
|
|
||||||
clipThickness = boardThickness + 2*feltThickness;
|
clipThickness = boardThickness + 2*feltThickness;
|
||||||
clipWallThickness = 4;
|
clipWallThickness = 4;
|
||||||
clipFlangeLength = 24;
|
clipFlangeLength = 24;
|
||||||
clipFlangeWidth = 16;
|
clipFlangeWidth = 16;
|
||||||
|
drawerSideOffset = 2*feltThickness + boardThickness;
|
||||||
|
|
||||||
// measurements for the wooden panels to cut:
|
// measurements for the wooden panels to cut:
|
||||||
//
|
//
|
||||||
@@ -26,6 +27,9 @@ clipFlangeWidth = 16;
|
|||||||
// inner boards: 70.45 x 370.0 ((160 - 3*4.7 - 2*2.5)/2) x 370
|
// inner boards: 70.45 x 370.0 ((160 - 3*4.7 - 2*2.5)/2) x 370
|
||||||
//
|
//
|
||||||
|
|
||||||
|
function drawerWidth(boxDims) = (boxDims[0] - 3*boardThickness - 4*feltThickness)/2 + 2;
|
||||||
|
function drawerHeight(boxDims) = (boxDims[2] - 3*boardThickness - 4*feltThickness)/2;
|
||||||
|
|
||||||
module fastenerBlank() {
|
module fastenerBlank() {
|
||||||
translate([0, 0.1 + 2 * clipWallThickness + boardThickness, 0])
|
translate([0, 0.1 + 2 * clipWallThickness + boardThickness, 0])
|
||||||
rotate([90, 0, 0])
|
rotate([90, 0, 0])
|
||||||
@@ -266,15 +270,198 @@ module bottomPanel(boxDims) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
module drawerFacePlateBlank(boxDims) {
|
||||||
module drawerFacePlate(outerBoxDims, includeClips = false) {
|
size = [boxDims[0]/2 - 1, boxDims[2]/2 - 1, 8];
|
||||||
|
chamfer = 4;
|
||||||
|
|
||||||
|
difference() {
|
||||||
|
roundedCube(size, [1, 1, 1]);
|
||||||
|
|
||||||
|
// front face chamfers
|
||||||
|
for (i = [1,3]) {
|
||||||
|
// X-axis
|
||||||
|
translate([-ep, size[1] * floor(i/2), size[2] * (i%2) - chamfer])
|
||||||
|
rotate([45, 0, 0]) cube([size[0] + 2*ep, 1.414*chamfer, 1.414*chamfer]);
|
||||||
|
|
||||||
|
// Y-axis
|
||||||
|
translate([size[0] * floor(i/2) - chamfer, -ep, size[2] * (i%2)])
|
||||||
|
rotate([0, 45, 0]) cube([1.414*chamfer, size[1] + 2*ep, 1.414*chamfer]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// nameplate cutouts
|
||||||
|
translate([(boxDims[0]/2 - 76)/2, 30, 7]) cube([76, 36, 1 + ep]);
|
||||||
|
translate([(boxDims[0]/2 - 76)/2, 30 + 36, 7])
|
||||||
|
rotate([30, 0, 0]) cube([76, 4, 4]);
|
||||||
|
|
||||||
|
// screw holes
|
||||||
|
for (i = [-1, 1]) {
|
||||||
|
color("red")
|
||||||
|
translate([boxDims[0]/4 + i*20, 16, -ep]) cylinder(d=3.4, h=8+2*ep);
|
||||||
|
translate([boxDims[0]/4 + i*20, 16, -ep]) cylinder(d=6.2, h=3+ep);
|
||||||
|
//translate([boxDims[0]/4 + i*20, 16, 3 - ep]) cylinder(d1=6.2, d2=3.4, h=1+2*ep);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module drawerBottom(outerBoxDims, includeClips = false) {
|
module lowerLeftDrawerFace(outerDims, boxDims) {
|
||||||
|
rotate([90, 0, 0])
|
||||||
|
difference() {
|
||||||
|
drawerFacePlateBlank(outerDims);
|
||||||
|
|
||||||
|
// label
|
||||||
|
color("blue")
|
||||||
|
translate([outerDims[0]/4 + 6, outerDims[2]/4 - 6, -0.2]) mirror([1, 0, 0])
|
||||||
|
linear_extrude(0.4) text(font="Iosevka", size=6, "LL");
|
||||||
|
|
||||||
|
// horizontal board recess
|
||||||
|
translate([drawerSideOffset, drawerSideOffset, -ep])
|
||||||
|
cube([drawerWidth(boxDims), boardThickness, 4+ep]);
|
||||||
|
|
||||||
|
// vertical board recesses
|
||||||
|
translate([drawerSideOffset, drawerSideOffset + boardThickness - ep, -ep])
|
||||||
|
cube([boardThickness, drawerHeight(boxDims) - boardThickness + ep, 4+ep]);
|
||||||
|
translate([
|
||||||
|
drawerSideOffset + drawerWidth(boxDims) - boardThickness,
|
||||||
|
drawerSideOffset + boardThickness - ep,
|
||||||
|
-ep])
|
||||||
|
cube([boardThickness, drawerHeight(boxDims) - boardThickness + ep, 4+ep]);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module drawerSide(outerBoxDims, includeClips = false) {
|
module lowerRightDrawerFace(outerDims, boxDims) {
|
||||||
|
rotate([90, 0, 0])
|
||||||
|
difference() {
|
||||||
|
translate([1, 0, 0])
|
||||||
|
drawerFacePlateBlank(outerDims);
|
||||||
|
|
||||||
|
// label
|
||||||
|
color("blue")
|
||||||
|
translate([outerDims[0]/4 + 6, outerDims[2]/4 - 6, -0.2]) mirror([1, 0, 0])
|
||||||
|
linear_extrude(0.4) text(font="Iosevka", size=6, "LR");
|
||||||
|
|
||||||
|
union() {
|
||||||
|
// horizontal board recess
|
||||||
|
translate([feltThickness + boardThickness/2, drawerSideOffset, -ep])
|
||||||
|
cube([drawerWidth(boxDims), boardThickness, 4+ep]);
|
||||||
|
|
||||||
|
// vertical board recesses
|
||||||
|
translate([feltThickness + boardThickness/2, drawerSideOffset + boardThickness - ep, -ep])
|
||||||
|
cube([boardThickness, drawerHeight(boxDims) - boardThickness + ep, 4+ep]);
|
||||||
|
translate([
|
||||||
|
feltThickness + boardThickness/2 + drawerWidth(boxDims) - boardThickness,
|
||||||
|
feltThickness + boardThickness/2 + boardThickness - ep,
|
||||||
|
-ep])
|
||||||
|
cube([boardThickness, drawerHeight(boxDims) - boardThickness + ep, 4+ep]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// translate([-1, -1, 4-ep]) cube([outerDims[0], outerDims[2], 5]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module upperRightDrawerFace(outerDims, boxDims) {
|
||||||
|
rotate([90, 0, 0])
|
||||||
|
difference() {
|
||||||
|
translate([1, 0, 0])
|
||||||
|
drawerFacePlateBlank(outerDims);
|
||||||
|
|
||||||
|
// label
|
||||||
|
color("blue")
|
||||||
|
translate([outerDims[0]/4 + 6, outerDims[2]/4 - 6, -0.2]) mirror([1, 0, 0])
|
||||||
|
linear_extrude(0.4) text(font="Iosevka", size=6, "UR");
|
||||||
|
|
||||||
|
union() {
|
||||||
|
// horizontal board recess
|
||||||
|
translate([feltThickness + boardThickness/2, feltThickness + boardThickness/2, -ep])
|
||||||
|
cube([drawerWidth(boxDims), boardThickness, 4+ep]);
|
||||||
|
|
||||||
|
// vertical board recesses
|
||||||
|
translate([
|
||||||
|
feltThickness + boardThickness/2,
|
||||||
|
feltThickness + boardThickness/2 + boardThickness - ep,
|
||||||
|
-ep])
|
||||||
|
cube([boardThickness, drawerHeight(boxDims) - boardThickness + ep, 4+ep]);
|
||||||
|
translate([
|
||||||
|
feltThickness + boardThickness/2 + drawerWidth(boxDims) - boardThickness,
|
||||||
|
feltThickness + boardThickness/2 + boardThickness - ep,
|
||||||
|
-ep])
|
||||||
|
cube([boardThickness, drawerHeight(boxDims) - boardThickness + ep, 4+ep]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// translate([-1, -1, 4-ep]) cube([outerDims[0], outerDims[2], 5]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module upperLeftDrawerFace(outerDims, boxDims) {
|
||||||
|
rotate([90, 0, 0])
|
||||||
|
difference() {
|
||||||
|
drawerFacePlateBlank(outerDims);
|
||||||
|
|
||||||
|
// label
|
||||||
|
color("blue")
|
||||||
|
translate([boxDims[0]/4 + 6, boxDims[2]/4 - 6, -0.2]) mirror([1, 0, 0])
|
||||||
|
linear_extrude(0.4) text(font="Iosevka", size=6, "UL");
|
||||||
|
|
||||||
|
union() {
|
||||||
|
// horizontal board recess
|
||||||
|
translate([drawerSideOffset, feltThickness + boardThickness/2, -ep])
|
||||||
|
cube([drawerWidth(boxDims), boardThickness, 4+ep]);
|
||||||
|
|
||||||
|
// vertical board recesses
|
||||||
|
translate([
|
||||||
|
drawerSideOffset,
|
||||||
|
feltThickness + boardThickness/2 + boardThickness - ep,
|
||||||
|
-ep])
|
||||||
|
cube([boardThickness, drawerHeight(boxDims) - boardThickness + ep, 4+ep]);
|
||||||
|
translate([
|
||||||
|
drawerSideOffset + drawerWidth(boxDims) - boardThickness,
|
||||||
|
feltThickness + boardThickness/2 + boardThickness - ep,
|
||||||
|
-ep])
|
||||||
|
cube([boardThickness, drawerHeight(boxDims) - boardThickness + ep, 4+ep]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// translate([-1, -1, 4-ep]) cube([outerDims[0], outerDims[2], 5]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
module drawerHandle() {
|
||||||
|
handleLen = 64;
|
||||||
|
//difference() {
|
||||||
|
chamferedCube([handleLen, 12, 12], chamfer=3);
|
||||||
|
|
||||||
|
// screw holes
|
||||||
|
for (i = [-1, 1]) {
|
||||||
|
difference() {
|
||||||
|
translate([handleLen/2 + i*20, 6, 12-ep]) cylinder(d=6, h=8 + ep);
|
||||||
|
translate([handleLen/2 + i*20, 6, 12-ep]) cylinder(d=2.8, h=8 + 2*ep);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
module drawerBottom(boxDims, includeClips = false) {
|
||||||
|
difference() {
|
||||||
|
color ("Tan")
|
||||||
|
cube([
|
||||||
|
drawerWidth(boxDims),
|
||||||
|
boxDims[1], boardThickness]);
|
||||||
|
color("black") translate([10, 10, boardThickness - 1]) linear_extrude(1.1)
|
||||||
|
text(font="Iosevka", size=16, "drawer bottom - plywood");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module drawerSide(boxDims, includeClips = false) {
|
||||||
|
difference() {
|
||||||
|
color("Wheat")
|
||||||
|
cube([
|
||||||
|
drawerHeight(boxDims) - boardThickness, boxDims[1], boardThickness]);
|
||||||
|
color("black") rotate([0, 0, -90]) translate([-10, 10, boardThickness - 1]) linear_extrude(1.1)
|
||||||
|
text(font="Iosevka", halign = "right", size=16, "drawer side - plywood");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module assembled(outerBoxDims, includeClips = false) {
|
module assembled(outerBoxDims, includeClips = false) {
|
||||||
@@ -309,6 +496,51 @@ module assembled(outerBoxDims, includeClips = false) {
|
|||||||
|
|
||||||
translate([boardThickness, 0, boardThickness + (innerBoxDims[2] - 3*boardThickness)/2]) bottomPanel(innerBoxDims);
|
translate([boardThickness, 0, boardThickness + (innerBoxDims[2] - 3*boardThickness)/2]) bottomPanel(innerBoxDims);
|
||||||
translate([boardThickness, 0, 0]) bottomPanel(innerBoxDims);
|
translate([boardThickness, 0, 0]) bottomPanel(innerBoxDims);
|
||||||
|
|
||||||
|
// drawers
|
||||||
|
translate([boardThickness + feltThickness, 0, boardThickness + feltThickness])
|
||||||
|
for (i = [0:3]) {
|
||||||
|
// felt box
|
||||||
|
color("brown")
|
||||||
|
translate([
|
||||||
|
(i%2)*(innerBoxDims[0]-boardThickness)/2 - feltThickness,
|
||||||
|
0.01,
|
||||||
|
floor(i/2)*(innerBoxDims[2]-boardThickness)/2 - feltThickness])
|
||||||
|
feltClearanceBox([
|
||||||
|
innerBoxDims[0]/2 - 1.5*boardThickness,
|
||||||
|
innerBoxDims[1],
|
||||||
|
innerBoxDims[2]/2 - 1.5*boardThickness]);
|
||||||
|
|
||||||
|
//bottom
|
||||||
|
translate([
|
||||||
|
(i%2)*(innerBoxDims[0]-boardThickness)/2,
|
||||||
|
0,
|
||||||
|
floor(i/2)*(innerBoxDims[2]-boardThickness)/2])
|
||||||
|
drawerBottom(innerBoxDims);
|
||||||
|
|
||||||
|
// side
|
||||||
|
for (j = [0,1]) {
|
||||||
|
translate([
|
||||||
|
boardThickness + (i%2)*(innerBoxDims[0]-boardThickness)/2 +
|
||||||
|
j*(drawerWidth(innerBoxDims) - boardThickness),
|
||||||
|
0,
|
||||||
|
boardThickness + floor(i/2)*(innerBoxDims[2]-boardThickness)/2])
|
||||||
|
rotate([0, -90, 0]) drawerSide(innerBoxDims);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
translate([-feltThickness, 0, -feltThickness])
|
||||||
|
lowerLeftDrawerFace(outerBoxDims, innerBoxDims);
|
||||||
|
|
||||||
|
translate([outerBoxDims[0]/2 - feltThickness, 0, -feltThickness])
|
||||||
|
lowerRightDrawerFace(outerBoxDims, innerBoxDims);
|
||||||
|
|
||||||
|
translate([-feltThickness, 0, outerBoxDims[2] / 2 - feltThickness])
|
||||||
|
upperLeftDrawerFace(outerBoxDims, innerBoxDims);
|
||||||
|
|
||||||
|
translate([outerBoxDims[0]/2 - feltThickness, 0, outerBoxDims[2] / 2 - feltThickness])
|
||||||
|
upperRightDrawerFace(outerBoxDims, innerBoxDims);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (includeClips) {
|
if (includeClips) {
|
||||||
@@ -384,4 +616,17 @@ shelfDims = [shelfWidth, shelfDepth, shelfHeight];
|
|||||||
|
|
||||||
//translate([300, shelfDepth + 40, 0])
|
//translate([300, shelfDepth + 40, 0])
|
||||||
//rotate([0, 0, 90])
|
//rotate([0, 0, 90])
|
||||||
printableSetA();
|
//printableSetA();
|
||||||
|
|
||||||
|
innerBoxDims =
|
||||||
|
[ shelfDims[0] - 2*feltThickness,
|
||||||
|
shelfDims[1],
|
||||||
|
shelfDims[2] - 2*feltThickness ];
|
||||||
|
|
||||||
|
|
||||||
|
//drawerBottom(innerBoxDims);
|
||||||
|
//lowerLeftDrawerFace(shelfDims, innerBoxDims);
|
||||||
|
//lowerRightDrawerFace(shelfDims, innerBoxDims);
|
||||||
|
//upperLeftDrawerFace(shelfDims, innerBoxDims);
|
||||||
|
upperRightDrawerFace(shelfDims, innerBoxDims);
|
||||||
|
//drawerHandle();
|
||||||
|
|||||||
Reference in New Issue
Block a user