vibe-openscad

tier-1-mug / gpt-5-mini-2025-08-07

7 run / 累計 852.9s / 累計 $0.0752

openai gpt 5 mini 2025-08-07 bare

bare (provider default effort)

run detail →
render
bare render of tier-1-mug
loading STL…
success 53.0s · 168/4069t · $0.0082
SCAD (49 lines)
// OpenSCAD: マグカップ(外径80mm、高さ100mm、肉厚4mm、底厚6mm、リング状取手)
// 単位: mm

$fn = 128;

outer_d = 80;
outer_r = outer_d / 2;
height = 100;

wall_thickness = 4;
inner_r = outer_r - wall_thickness;

bottom_thickness = 6;
cavity_height = height - bottom_thickness;

// 取手パラメータ
handle_protrusion = 12;       // カップ外周からの突出量(外周からはみ出す距離)
handle_tube_r = 10;           // 取手断面の半径(チューブ半径)
handle_angle = 220;           // 取手の巻き角度(度)。180なら半円、220でやや多めに巻く
handle_center_z = height/2;   // 取手の高さ(カップ中心高さ)

// トーラス中心線半径(外側の最大は outer_r + handle_protrusion)
torus_R = outer_r + handle_protrusion - handle_tube_r;

// マグカップ本体(外殻 - 内空洞)
module mug_body() {
    difference() {
        // 外側の筒(底も含む)
        translate([0,0,0]) cylinder(h = height, r = outer_r);
        // 内側の空洞(底厚分だけ上げてくり抜く)
        translate([0,0,bottom_thickness]) cylinder(h = cavity_height, r = inner_r);
    }
}

// リング状取手(トーラスのセグメント)
module handle() {
    // 2DプロファイルをZ軸回転でトーラス(セグメント)を作成し、回転して垂直面に配置
    translate([0,0,handle_center_z])
        rotate([0,90,0])  // トーラスを縦向きにする(XZ平面に配置)
            rotate_extrude(angle = handle_angle)
                translate([torus_R, 0, 0])
                    circle(r = handle_tube_r);
}

// 完成モデル
union() {
    mug_body();
    handle();
}
パラメータ (7)
スライダを動かすと openscad-wasm で再レンダリング

prompt

OpenSCAD で、外径 80mm、高さ 100mm、肉厚 4mm のマグカップを作ってください。
底面の厚みは 6mm とし、内側はくり抜いて飲み物を入れられる形状にしてください。
さらに、側面には外径方向に飛び出す半径 12mm の取手(リング状の取手)を付けてください。
取手はカップの中心高さあたりに付け、外周から十分にはみ出して指を通せる形にしてください。

完成したコード全体を ```openscad ... ``` のフェンスで囲んで出力してください。コードのみで、追加の説明は不要です。

variant: effort

low success
low
33.3s · 168/1627t · $0.0033
SCAD (53 lines)
// OpenSCAD: マグカップ(外径80mm, 高さ100mm, 肉厚4mm, 底厚6mm, リング状取手)
// 単位: mm

$fn = 120; // 表示を滑らかにする

// パラメータ
outer_dia = 80;
outer_r = outer_dia / 2;
height = 100;

wall_thickness = 4;
inner_r = outer_r - wall_thickness;

base_thickness = 6;
inner_height = height - base_thickness; // 内部の高さ(底を除く)

handle_cross_r = 12;              // 取手の断面半径(リングの太さ)
handle_center_offset = outer_r + handle_cross_r; // 取手の中心線が外径方向に飛び出す距離
handle_center_z = height / 2;     // 取手の中心高さ(カップの中心高さ)

// 本体(外側)
module mug_outer() {
    translate([0,0,0])
        cylinder(r=outer_r, h=height, center=false);
}

// 本体(内側:くり抜き用)
module mug_inner() {
    // 内側は底部の厚みを残してくり抜く(高さは内側の空間高さ)
    translate([0,0,base_thickness])
        cylinder(r=inner_r, h=inner_height, center=false);
}

