en m'n altoids ding ook in git stoppen
This commit is contained in:
parent
725fc839f6
commit
1fa6600c5c
1 changed files with 243 additions and 0 deletions
243
Parametric_altoids_storage/Parametric_altoids_storage.scad
Normal file
243
Parametric_altoids_storage/Parametric_altoids_storage.scad
Normal file
|
|
@ -0,0 +1,243 @@
|
||||||
|
//------------------------------------------------------------
|
||||||
|
// Parametric altoids storage racks
|
||||||
|
//
|
||||||
|
// http://www.thingiverse.com/wardwouts
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//------------------------------------------------------------
|
||||||
|
|
||||||
|
// What type of storage do you want?
|
||||||
|
style = "fullwide"; // [full,fullwide, singleleft, singleright, middle]
|
||||||
|
|
||||||
|
// Number of tins to store
|
||||||
|
tins = 5;
|
||||||
|
|
||||||
|
// in the sides for easier tin grabbing?
|
||||||
|
cutouts = "yes"; // [yes,no]
|
||||||
|
|
||||||
|
screw_holes = "yes"; // [yes,no]
|
||||||
|
|
||||||
|
closed_ends = "no"; // [yes,no]
|
||||||
|
|
||||||
|
// For stacking multiple racks you may not want a bottom shelf
|
||||||
|
with_bottom_shelf = "yes"; // [yes,no]
|
||||||
|
|
||||||
|
// Side depth (how deep is a shelf in mm)
|
||||||
|
depth = 40;
|
||||||
|
|
||||||
|
// Side width (how wide is a shelf in mm)
|
||||||
|
width = 20;
|
||||||
|
|
||||||
|
wall_thickness = 2;
|
||||||
|
bottom_thickness = 1;
|
||||||
|
|
||||||
|
// Amount of play a tin should have at its sides
|
||||||
|
width_play = 0.5;
|
||||||
|
|
||||||
|
// Amount of play a tin should have between shelves
|
||||||
|
height_play = 0.5;
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////
|
||||||
|
// Some tin measurements; these shouldn't need editing
|
||||||
|
// Thickness of an altoids tin as measured
|
||||||
|
tin_thickness = 21.5;
|
||||||
|
// as measured
|
||||||
|
tin_width = 62;
|
||||||
|
// as measured
|
||||||
|
tin_length = 97.5;
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////
|
||||||
|
// Code starts here
|
||||||
|
|
||||||
|
wtn = wall_thickness;
|
||||||
|
btn = bottom_thickness;
|
||||||
|
|
||||||
|
// the sace betwee 2 shelves
|
||||||
|
spacing = tin_thickness + height_play;
|
||||||
|
|
||||||
|
tin_tot_width = tin_width + width_play;
|
||||||
|
tin_tot_length = tin_length + width_play;
|
||||||
|
|
||||||
|
length=tins*spacing + tins*wtn;
|
||||||
|
|
||||||
|
module base() {
|
||||||
|
// Draw the base wall thickness offset from origin
|
||||||
|
translate([0,wtn,0]){
|
||||||
|
if ( screw_holes == "yes"){
|
||||||
|
difference(){
|
||||||
|
cube([length,width,btn]);
|
||||||
|
union() {
|
||||||
|
translate([wtn+spacing/2,width/2,0]){
|
||||||
|
screw_hole();
|
||||||
|
}
|
||||||
|
translate([length - spacing/2,width/2,0]){
|
||||||
|
screw_hole();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cube([length,width,btn]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module side() {
|
||||||
|
if (cutouts == "yes") {
|
||||||
|
difference(){
|
||||||
|
cube([length,wtn,depth+btn]);
|
||||||
|
union(){
|
||||||
|
for (i = [0 : tins - 1]){
|
||||||
|
translate([wtn + (spacing/2) + (spacing+wtn)*i, -wtn, depth+btn]){
|
||||||
|
rotate([270,0,0]){
|
||||||
|
// if I aim for an exact cutout, some material remains,
|
||||||
|
// so cutout 3*wtn
|
||||||
|
cylinder(h=wtn*3,r=spacing/2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cube([length,wtn,depth+btn]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module shelf() {
|
||||||
|
// Draws a single shelf with one rounded corner
|
||||||
|
// To draw this it draws 2 rectangles and one cilinder like:
|
||||||
|
// +--+-
|
||||||
|
// | | \
|
||||||
|
// | |+-+
|
||||||
|
// +--++-+
|
||||||
|
// As the circle may get to big it cuts everything off at the surrouning rectangle
|
||||||
|
// Draw the base wall thickness and base thickness offset from origin
|
||||||
|
translate([0,wtn,btn]){
|
||||||
|
intersection() {
|
||||||
|
cube([wtn,width,depth]);
|
||||||
|
union() {
|
||||||
|
translate([0,width/2,depth-width/2]){
|
||||||
|
rotate([0,90,0]){
|
||||||
|
cylinder(h=wtn, r=width/2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cube([wtn,width/2,depth]);
|
||||||
|
translate([0,width/2,0]){
|
||||||
|
cube([wtn,width/2,depth-width/2]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module shelves() {
|
||||||
|
// Draw the same number of shelves as there are tins
|
||||||
|
// If with_bottom_shelf was chosen, draw one more
|
||||||
|
for (i = [0 : tins - 1]){
|
||||||
|
translate([(spacing+wtn)*i,0,0]){
|
||||||
|
shelf();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (with_bottom_shelf == "yes"){
|
||||||
|
translate([length,0,0]){
|
||||||
|
shelf();
|
||||||
|
// the end tray needs a bit more side and base too
|
||||||
|
cube([wtn,wtn,btn+depth]);
|
||||||
|
cube([wtn,width+wtn,btn]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module spacer() {
|
||||||
|
// If a full rack was chosen we need material to hold the two sides together
|
||||||
|
// this module draws that bit
|
||||||
|
if (style == "full" || style == "fullwide") {
|
||||||
|
if (style == "full") {
|
||||||
|
translate([0,width+wtn,0]){
|
||||||
|
if (with_bottom_shelf == "yes"){
|
||||||
|
cube([length + wtn, tin_tot_width/2 - width, btn]);
|
||||||
|
} else {
|
||||||
|
cube([length, tin_tot_width/2 - width, btn]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
translate([0,width+wtn,0]){
|
||||||
|
if (with_bottom_shelf == "yes"){
|
||||||
|
cube([length + wtn, tin_tot_length/2 - width, btn]);
|
||||||
|
} else {
|
||||||
|
cube([length, tin_tot_length/2 - width, btn]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module ends() {
|
||||||
|
// It can be nice to have closed top and bottom shelves
|
||||||
|
// If closed_ends have been chosen, fill up the ends
|
||||||
|
if (closed_ends == "yes"){
|
||||||
|
if (style == "full") {
|
||||||
|
cube([wtn, tin_tot_width/2+wtn, depth+btn]);
|
||||||
|
} else if (style == "fullwide") {
|
||||||
|
cube([wtn, tin_tot_length/2+wtn, depth+btn]);
|
||||||
|
}
|
||||||
|
if (with_bottom_shelf == "yes"){
|
||||||
|
translate([length,0,0]){
|
||||||
|
if (style == "full") {
|
||||||
|
cube([wtn, tin_tot_width/2+wtn, depth+btn]);
|
||||||
|
} else if (style == "fullwide") {
|
||||||
|
cube([wtn, tin_tot_length/2+wtn, depth+btn]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module screw_hole() {
|
||||||
|
// screw head that I measured maxes at 7mm
|
||||||
|
// screw thread is 3.5 mm
|
||||||
|
head = 7;
|
||||||
|
thread = 3.5 + 0.5;
|
||||||
|
|
||||||
|
translate([0,0,-20]){
|
||||||
|
cylinder(h=30, r=thread/2, $fn=20);
|
||||||
|
}
|
||||||
|
translate([0,0,btn-(thread/2)]){
|
||||||
|
cylinder(h=head-(thread/2), r1=thread/2, r2=head);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module rack() {
|
||||||
|
base();
|
||||||
|
side();
|
||||||
|
shelves();
|
||||||
|
spacer();
|
||||||
|
ends();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (style == "singleright"){
|
||||||
|
mirror([0,1,0]){
|
||||||
|
rack();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
rack();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (style == "full") {
|
||||||
|
translate([0, tin_tot_width+2*wtn,0]){
|
||||||
|
mirror([0,1,0]){
|
||||||
|
rack();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (style == "fullwide") {
|
||||||
|
translate([0, tin_tot_length+2*wtn,0]){
|
||||||
|
mirror([0,1,0]){
|
||||||
|
rack();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (style == "middle") {
|
||||||
|
translate([0, wtn, 0]){
|
||||||
|
mirror([0,1,0]){
|
||||||
|
rack();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue