Pantheon Benchmark: Claude Code 2.1 / Sonnet 4.6
by Mach3 ·
Client: Claude Code 2.1.146
LLM: Sonnet 4.6
Interactive Preview & Customizer
3D preview with browser-based OpenSCAD rendering on parameter changes.
Loading preview...
step 0.5
=== Rotunda drum ===
step 0.5
step 0.1
step 0.5
step 0.1
step 0.1
step 0.1
=== Portico ===
step 0.1
step 0.1
step 0.1
step 0.1
step 0.1
step 0.1
step 0.1
=== Connection block ===
step 0.5
step 0.1
=== Steps ===
step 0.1
step 0.1
step 0.1
Entrance door in drum face (where connection block meets rotunda)
step 0.1
step 0.1
WASM compiler loads on first parameter change.
Prompt Assets
Prompt image
Prompt
See two ref images and build .scad file with openscad implementation of pantheon. use openscad CLI (available) to preview your work (by rendering openscad model to .png) and iterate until you are happy with the result.
OpenSCAD Code
// Pantheon - OpenSCAD Model v4
// Scale: 1 unit ≈ 1m
$fn = 128;
// === Rotunda drum ===
outer_r = 28;
wall_t = 6;
inner_r = outer_r - wall_t; // 22
drum_h = 22;
// === Dome (oblate spheroid exterior) ===
dome_a = outer_r; // horizontal semi-axis
dome_b = drum_h; // vertical semi-axis → dome height ≈ drum height
oculus_r = 4.0;
t_top = acos(oculus_r / dome_a); // ≈ 81.8°
n_rings = 7;
cornice_h = 1.5; // drum cornice ring height
// === Portico ===
col_r = 0.75;
col_h = 13.5;
n_fc = 8;
col_ws = 4.25;
col_ds = 4.5;
ent_h = 2.8;
ped_h = 5.0;
// === Connection block ===
conn_w = 21.0;
conn_d = 7.5;
// === Steps ===
sn = 3;
sh = 0.65;
sr = 1.4;
// ============================================================
// Derived values
// ============================================================
row3_y = -(outer_r + conn_d);
row2_y = row3_y - col_ds;
row1_y = row2_y - col_ds;
plat_h = sn * sh; // 1.95
col_top_z = plat_h + 0.45 + col_h + 1.6; // top of column assembly ≈ 17.5
ent_top_z = col_top_z + ent_h; // top of entablature ≈ 20.3
portico_w = (n_fc - 1) * col_ws + col_r * 5;
portico_d = abs(row1_y) - outer_r - conn_d + col_r + 0.5;
front_y = row1_y - col_r - 0.5;
// Entrance door in drum face (where connection block meets rotunda)
door_w = 8.0;
door_h = 12.0;
function cx(i) = (i - (n_fc - 1) / 2.0) * col_ws;
// ============================================================
// Modules
// ============================================================
module single_column() {
// Plinth
cylinder(h = 0.45, r = col_r + 0.28, $fn = 32);
// Tapered shaft
translate([0, 0, 0.45])
cylinder(h = col_h, r1 = col_r, r2 = col_r * 0.87, $fn = 32);
// Capital neck
translate([0, 0, 0.45 + col_h])
cylinder(h = 0.6, r1 = col_r * 0.87, r2 = col_r * 0.92, $fn = 32);
// Capital abacus flare
translate([0, 0, 0.45 + col_h + 0.6])
cylinder(h = 0.55, r1 = col_r * 0.92, r2 = col_r + 0.52, $fn = 32);
}
module drum() {
difference() {
union() {
// Main cylindrical wall
cylinder(h = drum_h, r = outer_r);
// 5 structural buttresses: sides + back (skip front ±45° sector)
butt_w = 7.5;
butt_d = 2.0;
for (ang = [90, 135, 180, 225, 270]) {
rotate([0, 0, ang])
translate([outer_r, -butt_w / 2, 0])
cube([butt_d, butt_w, drum_h]);
}
}
// Hollow interior
translate([0, 0, -0.5])
cylinder(h = drum_h + 1, r = inner_r);
// Entrance doorway cut (front face)
translate([-door_w / 2, -(outer_r + 0.1), 0])
cube([door_w, wall_t + 0.2, door_h]);
}
// Upper cornice ring at top of drum
translate([0, 0, drum_h])
difference() {
cylinder(h = cornice_h, r = outer_r + 1.5);
translate([0, 0, -0.5])
cylinder(h = cornice_h + 1, r = outer_r - 0.5);
}
// Mid-drum cornice band (divides lower and upper drum zones)
mid_z = drum_h * 0.47;
translate([0, 0, mid_z])
difference() {
cylinder(h = 1.0, r = outer_r + 0.9);
translate([0, 0, -0.5])
cylinder(h = 2.1, r = outer_r - 0.4);
}
// Low base podium ring
translate([0, 0, -1.5])
difference() {
cylinder(h = 1.5, r = outer_r + 2.5);
translate([0, 0, -0.5])
cylinder(h = 2.6, r = outer_r - 1.0);
}
}
module dome() {
translate([0, 0, drum_h + cornice_h]) {
difference() {
union() {
// Oblate-spheroid stepped exterior
for (i = [0 : n_rings - 1]) {
t1 = i * t_top / n_rings;
t2 = (i + 1) * t_top / n_rings;
r = dome_a * cos(t1);
h1 = dome_b * sin(t1);
h2 = dome_b * sin(t2);
translate([0, 0, h1])
cylinder(h = h2 - h1, r = r);
}
}
// Hollow interior — hemisphere
translate([0, 0, -1.0])
sphere(r = inner_r + 0.6);
// Oculus opening
h_oc = dome_b * sin(t_top) - 0.6;
translate([0, 0, h_oc])
cylinder(h = dome_b + 2, r = oculus_r);
// Clean below base
translate([0, 0, -(dome_b * 3)])
cylinder(h = dome_b * 3, r = dome_a * 3);
}
// Oculus collar ring
h_oc = dome_b * sin(t_top) - 0.4;
translate([0, 0, h_oc])
difference() {
cylinder(h = 1.5, r = oculus_r + 1.8);
translate([0, 0, -0.5])
cylinder(h = 3.0, r = oculus_r);
}
}
}
module connection_block() {
// Solid rectangular body connecting portico to rotunda.
conn_h = ent_top_z;
difference() {
union() {
translate([-conn_w / 2, -(outer_r + conn_d), 0])
cube([conn_w, conn_d, conn_h]);
// Matching cornice on top
translate([-conn_w / 2 - 1.0, -(outer_r + conn_d), conn_h])
cube([conn_w + 2.0, conn_d, 0.8]);
}
// Entrance doorway cut through connection block front face
translate([-door_w / 2, -(outer_r + conn_d) - 0.1, 0])
cube([door_w, conn_d + 0.2, door_h]);
}
}
module portico_platform() {
translate([-portico_w / 2, front_y, 0])
cube([portico_w, portico_d, plat_h]);
}
module steps() {
for (s = [0 : sn - 1]) {
depth = (sn - s) * sr;
w = portico_w + (sn - s) * sr * 2.6;
h = (sn - s) * sh;
translate([-w / 2, front_y - depth, 0])
cube([w, depth + 0.01, h]);
}
}
module entablature() {
// Beam spanning full portico width and depth
translate([-portico_w / 2, front_y, col_top_z])
cube([portico_w, portico_d, ent_h]);
// Wrap over connection block front face (thin fascia)
translate([-conn_w / 2, row3_y, col_top_z])
cube([conn_w, conn_d, ent_h]);
}
module pediment() {
// rotate([90,0,0]) makes polygon-Y → world+Z, extrusion-Z → world-Y
translate([0, front_y + portico_d, ent_top_z])
rotate([90, 0, 0])
linear_extrude(height = portico_d)
polygon([
[-portico_w / 2, 0],
[ portico_w / 2, 0],
[0, ped_h]
]);
}
module portico_columns() {
translate([0, 0, plat_h]) {
// Row 1 — front: all 8 columns
for (i = [0 : n_fc - 1])
translate([cx(i), row1_y, 0]) single_column();
// Row 2 — outer 4 + two framing central doorway
for (i = [0, 1, n_fc - 2, n_fc - 1])
translate([cx(i), row2_y, 0]) single_column();
translate([cx(2), row2_y, 0]) single_column();
translate([cx(n_fc-3), row2_y, 0]) single_column();
// Row 3 — outer 2 + inner pair at doorway
translate([cx(0), row3_y, 0]) single_column();
translate([cx(n_fc-1), row3_y, 0]) single_column();
translate([cx(2), row3_y, 0]) single_column();
translate([cx(n_fc-3), row3_y, 0]) single_column();
}
}
// ============================================================
// Assembly
// ============================================================
color([0.82, 0.79, 0.72]) {
drum();
dome();
connection_block();
portico_platform();
steps();
entablature();
pediment();
portico_columns();
}