construction_plans/shelf_with_drawers.scad

160 lines
3.8 KiB
OpenSCAD
Raw Normal View History

2020-08-01 01:10:03 +02:00
/* Copyright © 2020 tastytea <tastytea@tastytea.de>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
2020-08-01 01:19:15 +02:00
/* A shelf with cubical drawers. Units are supposed to be cm. The drawers begin
2020-08-01 01:39:07 +02:00
* 80cm above the ground. You will need 1 kind of lath, 1 kind of board,
* handles, a saw and a few screws for this build.
2020-08-01 01:23:41 +02:00
*/
2020-08-01 01:19:15 +02:00
2020-08-01 00:33:34 +02:00
$fa = 1;
$fs = 0.2;
2020-08-01 01:10:03 +02:00
drawer_size = 20; /* Cube */
lath_width = 2.4; /* x */
lath_depth = 4.8; /* y */
board_height = 1.0; /* z */
2020-08-01 00:33:34 +02:00
2020-08-01 01:19:31 +02:00
module drawer()
2020-08-01 00:33:34 +02:00
{
/* Sides */
2020-08-01 00:33:34 +02:00
color("brown")
{
cube([board_height, drawer_size, drawer_size]);
translate([drawer_size - board_height, 0, 0])
2020-08-01 01:28:29 +02:00
{
cube([board_height, drawer_size, drawer_size]);
2020-08-01 01:28:29 +02:00
}
2020-08-01 00:33:34 +02:00
}
/* Front & back */
2020-08-01 00:33:34 +02:00
color("darkred")
{
translate([board_height, 0, 0])
2020-08-01 01:28:29 +02:00
{
2020-08-01 01:37:53 +02:00
cube([drawer_size - (board_height * 2), board_height, drawer_size]);
2020-08-01 01:28:29 +02:00
}
translate([board_height, drawer_size - board_height, 0])
2020-08-01 01:28:29 +02:00
{
2020-08-01 01:37:53 +02:00
cube([drawer_size - (board_height * 2), board_height, drawer_size]);
2020-08-01 01:28:29 +02:00
}
2020-08-01 00:33:34 +02:00
}
/* Bottom */
2020-08-01 01:28:29 +02:00
color([0.4, 0.2, 0.2])
{
translate([board_height, board_height, 0])
{
cube([
2020-08-01 01:37:53 +02:00
drawer_size - (board_height * 2),
drawer_size - (board_height * 2),
2020-08-01 01:28:29 +02:00
board_height
]);
}
}
2020-08-01 00:33:34 +02:00
/* Handle */
translate([drawer_size / 2, 0, drawer_size / 2])
2020-08-01 00:33:34 +02:00
{
color([0.4, 0.2, 0.2])
{
2020-08-01 01:28:29 +02:00
rotate([90, 0, 0])
{
cylinder(h = 0.5, d = 1.5);
}
translate([0, -1.5, 0])
{
sphere(d = 3, false);
}
2020-08-01 00:33:34 +02:00
}
}
}
module lath(length)
2020-08-01 00:33:34 +02:00
{
cube([lath_width, lath_depth, length]);
2020-08-01 00:33:34 +02:00
}
2020-08-01 01:19:31 +02:00
module shelf()
2020-08-01 00:33:34 +02:00
{
/* Posts */
2020-08-01 00:33:34 +02:00
color("olive")
{
for (x = [0, drawer_size + lath_width])
2020-08-01 00:33:34 +02:00
{
for (y = [0, drawer_size - lath_depth])
2020-08-01 00:33:34 +02:00
{
translate([x, y, 0])
2020-08-01 01:28:29 +02:00
{
2020-08-01 01:37:53 +02:00
lath(80 + (drawer_size * 4) + (board_height * 5));
2020-08-01 01:28:29 +02:00
}
2020-08-01 00:33:34 +02:00
}
}
}
/* Cross laths */
2020-08-01 00:33:34 +02:00
color("darkgreen")
{
for (x = [0, drawer_size + lath_width])
2020-08-01 00:33:34 +02:00
{
for (z = [drawer_size, 60, 150])
2020-08-01 00:33:34 +02:00
{
2020-08-01 01:28:29 +02:00
translate([x, drawer_size - lath_depth, z])
{
rotate([90, 0, 0])
{
lath(drawer_size - lath_depth * 2);
}
}
2020-08-01 00:33:34 +02:00
}
}
}
/* Bottoms */
2020-08-01 00:33:34 +02:00
color([0.2, 0.4, 0.2])
{
for (z = [
80, 80 + drawer_size + board_height,
2020-08-01 01:37:53 +02:00
80 + (drawer_size * 2) + (board_height * 2),
80 + (drawer_size * 3) + (board_height * 3),
80 + (drawer_size * 4) + (board_height * 4)
])
translate([lath_width, 0, z])
2020-08-01 01:28:29 +02:00
{
cube([drawer_size, drawer_size, board_height]);
2020-08-01 01:28:29 +02:00
}
2020-08-01 00:33:34 +02:00
}
}
2020-08-01 01:19:31 +02:00
shelf();
2020-08-01 00:33:34 +02:00
translate([lath_width, -10, 80 + board_height])
2020-08-01 00:33:34 +02:00
{
2020-08-01 01:19:31 +02:00
drawer();
2020-08-01 01:28:29 +02:00
translate([0, 0, drawer_size + board_height])
{
drawer();
}
2020-08-01 01:37:53 +02:00
translate([0, 0, (drawer_size * 2) + (board_height * 2)])
2020-08-01 01:28:29 +02:00
{
drawer();
}
2020-08-01 01:37:53 +02:00
translate([0, 0, (drawer_size * 3) + (board_height * 3)])
2020-08-01 01:28:29 +02:00
{
drawer();
}
2020-08-01 00:33:34 +02:00
}