// リング状取手(トーラスをrotate_extrudeで作る)
// 2D平面上で中心を (handle_center_offset, handle_center_z) にした円を回転させる
module handle_ring() {
    // rotate_extrude は 2D の y 座標を z に変換するので、
    // circle を (x=handle_center_offset, y=handle_center_z) に移動して回転させる
    translate([0,0,0])
        rotate_extrude(convexity=10)
            translate([handle_center_offset, handle_center_z])
                circle(r=handle_cross_r);
}

// 組み立て
difference() {
    union() {
        mug_outer();
        handle_ring();
    }
    // 内部をくり抜く(飲み物を入れられる形にする)
    mug_inner();
}
medium (default) success
medium
53.0s · 168/4069t · $0.0082
SCAD (49 lines)
// OpenSCAD: マグカップ(外径80mm、高さ100mm、肉厚4mm、底厚6mm、リング状取手)
// 単位: mm

$fn = 128;

outer_d = 80;
outer_r = outer_d / 2;
height = 100;

wall_thickness = 4;
inner_r = outer_r - wall_thickness;

bottom_thickness = 6;
cavity_height = height - bottom_thickness;

// 取手パラメータ
handle_protrusion = 12;       // カップ外周からの突出量(外周からはみ出す距離)
handle_tube_r = 10;           // 取手断面の半径(チューブ半径)
handle_angle = 220;           // 取手の巻き角度(度)。180なら半円、220でやや多めに巻く
handle_center_z = height/2;   // 取手の高さ(カップ中心高さ)

// トーラス中心線半径(外側の最大は outer_r + handle_protrusion)
torus_R = outer_r + handle_protrusion - handle_tube_r;

// マグカップ本体(外殻 - 内空洞)
module mug_body() {
    difference() {
        // 外側の筒(底も含む)
        translate([0,0,0]) cylinder(h = height, r = outer_r);
        // 内側の空洞(底厚分だけ上げてくり抜く)
        translate([0,0,bottom_thickness]) cylinder(h = cavity_height, r = inner_r);
    }
}

// リング状取手(トーラスのセグメント)
module handle() {
    // 2DプロファイルをZ軸回転でトーラス(セグメント)を作成し、回転して垂直面に配置
    translate([0,0,handle_center_z])
        rotate([0,90,0])  // トーラスを縦向きにする(XZ平面に配置)
            rotate_extrude(angle = handle_angle)
                translate([torus_R, 0, 0])
                    circle(r = handle_tube_r);
}

// 完成モデル
union() {
    mug_body();
    handle();
}
high success
high
521.0s · 168/15204t · $0.0305
SCAD (40 lines)
// マグカップ (外径 80mm, 高さ 100mm, 肉厚 4mm, 底面厚 6mm)
// リング状取手 (チューブ半径 12mm)、カップ中央高さに配置

// パラメータ
outer_d = 80;
outer_r = outer_d / 2;
height = 100;
wall_thickness = 4;
bottom_thickness = 6;
inner_r = outer_r - wall_thickness;

handle_tube_r = 12;          // 取手の断面半径(指定の 12mm)
handle_overlap = 2;          // カップとの重なり (mm) - 接合のためわずかに重ねる
handle_center_r = outer_r + handle_tube_r - handle_overlap;
handle_angle = 180;          // 取手のアーク角度(度)
handle_z = height / 2;       // 取手の中心高さ(カップ中心)

$fn = 128; // 解像度

module cup_body() {
    difference() {
        // 外側本体
        cylinder(h = height, r = outer_r, center = false);
        // 内側をくり抜く(底面厚を残す)
        translate([0,0,bottom_thickness])
            cylinder(h = height - bottom_thickness, r = inner_r, center = false);
    }
}

module ring_handle() {
    // 2D の円を回転してトーラス状のアークを作成(高さは 2D の y 座標で指定)
    rotate_extrude(angle = handle_angle)
        translate([handle_center_r, handle_z])
            circle(r = handle_tube_r);
}

