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