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();