union() {
    cup_body();
    ring_handle();
}
maxnot run
xhighnot run

iteration: iter-png

i1 success
iter 1
83.4s · 1338/4885t · $0.0101
diff vs bare: +5/-7
  // OpenSCAD: マグカップ(外径80mm、高さ100mm、肉厚4mm、底厚6mm、リング状取手)
- // 単位: mm
+ // 修正: 取手を完全なリングに(angle=360)、取手断面を小さくして外周から十分にはみ出すよう調整
+ $fn = 200;
  
- $fn = 128;
- 
  outer_d = 80;
  outer_r = outer_d / 2;
  height = 100;
  
  wall_thickness = 4;
  inner_r = outer_r - wall_thickness;
  
  bottom_thickness = 6;
  cavity_height = height - bottom_thickness;
  
  // 取手パラメータ
  handle_protrusion = 12;       // カップ外周からの突出量(外周からはみ出す距離)
- handle_tube_r = 10;           // 取手断面の半径(チューブ半径)
- handle_angle = 220;           // 取手の巻き角度(度)。180なら半円、220でやや多めに巻く
+ handle_tube_r = 3;            // 取手断面の半径(チューブ半径) — 小さめにして指が通れるようにする
+ handle_angle = 360;           // 取手の巻き角度(度)。リング状にするため360
  handle_center_z = height/2;   // 取手の高さ(カップ中心高さ)
  
  // トーラス中心線半径(外側の最大は outer_r + handle_protrusion)
  torus_R = outer_r + handle_protrusion - handle_tube_r;
  
  // マグカップ本体(外殻 - 内空洞)
  module mug_body() {
      difference() {
          // 外側の筒(底も含む)
          translate([0,0,0]) cylinder(h = height, r = outer_r);
          // 内側の空洞(底厚分だけ上げてくり抜く)
          translate([0,0,bottom_thickness]) cylinder(h = cavity_height, r = inner_r);
      }
  }
  
- // リング状取手(トーラスのセグメント)
+ // リング状取手(トーラス)
  module handle() {
-     // 2DプロファイルをZ軸回転でトーラス(セグメント)を作成し、回転して垂直面に配置
      translate([0,0,handle_center_z])
          rotate([0,90,0])  // トーラスを縦向きにする(XZ平面に配置)
              rotate_extrude(angle = handle_angle)
                  translate([torus_R, 0, 0])
                      circle(r = handle_tube_r);
  }
  
  // 完成モデル
  union() {
      mug_body();
      handle();
  }
SCAD (47 lines)
// OpenSCAD: マグカップ(外径80mm、高さ100mm、肉厚4mm、底厚6mm、リング状取手)
// 修正: 取手を完全なリングに(angle=360)、取手断面を小さくして外周から十分にはみ出すよう調整
$fn = 200;

outer_d = 80;
outer_r = outer_d / 2;
height = 100;

wall_thickness = 4;
inner_r = outer_r - wall_thickness;

bottom_thickness = 6;
cavity_height = height - bottom_thickness;

// 取手パラメータ
handle_protrusion = 12;       // カップ外周からの突出量(外周からはみ出す距離)
handle_tube_r = 3;            // 取手断面の半径(チューブ半径) — 小さめにして指が通れるようにする
handle_angle = 360;           // 取手の巻き角度(度)。リング状にするため360
handle_center_z = height/2;   // 取手の高さ(カップ中心高さ)

// トーラス中心線半径(外側の最大は outer_r + handle_protrusion)
torus_R = outer_r + handle_protrusion - handle_tube_r;

// マグカップ本体(外殻 - 内空洞)
module mug_body() {
    difference() {
        // 外側の筒(底も含む)
        translate([0,0,0]) cylinder(h = height, r = outer_r);
        // 内側の空洞(底厚分だけ上げてくり抜く)
        translate([0,0,bottom_thickness]) cylinder(h = cavity_height, r = inner_r);
    }
}

