$fn = 64; // --- Parameters --- card_width = 73; // 70mm card + 3mm clearance for Tarot size card_length = 123; // 120mm card + 3mm clearance tray_height = 40; // Internal depth of the tray wall = 2.5; // Sturdy wall thickness base = 2; // Base thickness inner_corner_r = 2.0; // Inner corner radius to protect card edges corner_r = inner_corner_r + wall; // Outer corner radius for uniform wall thickness // --- Derived Dimensions --- outer_w = card_width + (wall * 2); outer_l = card_length + (wall * 2); outer_h = tray_height + base; difference() { // Main Body with rounded corners hull() { for(x = [-1, 1], y = [-1, 1]) { translate([ x * (outer_w/2 - corner_r), y * (outer_l/2 - corner_r), 0 ]) cylinder(r=corner_r, h=outer_h); } } // Card Cavity with rounded corners hull() { for(x = [-1, 1], y = [-1, 1]) { translate([ x * (card_width/2 - inner_corner_r), y * (card_length/2 - inner_corner_r), base ]) cylinder(r=inner_corner_r, h=outer_h + 1); } } // Long-edge finger cutouts (Left & Right walls for easy grabbing) hull() { translate([0, 0, base + 25]) rotate([0, 90, 0]) cylinder(r=25, h=outer_w + 2, center=true); translate([0, 0, outer_h + 25]) rotate([0, 90, 0]) cylinder(r=25, h=outer_w + 2, center=true); } // Short-edge finger cutouts (Front & Back walls for easy tilting) hull() { translate([0, 0, base + 20]) rotate([90, 0, 0]) cylinder(r=20, h=outer_l + 2, center=true); translate([0, 0, outer_h + 20]) rotate([90, 0, 0]) cylinder(r=20, h=outer_l + 2, center=true); } }