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 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.
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();