// リング状取手(トーラス)
module handle() {
    translate([0,0,handle_center_z])
        rotate([0,90,0])  // トーラスを縦向きにする(XZ平面に配置)
            rotate_extrude(angle = handle_angle)
                translate([torus_R, 0, 0])
                    circle(r = handle_tube_r);
}

// 完成モデル
union() {
    mug_body();
    handle();
}
i2 render_error render
render_error
72.0s · 1333/4495t · $0.0093
openscad stl render failed (exit 1): ERROR: Parser error: syntax error in file ../../../../../tmp/render-KbuU52/input.scad, line 41
Can't parse file '/tmp/render-KbuU52/input.scad'!

diff vs i1: +22/-8
  // OpenSCAD: マグカップ(外径80mm、高さ100mm、肉厚4mm、底厚6mm、リング状取手)
- // 修正: 取手を完全なリングに(angle=360)、取手断面を小さくして外周から十分にはみ出すよう調整
+ // 修正: 取手の向きと配置を修正(rotate_extrude の後で回転・配置する)
+ // 高解像度
  $fn = 200;
  
  outer_d = 80;
  outer_r = outer_d / 2;
  height = 100;
  
  wall_thickness = 4;
  inner_r = outer_r - wall_thickness;
  
  bottom_thickness = 6;
  cavity_height = height - bottom_thickness;
  
  // 取手パラメータ
  handle_protrusion = 12;       // カップ外周からの突出量(外周からはみ出す距離)
- handle_tube_r = 3;            // 取手断面の半径(チューブ半径) — 小さめにして指が通れるようにする
+ handle_tube_r = 3;            // 取手断面の半径(チューブ半径)
  handle_angle = 360;           // 取手の巻き角度(度)。リング状にするため360
  handle_center_z = height/2;   // 取手の高さ(カップ中心高さ)
  
  // トーラス中心線半径(外側の最大は outer_r + handle_protrusion)
  torus_R = outer_r + handle_protrusion - handle_tube_r;
  
  // マグカップ本体(外殻 - 内空洞)
  module mug_body() {
      difference() {
          // 外側の筒(底も含む)
-         translate([0,0,0]) cylinder(h = height, r = outer_r);
+         cylinder(h = height, r = outer_r);
          // 内側の空洞(底厚分だけ上げてくり抜く)
-         translate([0,0,bottom_thickness]) cylinder(h = cavity_height, r = inner_r);
+         // 少し余分に高さを持たせて上面の干渉を防ぐ
+         translate([0,0,bottom_thickness]) cylinder(h = cavity_height + 1, r = inner_r);
      }
  }
  
  // リング状取手(トーラス)
+ // rotate_extrude でトーラスを作成した後に回転して垂直面に配置
  module handle() {
-     translate([0,0,handle_center_z])
-         rotate([0,90,0])  // トーラスを縦向きにする(XZ平面に配置)
-             rotate_extrude(angle = handle_angle)
+     // まず Z 軸周りに回転してトーラスを作る(XY 平面上の円を回転)
+     torus = rotate_extrude(angle = handle_angle)
                  translate([torus_R, 0, 0])
                      circle(r = handle_tube_r);
+ 
+     // トーラスをカップ側面に対して垂直に配置し、中心高さに移動
+     translate([0,0,handle_center_z])
+         rotate([0,90,0])
+             children();
  }
  
  // 完成モデル
  union() {
      mug_body();
-     handle();
+     // ハンドルを配置(children() を使うため直接展開)
+     // ここで先に定義した torus を展開
+     // (OpenSCAD は module 内での children() 使用を許容しないため、直接同等の構造を記述)
+     translate([0,0,handle_center_z])
+         rotate([0,90,0])
+             rotate_extrude(angle = handle_angle)
+                 translate([torus_R, 0, 0])
+                     circle(r = handle_tube_r);
  }
