$fn=64; // Riser dimensions width = 50; depth = 50; height = 50; wall_thickness = 3; // Interlock dimensions peg_radius = 2.4; peg_height = 3.5; hole_radius = 2.6; hole_depth = 4; peg_offset = 16; pillar_radius = 7; // Arch cutout module for material savings and aesthetics module arch_cutout(w, h, t) { union() { translate([-w/2, -t/2, -1]) cube([w, t, h - w/2 + 1]); translate([0, -t/2, h - w/2]) rotate([-90, 0, 0]) cylinder(r=w/2, h=t); } } module figure_stage_riser() { union() { // Main body and cutouts difference() { // Outer shell translate([-width/2, -depth/2, 0]) cube([width, depth, height]); // Inner cavity translate([-(width-wall_thickness*2)/2, -(depth-wall_thickness*2)/2, -0.1]) cube([width-wall_thickness*2, depth-wall_thickness*2, height-wall_thickness+0.1]); // Side arch cutouts arch_cutout(16, 38, depth + 2); rotate([0, 0, 90]) arch_cutout(16, 38, width + 2); } // Corner pillars with bottom interlocking holes for(x = [-peg_offset, peg_offset]) { for(y = [-peg_offset, peg_offset]) { difference() { translate([x, y, 0]) cylinder(r=pillar_radius, h=height-wall_thickness); // Main hole translate([x, y, -0.1]) cylinder(r=hole_radius, h=hole_depth+0.1); // Bottom chamfer to accommodate elephant foot and peg fillet translate([x, y, -0.1]) cylinder(r1=hole_radius+0.8, r2=hole_radius, h=0.8); } } } // Top interlocking pegs for(x = [-peg_offset, peg_offset]) { for(y = [-peg_offset, peg_offset]) { // Main peg translate([x, y, height]) cylinder(r=peg_radius, h=peg_height); // Base fillet for peg strength translate([x, y, height]) cylinder(r1=peg_radius+0.6, r2=peg_radius, h=0.6); } } } } figure_stage_riser();