← Back to Models
Pantheon Benchmark: Cursor 3.5 / Composer 2.5

Pantheon Benchmark: Cursor 3.5 / Composer 2.5

by Mach3 ·

Client: Cursor v3.5.17
LLM: Composer v2.5
additional .curorrules file:
"do not scan any folders other than current folder!" (to avoid Cursor scanning parent folders)

Interactive Preview & Customizer

3D preview with browser-based OpenSCAD rendering on parameter changes.

Loading previewLoading preview...
step 0.5
step 0.5
step 0.5
step 0.5
step 0.1
step 0.1
step 0.1
step 0.1
step 0.1
step 0.1
step 0.1
step 0.1
step 0.1
step 0.1
step 0.1
WASM compiler loads on first parameter change.
Download current STL

Prompt

Create a cube with a hole on every face.

OpenSCAD Code

// Pantheon (Rome) — exterior model from ref-front / ref-top images
// Scale: 1 unit ≈ 1 m

$fn = 64;

rotunda_r   = 21.5;
drum_h      = 21;
dome_r      = 21.5;

portico_w   = 15.5;
portico_d   = 7.5;
col_h       = 11.8;
col_r       = 0.75;
col_count   = 8;
col_rows    = 3;
col_spacing = portico_w / (col_count + 1);

block_w     = portico_w;
block_d     = 5.5;
block_h     = drum_h;

entablature_h = 2.2;
pediment_h    = 3.2;
step_h        = 0.35;
step_count    = 3;

c_stone = [0.82, 0.78, 0.70];
c_brick = [0.55, 0.32, 0.22];
c_dome  = [0.62, 0.64, 0.58];
c_roof  = [0.48, 0.30, 0.20];
c_dark  = [0.42, 0.38, 0.34];

module cornice_ring(od, id, h, z) {
    color(c_stone)
        translate([0, 0, z])
            difference() {
                cylinder(h = h, r = od);
                translate([0, 0, -0.05])
                    cylinder(h = h + 0.1, r = id);
            }
}

module rotunda_drum() {
    color(c_brick)
        cylinder(h = drum_h, r = rotunda_r);

    cornice_ring(rotunda_r + 0.35, rotunda_r - 0.25, 0.5,  drum_h * 0.38);
    cornice_ring(rotunda_r + 0.45, rotunda_r - 0.15, 0.65, drum_h * 0.68);
    cornice_ring(rotunda_r + 0.55, rotunda_r - 0.05, 0.8,  drum_h - 0.85);
}

module dome_assembly() {
    step_h_ring = 0.52;
    n_steps = 7;
    z_dome = drum_h;

    for (i = [0 : n_steps - 1]) {
        ri = dome_r + 0.15 - i * 0.92;
        color(c_dome * (1 - i * 0.02))
            translate([0, 0, z_dome + i * step_h_ring])
                cylinder(h = step_h_ring, r1 = ri, r2 = ri - 0.88);
    }

    z_hemi = z_dome + n_steps * step_h_ring;
    color(c_dome)
        translate([0, 0, z_hemi])
            difference() {
                intersection() {
                    sphere(r = dome_r);
                    // keep upper hemisphere only
                    translate([-dome_r * 1.3, -dome_r * 1.3, -0.02])
                        cube([dome_r * 2.6, dome_r * 2.6, dome_r + 0.02]);
                }
                translate([0, 0, dome_r - 2])
                    cylinder(h = 5, r = 4.3, $fn = 72);
            }
}

module rotunda() {
    rotunda_drum();
    dome_assembly();
}

module corinthian_cap() {
    color(c_stone)
        translate([0, 0, col_h])
            cylinder(h = 1.0, r1 = col_r * 1.12, r2 = col_r * 1.4);
}

module column() {
    color(c_stone)
        cylinder(h = col_h, r = col_r);
    corinthian_cap();
}

module portico_columns(y_row_front) {
    z0 = step_count * step_h;
    row_depth = portico_d / (col_rows + 0.3);
    for (row = [0 : col_rows - 1])
        for (i = [0 : col_count - 1]) {
            x = -portico_w / 2 + col_spacing * (i + 1);
            y = y_row_front - row * row_depth;
            translate([x, y, z0])
                column();
        }
}

module triangular_prism(w, h, d, y0, z0) {
    color(c_stone)
        translate([0, y0, z0])
            rotate([90, 0, 0])
                linear_extrude(height = d, center = true)
                    polygon(points = [[-w / 2, 0], [w / 2, 0], [0, h]]);
}

module portico(y_front_face) {
    y_back = y_front_face - portico_d;
    z_cap = step_count * step_h + col_h + 1.0;

    // stepped platform (wide stylobate)
    for (s = [0 : step_count - 1]) {
        shrink = s * 0.4;
        color(c_stone)
            translate([0, y_front_face + 1.0 - s * 0.3, s * step_h + step_h / 2])
                cube([portico_w + 3.0 - shrink, portico_d + 2.4 - shrink * 0.4, step_h], center = true);
    }

    portico_columns(y_front_face - 1.0);

    // entablature (architrave + frieze)
    color(c_stone)
        translate([0, (y_front_face + y_back) / 2, z_cap + entablature_h / 2])
            cube([portico_w + 1.2, portico_d + 0.8, entablature_h], center = true);
    color(c_dark)
        translate([0, y_front_face - 0.15, z_cap + entablature_h * 0.55])
            cube([portico_w + 0.6, 0.35, entablature_h * 0.35], center = true);

    z_roof = z_cap + entablature_h;
    triangular_prism(portico_w + 1.4, pediment_h, 1.4, y_front_face - 0.2, z_roof);

    // pitched porch roof behind pediment
    color(c_roof)
        translate([0, (y_front_face + y_back) / 2 - 0.3, z_roof])
            rotate([90, 0, 0])
                linear_extrude(height = portico_d - 0.4, center = true)
                    polygon(points = [
                        [-portico_w / 2 - 0.2, 0],
                        [ portico_w / 2 + 0.2, 0],
                        [0, 2.6]
                    ]);
}

module intermediate_block(y_on_rotunda) {
    // rectangular connector flush against rotunda (+Y side)
    yc = y_on_rotunda + block_d / 2;
    color(c_brick)
        translate([0, yc, block_h / 2])
            cube([block_w, block_d, block_h], center = true);

    // low secondary pediment on top (visible behind main pediment in ref)
    color(c_stone)
        translate([0, yc + block_d / 2 - 0.5, block_h])
            rotate([90, 0, 0])
                linear_extrude(0.9, center = true)
                    polygon(points = [
                        [-block_w / 2, 0],
                        [ block_w / 2, 0],
                        [0, 2.5]
                    ]);
}

module plinth() {
    color(c_stone)
        translate([0, 8, -0.25])
            cube([rotunda_r * 2.6, rotunda_r * 2.2, 0.5], center = true);
}

module pantheon() {
    plinth();
    rotunda();

    y_rotunda_face = rotunda_r;
    intermediate_block(y_rotunda_face);

    y_portico_front = y_rotunda_face + block_d + 0.15;
    portico(y_portico_front + portico_d);
}

pantheon();