SCAD (61 lines)
// OpenSCAD: マグカップ(外径80mm、高さ100mm、肉厚4mm、底厚6mm、リング状取手)
// 修正: 取手の向きと配置を修正(rotate_extrude の後で回転・配置する)
// 高解像度
$fn = 200;

outer_d = 80;
outer_r = outer_d / 2;
height = 100;

wall_thickness = 4;
inner_r = outer_r - wall_thickness;

bottom_thickness = 6;
cavity_height = height - bottom_thickness;

// 取手パラメータ
handle_protrusion = 12;       // カップ外周からの突出量(外周からはみ出す距離)
handle_tube_r = 3;            // 取手断面の半径(チューブ半径)
handle_angle = 360;           // 取手の巻き角度(度)。リング状にするため360
handle_center_z = height/2;   // 取手の高さ(カップ中心高さ)

// トーラス中心線半径(外側の最大は outer_r + handle_protrusion)
torus_R = outer_r + handle_protrusion - handle_tube_r;

// マグカップ本体(外殻 - 内空洞)
module mug_body() {
    difference() {
        // 外側の筒(底も含む)
        cylinder(h = height, r = outer_r);
        // 内側の空洞(底厚分だけ上げてくり抜く)
        // 少し余分に高さを持たせて上面の干渉を防ぐ
        translate([0,0,bottom_thickness]) cylinder(h = cavity_height + 1, r = inner_r);
    }
}

// リング状取手(トーラス)
// rotate_extrude でトーラスを作成した後に回転して垂直面に配置
module handle() {
    // まず Z 軸周りに回転してトーラスを作る(XY 平面上の円を回転)
    torus = rotate_extrude(angle = handle_angle)
                translate([torus_R, 0, 0])
                    circle(r = handle_tube_r);

    // トーラスをカップ側面に対して垂直に配置し、中心高さに移動
    translate([0,0,handle_center_z])
        rotate([0,90,0])
            children();
}

// 完成モデル
union() {
    mug_body();
    // ハンドルを配置(children() を使うため直接展開)
    // ここで先に定義した torus を展開
    // (OpenSCAD は module 内での children() 使用を許容しないため、直接同等の構造を記述)
    translate([0,0,handle_center_z])
        rotate([0,90,0])
            rotate_extrude(angle = handle_angle)
                translate([torus_R, 0, 0])
                    circle(r = handle_tube_r);
}
i3 success
iter 3
37.3s · 958/2704t · $0.0056
diff vs i2: +19/-30
  // OpenSCAD: マグカップ(外径80mm、高さ100mm、肉厚4mm、底厚6mm、リング状取手)
- // 修正: 取手の向きと配置を修正(rotate_extrude の後で回転・配置する)
- // 高解像度
- $fn = 200;
+ $fn = 160;
  
+ // 本体パラメータ
  outer_d = 80;
  outer_r = outer_d / 2;
  height = 100;
  
  wall_thickness = 4;
  inner_r = outer_r - wall_thickness;
  
  bottom_thickness = 6;
- cavity_height = height - bottom_thickness;
+ cavity_height = height - bottom_thickness + 0.1; // 余裕を少し持たせる
  
  // 取手パラメータ
- handle_protrusion = 12;       // カップ外周からの突出量(外周からはみ出す距離)
- handle_tube_r = 3;            // 取手断面の半径(チューブ半径)
- handle_angle = 360;           // 取手の巻き角度(度)。リング状にするため360
- handle_center_z = height/2;   // 取手の高さ(カップ中心高さ)
+ handle_protrusion = 12;    // カップ外周からの突出量(外周からの最大は outer_r + handle_protrusion)
+ handle_tube_r = 3.5;       // 取手断面の半径(チューブ半径)
+ handle_angle = 360;        // リング状にするため360度
+ handle_center_z = height / 2; // 取手の中心高さ(カップ中心高さ)
  
- // トーラス中心線半径(外側の最大は outer_r + handle_protrusion)
+ // トーラス中心線半径(トーラスの中心線が原点からどれだけ離れているか)
  torus_R = outer_r + handle_protrusion - handle_tube_r;
  
