$fn = 64; // --- Parameters --- width = 85; // Total width of the throne depth = 75; // Total depth back_height = 110; // Height of the backrest back_thick = 15; // Thickness of the backrest seat_height = 25; // Height of the seat base lip_thick = 12; // Thickness of the front lip lip_height = 15; // Height of the front lip above the seat arm_width = 12; // Width of each armrest arm_height = 50; // Height of the armrest pillar_thick = 15; // Depth of the front pillar pillar_extra = 8; // Extra height for the front pillar // --- Modules --- module center_profile() { polygon(points=[ [0, 0], [depth, 0], [depth, back_height], [depth - back_thick, back_height], [lip_thick, seat_height], [lip_thick, seat_height + lip_height], [0, seat_height + lip_height] ]); } module arm_profile() { polygon(points=[ [0, 0], [depth, 0], [depth, back_height], [depth - back_thick, back_height], [depth - back_thick, arm_height], [pillar_thick, arm_height], [pillar_thick, arm_height + pillar_extra], [0, arm_height + pillar_extra] ]); } module flute(h, d) { hull() { translate([0, 0, d/2]) sphere(d=d); translate([0, 0, h - d/2]) sphere(d=d); } } // --- Assembly --- difference() { union() { // Pedestal Base translate([-5, -5, 0]) cube([width + 10, depth + 10, 5]); translate([-2.5, -2.5, 5]) cube([width + 5, depth + 5, 3]); // Center Seat (Phone Rest) translate([arm_width, 0, 0]) rotate([90, 0, 90]) linear_extrude(height = width - 2*arm_width) center_profile(); // Left Armrest rotate([90, 0, 90]) linear_extrude(height = arm_width) arm_profile(); // Right Armrest translate([width - arm_width, 0, 0]) rotate([90, 0, 90]) linear_extrude(height = arm_width) arm_profile(); // Decorative Orbs on Armrests translate([arm_width/2, pillar_thick/2, arm_height + pillar_extra]) sphere(d=arm_width * 1.4); translate([width - arm_width/2, pillar_thick/2, arm_height + pillar_extra]) sphere(d=arm_width * 1.4); // Decorative Crown on Backrest translate([0, depth - back_thick/2, back_height]) rotate([0, 90, 0]) cylinder(h=width, d=back_thick); translate([width/2, depth - back_thick/2, back_height + 4]) sphere(d=back_thick * 1.5); translate([arm_width + 8, depth - back_thick/2, back_height + 2]) sphere(d=back_thick * 1.25); translate([width - arm_width - 8, depth - back_thick/2, back_height + 2]) sphere(d=back_thick * 1.25); } // Front arch cutout translate([width/2, 0, -4]) rotate([90, 0, 0]) scale([2.5, 1, 1]) cylinder(h=30, d=20, center=true); // Back arch cutout translate([width/2, depth, -4]) rotate([90, 0, 0]) scale([2.5, 1, 1]) cylinder(h=30, d=20, center=true); // Left arch cutout translate([0, depth/2, -4]) rotate([0, 90, 0]) scale([1, 2.5, 1]) cylinder(h=30, d=20, center=true); // Right arch cutout translate([width, depth/2, -4]) rotate([0, 90, 0]) scale([1, 2.5, 1]) cylinder(h=30, d=20, center=true); // Back fluting (vertical grooves) for(i = [1 : 4]) { translate([arm_width + i * (width - 2*arm_width)/5, depth, seat_height + 15]) flute(h=back_height - seat_height - 15, d=8); } // Front pillar fluting (Left) translate([arm_width/2, 0, 12]) flute(h=arm_height + pillar_extra - 20, d=5); // Front pillar fluting (Right) translate([width - arm_width/2, 0, 12]) flute(h=arm_height + pillar_extra - 20, d=5); }