$fn = 64; // --- Parameters --- // Stair Dimensions step_width = 150; // Total width of the display step_depth = 40; // Depth of each individual step step_height = 30; // Height of each individual step num_steps = 3; // Number of tiers // Shell & Print Settings wall_thickness = 2; // Thickness of the hollowed shell walls // Grid Connection System (Bottom Holes) grid_pitch = 30; // Distance between grid holes grid_offset_x = 15; // Starting X offset for grid grid_offset_y = 15; // Starting Y offset for grid hole_dia = 5.2; // Diameter of connection holes (5mm peg + clearance) hole_depth = 6; // Depth of the connection holes pillar_dia = 12; // Diameter of the reinforcing pillar around each hole // --- Main Geometry --- difference() { union() { // Main hollow stair body difference() { // 1. Solid outer stairs (with slight overlap to ensure manifold geometry) for(i = [0 : num_steps - 1]) { translate([0, i * step_depth - (i > 0 ? 0.01 : 0), 0]) cube([step_width, step_depth + (i > 0 ? 0.01 : 0), step_height * (i + 1)]); } // 2. Hollow out the inside to save filament and prevent warping for(i = [0 : num_steps - 1]) { y_start = (i == 0) ? wall_thickness : i * step_depth - 0.1; y_end = (i == num_steps - 1) ? num_steps * step_depth - wall_thickness : (i + 1) * step_depth + 0.1; y_len = y_end - y_start; translate([wall_thickness, y_start, -0.1]) cube([step_width - 2 * wall_thickness, y_len, step_height * (i + 1) - wall_thickness + 0.1]); } } // 3. Reinforcement pillars for grid connections for(x = [grid_offset_x : grid_pitch : step_width - 0.1]) { for(y = [grid_offset_y : grid_pitch : num_steps * step_depth - 0.1]) { translate([x, y, 0]) cylinder(h = hole_depth + 2, d = pillar_dia); } } } // 4. Subtract the connection holes from the bottom for(x = [grid_offset_x : grid_pitch : step_width - 0.1]) { for(y = [grid_offset_y : grid_pitch : num_steps * step_depth - 0.1]) { translate([x, y, -0.1]) cylinder(h = hole_depth + 0.1, d = hole_dia); } } }