- // マグカップ本体(外殻 - 内空洞)
+ // マグカップ本体(外殻から内側をくり抜く)
  module mug_body() {
      difference() {
-         // 外側の筒(底も含む)
+         // 外側の筒(底を含む)
          cylinder(h = height, r = outer_r);
          // 内側の空洞(底厚分だけ上げてくり抜く)
-         // 少し余分に高さを持たせて上面の干渉を防ぐ
-         translate([0,0,bottom_thickness]) cylinder(h = cavity_height + 1, r = inner_r);
+         translate([0, 0, bottom_thickness])
+             cylinder(h = cavity_height, r = inner_r + 0.01);
      }
  }
  
- // リング状取手(トーラス)
- // rotate_extrude でトーラスを作成した後に回転して垂直面に配置
+ // リング状取手(トーラス)を作成して側面に配置
  module handle() {
-     // まず Z 軸周りに回転してトーラスを作る(XY 平面上の円を回転)
-     torus = rotate_extrude(angle = handle_angle)
+     // まず rotate_extrude でトーラスを作る(XY平面の円を回転)
+     // その後、Y軸回りに90度回転して垂直面に配置し、高さを合わせる
+     translate([0, 0, handle_center_z])
+         rotate([0, 90, 0])
+             rotate_extrude(angle = handle_angle)
                  translate([torus_R, 0, 0])
                      circle(r = handle_tube_r);
- 
-     // トーラスをカップ側面に対して垂直に配置し、中心高さに移動
-     translate([0,0,handle_center_z])
-         rotate([0,90,0])
-             children();
  }
  
  // 完成モデル
  union() {
      mug_body();
-     // ハンドルを配置(children() を使うため直接展開)
-     // ここで先に定義した torus を展開
-     // (OpenSCAD は module 内での children() 使用を許容しないため、直接同等の構造を記述)
-     translate([0,0,handle_center_z])
-         rotate([0,90,0])
-             rotate_extrude(angle = handle_angle)
-                 translate([torus_R, 0, 0])
-                     circle(r = handle_tube_r);
+     handle();
  }
SCAD (50 lines)
// OpenSCAD: マグカップ(外径80mm、高さ100mm、肉厚4mm、底厚6mm、リング状取手)
$fn = 160;

// 本体パラメータ
outer_d = 80;
outer_r = outer_d / 2;
height = 100;

wall_thickness = 4;
inner_r = outer_r - wall_thickness;

bottom_thickness = 6;
cavity_height = height - bottom_thickness + 0.1; // 余裕を少し持たせる

// 取手パラメータ
handle_protrusion = 12;    // カップ外周からの突出量(外周からの最大は outer_r + handle_protrusion)
handle_tube_r = 3.5;       // 取手断面の半径(チューブ半径)
handle_angle = 360;        // リング状にするため360度
handle_center_z = height / 2; // 取手の中心高さ(カップ中心高さ)

// トーラス中心線半径(トーラスの中心線が原点からどれだけ離れているか)
torus_R = outer_r + handle_protrusion - handle_tube_r;

// マグカップ本体(外殻から内側をくり抜く)
module mug_body() {
    difference() {
        // 外側の筒(底を含む)
        cylinder(h = height, r = outer_r);
        // 内側の空洞(底厚分だけ上げてくり抜く)
        translate([0, 0, bottom_thickness])
            cylinder(h = cavity_height, r = inner_r + 0.01);
    }
}

// リング状取手(トーラス)を作成して側面に配置
module handle() {
    // まず rotate_extrude でトーラスを作る(XY平面の円を回転)
    // その後、Y軸回りに90度回転して垂直面に配置し、高さを合わせる
    translate([0, 0, handle_center_z])
        rotate([0, 90, 0])
            rotate_extrude(angle = handle_angle)
                translate([torus_R, 0, 0])
                    circle(r = handle_tube_r);
}

// 完成モデル
union() {
    mug_body();
    handle();
}