scad/mtgbox.scad

84 lines
1.8 KiB
OpenSCAD

render_box=true;
render_divider=false;
render_lid=false;
mtg_deck_height = 3 * 25.4; // 3", sleeved, card + paper proxy
hollow_w = 95; // cards are 92 in sleeves
hollow_h = 70; // cards are 62 in sleeves
n_decks = 3;
wall_thickness = 5;
divider_depth = 2;
divider_epsilon = 1;
module divider() {
cube([hollow_w + 2*divider_epsilon, divider_depth, hollow_h+wall_thickness]);
}
module magnet() {
cylinder(h=1, d=3, $fn=100);
}
module box_magnets() {
translate([outer_w-3,3,outer_h-1+0.0001]) {
#magnet();
}
translate([outer_w-3,outer_d-3,outer_h-1+0.0001]) {
#magnet();
}
translate([3,3,outer_h-1+0.0001]) {
#magnet();
}
translate([3,outer_d-3,outer_h-1+0.0001]) {
#magnet();
}
}
internal_space_w = hollow_w;
internal_space_depth = mtg_deck_height * n_decks;
if (n_decks > 1) {
internal_space_depth = internal_space_depth + divider_depth * (n_decks-1);
}
internal_space_height = hollow_h;
outer_w = internal_space_w + 2*wall_thickness;
outer_d = internal_space_depth + 2*wall_thickness;
outer_h = internal_space_height + 2*wall_thickness;
dividers = n_decks - 1;
module box() {
difference() {
cube([outer_w, outer_d, outer_h]);
translate([wall_thickness, wall_thickness, wall_thickness]) {
cube([internal_space_w, internal_space_depth, internal_space_height+wall_thickness+.01]);
};
for(div_n = [1 : dividers]) {
translate([wall_thickness - divider_epsilon, wall_thickness +div_n*mtg_deck_height + divider_depth/2, wall_thickness]) {
#divider();
};
}
box_magnets();
};
}
module lid() {
difference() {
cube([outer_w, outer_d, wall_thickness]);
translate([0, 0, -outer_h+wall_thickness]) {
box_magnets();
};
}
}
if (render_box) {
box();
}
if (render_lid) {
lid();
}
if (render_divider) {
divider();
}