← Back to Models
Pantheon Benchmark: Claude Code 2.1 / Sonnet 4.6

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 previewLoading 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.
Download current STL

Prompt Assets

Prompt image

Prompt reference 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();
}