$fn=64; // --- Parameters --- // A5 paper width is 148mm. 152mm allows for a rigid acrylic sleeve or laminated card. insert_width = 152; insert_thickness = 3.5; slot_depth = 25; base_width = 170; base_depth = 55; base_height = 35; corner_radius = 5; // --- Modules --- module rounded_rect(w, d, h, r) { hull() { for(x = [-w/2+r, w/2-r]) { for(y = [-d/2+r, d/2-r]) { translate([x, y, 0]) cylinder(r=r, h=h); } } } } // --- Main Geometry --- difference() { // Main base body with a tapered profile for stability hull() { // Bottom footprint rounded_rect(base_width, base_depth, 2, corner_radius); // Top profile (narrower for a sleek look) translate([0, 0, base_height - 2]) rounded_rect(base_width - 10, base_depth - 25, 2, corner_radius); } // Vertical slot for the A5 insert // Extended 1mm upwards to prevent Z-fighting and ensure a manifold cut translate([-insert_width/2, -insert_thickness/2, base_height - slot_depth]) cube([insert_width, insert_thickness, slot_depth + 1]); }