openscad-models/recipebox.scad

83 lines
2.1 KiB
OpenSCAD

inch=25.4; // treating 1 unit as 1 mm
module box(size=[1, 1, 1], wall) {
innerWidth=size.x;
innerHeight=size.y;
innerDepth=size.z;
outerWidth=innerWidth+wall;
outerHeight=innerHeight+wall+1;
outerDepth=innerDepth+wall;
difference() {
cube([outerWidth, outerDepth, outerHeight],
center=true);
translate([0, 0, wall]) {
cube([innerWidth, innerDepth, innerHeight+0.001],
center=true);
}
}
// ribs
for (i = [ -innerDepth/2+2 : 5 : innerDepth/2 ]) {
translate([innerWidth/2, i, 0]) {
cube([2, 1, innerHeight-10], center=true);
}
translate([-innerWidth/2, i, 0]) {
cube([2, 1, innerHeight-10], center=true);
}
translate([0, i, -innerHeight/2+3]) {
cube([innerWidth-5, 1, 1], center=true);
}
}
}
module cutBox(size=[1,1,1], wall) {
width=size.x;
height=size.y;
depth=size.z;
difference(){
// define box
box([width, height, depth], wall);
// slice off top
translate([0,-15,1.5*inch]) {
rotate([15,0,0]) {
cube([width+wall*2,height*2,depth], center=true);
}
}
}
}
module pattern(size=[1,1,1], squareSize, ribSize) {
width=size.x;
height=size.y;
depth=size.z;
for (i = [ -width/2 : squareSize+ribSize : width/2 ]) {
for (j = [ -depth/2 : squareSize+ribSize : depth/2 ]) {
translate([i, 0, j]) {
cube([squareSize, height, squareSize], center=true);
}
}
}
}
width=5.05*inch;
height=3*inch;
depth=2*inch;
wallThickness=3;
patternMargin=0.10*inch;
difference() {
cutBox([width, height, depth], wallThickness);
translate([0,-depth/2-.05, -inch/1.6]) {
intersection() {
cube([width-patternMargin*2-1.5, wallThickness, height-patternMargin*2-inch*1.5],
center=true);
rotate([0,45,0]) {
pattern([200, wallThickness+.05, 200], 10, 5);
}
}
}
}