$fn = 64; // --- Parameters --- riser_height = 75; // Total height of the riser body base_size = 40; // Width/Depth of the top and bottom platforms base_thickness = 5; // Thickness of the solid top/bottom platforms transition_height = 10; // Height of the chamfered overhangs (for 3D printability) pillar_size = 20; // Width/Depth of the central support pillar peg_spacing = 24; // Distance between interlocking pegs peg_diameter = 4.0; // Diameter of the top pegs peg_height = 4.0; // Height of the top pegs clearance = 0.4; // Tolerance for the bottom sockets // --- Main Module --- module figure_stage_riser() { difference() { union() { // Bottom Base translate([0, 0, base_thickness / 2]) cube([base_size, base_size, base_thickness], center=true); // Bottom Chamfered Transition (Printable without supports) hull() { translate([0, 0, base_thickness - 0.05]) cube([base_size, base_size, 0.1], center=true); translate([0, 0, base_thickness + transition_height]) cube([pillar_size, pillar_size, 0.1], center=true); } // Central Pillar translate([0, 0, riser_height / 2]) cube([pillar_size, pillar_size, riser_height - 2*base_thickness - 2*transition_height + 0.2], center=true); // Top Chamfered Transition hull() { translate([0, 0, riser_height - base_thickness - transition_height]) cube([pillar_size, pillar_size, 0.1], center=true); translate([0, 0, riser_height - base_thickness + 0.05]) cube([base_size, base_size, 0.1], center=true); } // Top Base translate([0, 0, riser_height - base_thickness / 2]) cube([base_size, base_size, base_thickness], center=true); // Top Interlocking Pegs for(x = [-1, 1], y = [-1, 1]) { translate([x * peg_spacing/2, y * peg_spacing/2, riser_height]) cylinder(h=peg_height, d=peg_diameter); } } // Bottom Interlocking Sockets for(x = [-1, 1], y = [-1, 1]) { translate([x * peg_spacing/2, y * peg_spacing/2, -1]) cylinder(h=peg_height + 1.5, d=peg_diameter + clearance); } } } // --- Render --- figure_stage_riser();