$fn=64; // Parameters rows = 4; // Number of rows cols = 6; // Number of columns hole_diameter = 16; // Diameter of the marker holes (16mm fits most standard markers) wall_thickness = 2; // Thickness of walls between holes and outer edge base_thickness = 2; // Thickness of the bottom base height = 60; // Total height of the organizer // Derived dimensions pitch = hole_diameter + wall_thickness; total_width = cols * pitch + wall_thickness; total_depth = rows * pitch + wall_thickness; difference() { // Main body cube([total_width, total_depth, height]); // Marker holes for (r = [0 : rows - 1]) { for (c = [0 : cols - 1]) { translate([ wall_thickness + hole_diameter/2 + c * pitch, wall_thickness + hole_diameter/2 + r * pitch, base_thickness ]) // Add 1 to height to ensure clean cut through the top without Z-fighting cylinder(h = height + 1, d = hole_diameter); } } }