Pantheon Benchmark: Claude Code 2.1 / Opus 4.7
by Mach3 ·
Client: Claude Code 2.1.146
LLM: Opus 4.7
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.5
Dome
step 0.5
step 0.5
step 0.1
step 0.1
Portico (in front of rotunda, on -Y side)
step 0.5
step 0.1
step 0.1
step 0.1
step 0.1
step 0.1
Connecting block ("intermediate block" cella front between portico and rotunda)
step 0.5
step 0.1
step 0.1
Columns
step 0.1
step 0.1
step 0.1
step 0.1
step 0.1
step 0.1
Front steps
step 0.1
step 0.1
step 0.1
WASM compiler loads on first parameter change.
Prompt
Create a cube with a hole on every face.
OpenSCAD Code
// Pantheon of Rome - OpenSCAD model
// Approximate proportions based on the real building (units ~ meters).
//
// +Y ........ back (apse end of rotunda)
// -Y ........ front (portico faces -Y)
// +Z ........ up
$fn = 96;
// ============================================================
// Master dimensions
// ============================================================
// Rotunda (drum)
rotunda_r = 26; // outer radius
rotunda_h = 22; // drum height
// Dome
dome_outer_r = 26;
dome_inner_r = 21.5;
oculus_r = 4.2;
dome_step_count = 7; // number of horizontal step rings on lower part
// Portico (in front of rotunda, on -Y side)
portico_w = 34; // width along X
portico_d = 15.5; // depth along Y
portico_floor_h = 1.7;
entab_h = 3.2; // entablature
pediment_h = 6.2;
pediment_thk = 2.4; // pediment depth (Y)
// Connecting block ("intermediate block" cella front between portico and rotunda)
inter_w = 26;
inter_d = 6;
inter_h_extra = 4; // height above pediment apex base (down to drum top region)
// Columns
col_h = 12.5;
col_r = 0.9;
col_base_h = 0.45;
col_cap_h = 1.0;
n_front_cols = 8;
front_col_xinset = 1.6; // inset of outer columns from portico edge
// Front steps
step_count = 3;
step_h = 0.25;
step_run = 0.7;
// Where does the front face of the rotunda sit?
rotunda_front_y = -rotunda_r; // = -26
portico_back_y = rotunda_front_y + 0.6; // overlap slightly into rotunda
portico_front_y = rotunda_front_y - portico_d; // = -41.5
// ============================================================
// Modules
// ============================================================
// Corinthian-ish column: base + tapered shaft (entasis) + flared capital + abacus
module column(h = col_h, r = col_r) {
// Plinth (square base)
translate([-r * 1.5, -r * 1.5, 0])
cube([r * 3, r * 3, col_base_h * 0.35]);
// Torus-like base ring
translate([0, 0, col_base_h * 0.35])
cylinder(h = col_base_h * 0.65, r1 = r * 1.35, r2 = r * 1.10);
// Shaft with slight entasis (slight taper)
translate([0, 0, col_base_h])
cylinder(h = h, r1 = r * 1.02, r2 = r * 0.88);
// Capital - lower bell, upper flare, square abacus
translate([0, 0, col_base_h + h]) {
// bell (the acanthus area, approximated)
cylinder(h = col_cap_h * 0.50, r1 = r * 0.88, r2 = r * 1.15);
// upper flare
translate([0, 0, col_cap_h * 0.50])
cylinder(h = col_cap_h * 0.25, r1 = r * 1.15, r2 = r * 1.30);
// abacus (square block on top)
translate([-r * 1.40, -r * 1.40, col_cap_h * 0.75])
cube([r * 2.80, r * 2.80, col_cap_h * 0.25]);
}
}
// Front steps - climb up to the stylobate (portico floor)
module front_steps() {
// Number of climbing steps & layout
n = 5;
riser = portico_floor_h / n; // each step's height
tread = 0.55;
sw = portico_w + 5;
// Bottom step is the widest and extends furthest out
for (i = [0 : n - 1]) {
depth = (n - i) * tread + 0.5; // outermost is largest
width = sw - i * 0.6; // slight inset each step up
translate([-width/2,
portico_front_y - depth,
i * riser])
cube([width, depth, riser + 0.01]);
}
}
// Cylindrical drum (rotunda body)
module rotunda_drum() {
// Main drum
cylinder(h = rotunda_h, r = rotunda_r);
// Two horizontal cornice bands (the real Pantheon has two)
band(rotunda_h * 0.45, 0.4, 0.18);
band(rotunda_h - 0.5, 0.55, 0.25);
}
module band(z, h, overhang) {
translate([0, 0, z])
cylinder(h = h, r = rotunda_r + overhang);
}
// Stepped exterior dome with oculus
module dome() {
translate([0, 0, rotunda_h]) {
difference() {
union() {
// Lower stepped section (about 55% of dome height)
stepped_h_frac = 0.55;
stepped_top_z = stepped_h_frac * dome_outer_r;
for (i = [0 : dome_step_count - 1]) {
f0 = i / dome_step_count * stepped_h_frac;
f1 = (i + 1) / dome_step_count * stepped_h_frac;
r0 = sqrt(max(0, 1 - f0 * f0)) * dome_outer_r;
r1 = sqrt(max(0, 1 - f1 * f1)) * dome_outer_r;
z0 = f0 * dome_outer_r;
z1 = f1 * dome_outer_r;
// Flat lip (horizontal step) + sloped riser between rings
lip_h = (z1 - z0) * 0.55;
rise_h = (z1 - z0) * 0.45;
translate([0, 0, z0]) {
// Horizontal lip - flat cylinder at radius r0
cylinder(h = lip_h, r = r0);
// Sloped riser bringing it up to next ring's radius
translate([0, 0, lip_h])
cylinder(h = rise_h, r1 = r0, r2 = r1);
}
}
// Smooth upper cap above the stepped section
intersection() {
sphere(r = dome_outer_r);
translate([0, 0, stepped_top_z])
cylinder(h = dome_outer_r, r = dome_outer_r);
}
}
// Oculus
translate([0, 0, dome_outer_r - 1.5])
cylinder(h = 5, r = oculus_r);
// Hollow the dome (interior sphere)
sphere(r = dome_inner_r);
}
}
}
// Portico: floor (stylobate), columns, entablature, pediment, back cella wall
module portico() {
floor_top_z = portico_floor_h;
col_total_h = col_base_h + col_h + col_cap_h;
col_top_z = floor_top_z + col_total_h;
// Stylobate (raised floor)
translate([-portico_w/2, portico_front_y, 0])
cube([portico_w, portico_d, portico_floor_h]);
// Column X positions (8 across front)
inset = front_col_xinset;
x_step = (portico_w - 2 * inset) / (n_front_cols - 1);
// Y positions for three rows of columns
y_front = portico_front_y + 1.6;
y_mid = portico_front_y + 6.0;
y_back = portico_front_y + 10.5;
// Front row: all 8 columns
for (i = [0 : n_front_cols - 1]) {
x = -portico_w/2 + inset + i * x_step;
translate([x, y_front, floor_top_z]) column();
}
// Middle row: 4 columns at outer positions (creates 3 aisles)
mid_idx = [0, 2, 5, 7];
for (i = mid_idx) {
x = -portico_w/2 + inset + i * x_step;
translate([x, y_mid, floor_top_z]) column();
}
// Back row: same positions as middle row
for (i = mid_idx) {
x = -portico_w/2 + inset + i * x_step;
translate([x, y_back, floor_top_z]) column();
}
// Entablature - three horizontal bands (architrave, frieze, cornice)
ent_y0 = portico_front_y - 0.3;
ent_y1 = y_back + 1.6;
ew = portico_w + 0.8;
ed = ent_y1 - ent_y0;
// Architrave (bottom band)
translate([-ew/2, ent_y0, col_top_z])
cube([ew, ed, entab_h * 0.35]);
// Frieze (middle, slightly recessed)
translate([-ew/2 + 0.15, ent_y0 + 0.15, col_top_z + entab_h * 0.35])
cube([ew - 0.3, ed - 0.3, entab_h * 0.35]);
// Cornice (top, slightly overhanging)
translate([-ew/2 - 0.3, ent_y0 - 0.3, col_top_z + entab_h * 0.7])
cube([ew + 0.6, ed + 0.3, entab_h * 0.3]);
// Triangular pediment - on the front face only
pediment_z0 = col_top_z + entab_h;
translate([0, ent_y0, pediment_z0])
rotate([90, 0, 0])
linear_extrude(height = pediment_thk)
polygon(points = [
[-portico_w/2 - 0.6, 0],
[ portico_w/2 + 0.6, 0],
[ 0, pediment_h]
]);
// Cella wall (back of portico, against rotunda) with door opening
cella_w = portico_w - 6;
cella_h = col_total_h + entab_h - 0.4;
cella_y = y_back + 1.2;
cella_thk = 1.6;
door_w = 4.0;
door_h = 9.0;
difference() {
translate([-cella_w/2, cella_y, floor_top_z])
cube([cella_w, cella_thk, cella_h]);
// Door opening
translate([-door_w/2, cella_y - 0.1, floor_top_z + 0.0])
cube([door_w, cella_thk + 0.2, door_h]);
}
// Door lintel inset
translate([-door_w/2 - 0.3, cella_y + 0.2, floor_top_z + door_h])
cube([door_w + 0.6, cella_thk - 0.4, 0.4]);
}
// Intermediate block (taller cella section between pediment and rotunda)
module intermediate_block() {
// Top of pediment apex z:
apex_z = portico_floor_h + col_base_h + col_h + col_cap_h + entab_h + pediment_h;
// The intermediate block should rise to about apex level, slightly behind pediment
h = apex_z - 0.5; // sits on ground
translate([-inter_w/2,
portico_back_y - inter_d * 0.4,
0])
cube([inter_w, inter_d, h]);
}
// ============================================================
// Assembly
// ============================================================
module pantheon() {
union() {
rotunda_drum();
dome();
intermediate_block();
portico();
front_steps();
}
}
pantheon();