$fn=64; // --- Parameters --- card_width = 70; card_length = 120; tolerance = 4; // Extra space for sleeves and easy insertion wall_thickness = 2.5; // Sturdy walls for 3D printing bottom_thickness = 2; tray_height = 40; // Capacity height of the card stack finger_cutout_radius = 25; // Size of the side grab cutouts // --- Calculated Dimensions --- int_w = card_width + tolerance; int_l = card_length + tolerance; out_w = int_w + (wall_thickness * 2); out_l = int_l + (wall_thickness * 2); out_h = tray_height + bottom_thickness; // --- Model --- difference() { // Outer shell translate([-out_w/2, -out_l/2, 0]) cube([out_w, out_l, out_h]); // Inner cavity translate([-int_w/2, -int_l/2, bottom_thickness]) cube([int_w, int_l, tray_height + 1]); // Side finger cutouts (Left & Right) // Placed slightly below the top edge to expose more of the card sides translate([0, 0, out_h - 5]) rotate([0, 90, 0]) cylinder(h=out_w + 2, r=finger_cutout_radius, center=true); // Bottom push hole (helps remove the last few cards and saves filament) translate([0, 0, -1]) cylinder(h=bottom_thickness + 2, r=25); }