$fn=64; // --- Parameters --- // Overall Dimensions holder_width = 85; holder_depth = 35; holder_height = 65; wall_thickness = 4; // Utility Knife Slot uk_width = 35; uk_depth = 18; // X-Acto Knife Slots xacto_dia = 14; xacto_count = 2; xacto_spacing = 20; // ArtArsenal / Wall Rail Mount (French Cleat style) cleat_depth = 6; cleat_height = 15; // --- Geometry --- union() { // Main Body difference() { // Base Block cube([holder_width, holder_depth, holder_height]); // Utility Knife Cutout (Deep slot for protection) translate([wall_thickness, wall_thickness, wall_thickness]) cube([uk_width, uk_depth, holder_height]); // X-Acto Knife Cutouts (Round holes for safe blade storage) for(i = [0 : xacto_count - 1]) { translate([ wall_thickness * 2 + uk_width + xacto_dia/2 + (i * xacto_spacing), holder_depth / 2 - 2, wall_thickness ]) cylinder(h=holder_height, d=xacto_dia); } // Easy-Access Front Chamfer (Sloped cut for easier grabbing) translate([-1, -10, holder_height - 15]) rotate([-30, 0, 0]) cube([holder_width + 2, holder_depth + 20, 50]); } // Rail Mount (Back) translate([0, holder_depth - 0.1, holder_height - cleat_height]) rotate([90, 0, 90]) linear_extrude(holder_width) polygon([ [0, 0], [cleat_depth, cleat_depth], [cleat_depth, cleat_height], [0, cleat_height] ]); }