vibe-openscad

tier-1-mug / gpt-4.1-2025-04-14

4 run / 累計 33.9s / 累計 $0.0275

openai gpt 4.1 2025-04-14 bare

bare (provider default effort)

run detail →
render
bare render of tier-1-mug
loading STL…
success 4.8s · 169/491t · $0.0043
SCAD (54 lines)
// パラメータ
cup_outer_diameter = 80;
cup_height = 100;
cup_wall_thickness = 4;
cup_bottom_thickness = 6;

cup_inner_diameter = cup_outer_diameter - 2 * cup_wall_thickness;
cup_inner_height = cup_height - cup_bottom_thickness;

handle_radius = 12;
handle_thickness = 4; // リング取手の断面厚み
handle_clearance = 6; // カップ外からの飛び出し余裕

module cup() {
    difference() {
        // 外側のカップ
        cylinder(d=cup_outer_diameter, h=cup_height, $fn=128);

        // 内側 (飲み物が入る部分)
        translate([0,0,cup_bottom_thickness])
            cylinder(d=cup_inner_diameter, h=cup_inner_height, $fn=128);
    }
}

module handle() {
    // 取手の中心がカップ外周から sufficient clearance で外側に出るように配置
    // y方向(外径方向)にオフセット
    angle_span = 220; // 取手リングの円弧(度)
    angle_start = -angle_span/2;
    angle_end = angle_span/2;
    // 取手の中心位置
    handle_center_offset = (cup_outer_diameter/2) + handle_radius + handle_clearance;

    // 取手(トーラスの一部)の断面円
    rotate([90,0,0])
        translate([0,handle_center_offset,cup_height/2])
            rotate([0,0,90])
                arc_torus(handle_radius, handle_thickness/2, angle_span);
}

// 部分的なトーラス(円弧状の取手)
module arc_torus(major_r, minor_r, angle) {
    // angle: 度数法で制限
    $fn_arc = 100;    // 精度
    rotate_extrude(angle=angle, $fn=$fn_arc)
        translate([major_r,0,0])
            circle(r=minor_r, $fn=32);
}

// マグカップ本体+取手
union() {
    cup();
    handle();
}
パラメータ (7)
スライダを動かすと openscad-wasm で再レンダリング

prompt

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

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

iteration: iter-png

i1 success
iter 1
12.1s · 1515/626t · $0.0080
diff vs bare: +14/-18
  // パラメータ
  cup_outer_diameter = 80;
  cup_height = 100;
  cup_wall_thickness = 4;
  cup_bottom_thickness = 6;
  
  cup_inner_diameter = cup_outer_diameter - 2 * cup_wall_thickness;
  cup_inner_height = cup_height - cup_bottom_thickness;
  
- handle_radius = 12;
- handle_thickness = 4; // リング取手の断面厚み
- handle_clearance = 6; // カップ外からの飛び出し余裕
+ handle_radius = 12;      // リング取手半径
+ handle_thickness = 8;    // 取手断面厚み 指が通るように
+ handle_clearance = 6;    // カップ外からのオフセット(ゆとり)
  
  module cup() {
      difference() {
          // 外側のカップ
          cylinder(d=cup_outer_diameter, h=cup_height, $fn=128);
  
-         // 内側 (飲み物が入る部分)
+         // 内側 (飲み物が入る部分) --- 上端ぎりぎりまでくり抜き
          translate([0,0,cup_bottom_thickness])
-             cylinder(d=cup_inner_diameter, h=cup_inner_height, $fn=128);
+             cylinder(d=cup_inner_diameter, h=cup_height-cup_bottom_thickness, $fn=128);
      }
  }
  
  module handle() {
-     // 取手の中心がカップ外周から sufficient clearance で外側に出るように配置
-     // y方向(外径方向)にオフセット
-     angle_span = 220; // 取手リングの円弧(度)
-     angle_start = -angle_span/2;
-     angle_end = angle_span/2;
-     // 取手の中心位置
+     // 取手中心の位置:カップ外周から浮かせて、中心高さに
      handle_center_offset = (cup_outer_diameter/2) + handle_radius + handle_clearance;
  
-     // 取手(トーラスの一部)の断面円
+     // 取手はカップ側面に沿ってリング状の切れ目(カップ側で切り欠き)
+     angle_span = 220; // 円弧度数(約3/4リング)
+ 
+     // カップ本体と取手がきちんと繋がるよう、開始/終端をカップ内部に少しめり込ませる
      rotate([90,0,0])
          translate([0,handle_center_offset,cup_height/2])
              rotate([0,0,90])
                  arc_torus(handle_radius, handle_thickness/2, angle_span);
  }
  
- // 部分的なトーラス(円弧状の取手)
+ // 円弧状トーラス(部分リング取手)
  module arc_torus(major_r, minor_r, angle) {
-     // angle: 度数法で制限
-     $fn_arc = 100;    // 精度
-     rotate_extrude(angle=angle, $fn=$fn_arc)
-         translate([major_r,0,0])
+     rotate_extrude(angle=angle, $fn=100)
+         translate([major_r,0,0]) 
              circle(r=minor_r, $fn=32);
  }
  
- // マグカップ本体+取手
+ // --- 出力 ---
  union() {
      cup();
      handle();
  }
SCAD (50 lines)
// パラメータ
cup_outer_diameter = 80;
cup_height = 100;
cup_wall_thickness = 4;
cup_bottom_thickness = 6;

cup_inner_diameter = cup_outer_diameter - 2 * cup_wall_thickness;
cup_inner_height = cup_height - cup_bottom_thickness;

handle_radius = 12;      // リング取手半径
handle_thickness = 8;    // 取手断面厚み 指が通るように
handle_clearance = 6;    // カップ外からのオフセット(ゆとり)

module cup() {
    difference() {
        // 外側のカップ
        cylinder(d=cup_outer_diameter, h=cup_height, $fn=128);

        // 内側 (飲み物が入る部分) --- 上端ぎりぎりまでくり抜き
        translate([0,0,cup_bottom_thickness])
            cylinder(d=cup_inner_diameter, h=cup_height-cup_bottom_thickness, $fn=128);
    }
}

module handle() {
    // 取手中心の位置:カップ外周から浮かせて、中心高さに
    handle_center_offset = (cup_outer_diameter/2) + handle_radius + handle_clearance;

    // 取手はカップ側面に沿ってリング状の切れ目(カップ側で切り欠き)
    angle_span = 220; // 円弧度数(約3/4リング)

    // カップ本体と取手がきちんと繋がるよう、開始/終端をカップ内部に少しめり込ませる
    rotate([90,0,0])
        translate([0,handle_center_offset,cup_height/2])
            rotate([0,0,90])
                arc_torus(handle_radius, handle_thickness/2, angle_span);
}

// 円弧状トーラス(部分リング取手)
module arc_torus(major_r, minor_r, angle) {
    rotate_extrude(angle=angle, $fn=100)
        translate([major_r,0,0]) 
            circle(r=minor_r, $fn=32);
}

// --- 出力 ---
union() {
    cup();
    handle();
}
i2 success
iter 2
10.8s · 1518/614t · $0.0079
diff vs i1: +15/-18
  // パラメータ
  cup_outer_diameter = 80;
  cup_height = 100;
  cup_wall_thickness = 4;
  cup_bottom_thickness = 6;
  
  cup_inner_diameter = cup_outer_diameter - 2 * cup_wall_thickness;
  cup_inner_height = cup_height - cup_bottom_thickness;
  
  handle_radius = 12;      // リング取手半径
- handle_thickness = 8;    // 取手断面厚み 指が通るように
- handle_clearance = 6;    // カップ外からのオフセット(ゆとり)
+ handle_thickness = 8;    // 取手の断面厚み
+ handle_offset = 4;       // カップ外周から取手始点まで(ゆとり)
  
+ // カップ本体
  module cup() {
      difference() {
-         // 外側のカップ
+         // 外側
          cylinder(d=cup_outer_diameter, h=cup_height, $fn=128);
- 
-         // 内側 (飲み物が入る部分) --- 上端ぎりぎりまでくり抜き
+         // 内側(底厚さぶん、底上げ)
          translate([0,0,cup_bottom_thickness])
              cylinder(d=cup_inner_diameter, h=cup_height-cup_bottom_thickness, $fn=128);
      }
  }
  
+ // 取手本体:カップ外径に密着+十分外側に飛び出す
  module handle() {
-     // 取手中心の位置:カップ外周から浮かせて、中心高さに
-     handle_center_offset = (cup_outer_diameter/2) + handle_radius + handle_clearance;
- 
-     // 取手はカップ側面に沿ってリング状の切れ目(カップ側で切り欠き)
-     angle_span = 220; // 円弧度数(約3/4リング)
- 
-     // カップ本体と取手がきちんと繋がるよう、開始/終端をカップ内部に少しめり込ませる
-     rotate([90,0,0])
-         translate([0,handle_center_offset,cup_height/2])
-             rotate([0,0,90])
-                 arc_torus(handle_radius, handle_thickness/2, angle_span);
+     angle_span = 220; // 円弧 span(だいたい3/4)
+     handle_center_dist = (cup_outer_diameter/2) + handle_radius + handle_offset;
+     // カップ中心高さに取手の中心、Y方向に配置
+     translate([0, 0, cup_height/2])
+         rotate([0,0,90])
+             translate([0, handle_center_dist, 0])
+                 rotate([0,0,-angle_span/2])
+                     arc_torus(handle_radius, handle_thickness/2, angle_span);
  }
  
- // 円弧状トーラス(部分リング取手)
+ // 部分トーラス生成
  module arc_torus(major_r, minor_r, angle) {
      rotate_extrude(angle=angle, $fn=100)
          translate([major_r,0,0]) 
              circle(r=minor_r, $fn=32);
  }
  
- // --- 出力 ---
  union() {
      cup();
      handle();
  }
SCAD (47 lines)
// パラメータ
cup_outer_diameter = 80;
cup_height = 100;
cup_wall_thickness = 4;
cup_bottom_thickness = 6;

cup_inner_diameter = cup_outer_diameter - 2 * cup_wall_thickness;
cup_inner_height = cup_height - cup_bottom_thickness;

handle_radius = 12;      // リング取手半径
handle_thickness = 8;    // 取手の断面厚み
handle_offset = 4;       // カップ外周から取手始点まで(ゆとり)

// カップ本体
module cup() {
    difference() {
        // 外側
        cylinder(d=cup_outer_diameter, h=cup_height, $fn=128);
        // 内側(底厚さぶん、底上げ)
        translate([0,0,cup_bottom_thickness])
            cylinder(d=cup_inner_diameter, h=cup_height-cup_bottom_thickness, $fn=128);
    }
}

// 取手本体:カップ外径に密着+十分外側に飛び出す
module handle() {
    angle_span = 220; // 円弧 span(だいたい3/4)
    handle_center_dist = (cup_outer_diameter/2) + handle_radius + handle_offset;
    // カップ中心高さに取手の中心、Y方向に配置
    translate([0, 0, cup_height/2])
        rotate([0,0,90])
            translate([0, handle_center_dist, 0])
                rotate([0,0,-angle_span/2])
                    arc_torus(handle_radius, handle_thickness/2, angle_span);
}

// 部分トーラス生成
module arc_torus(major_r, minor_r, angle) {
    rotate_extrude(angle=angle, $fn=100)
        translate([major_r,0,0]) 
            circle(r=minor_r, $fn=32);
}

union() {
    cup();
    handle();
}
i3 success
iter 3
6.2s · 1459/547t · $0.0073
diff vs i2: +1/-1
  // パラメータ
  cup_outer_diameter = 80;
  cup_height = 100;
  cup_wall_thickness = 4;
  cup_bottom_thickness = 6;
  
  cup_inner_diameter = cup_outer_diameter - 2 * cup_wall_thickness;
  cup_inner_height = cup_height - cup_bottom_thickness;
  
  handle_radius = 12;      // リング取手半径
  handle_thickness = 8;    // 取手の断面厚み
  handle_offset = 4;       // カップ外周から取手始点まで(ゆとり)
  
  // カップ本体
  module cup() {
      difference() {
          // 外側
          cylinder(d=cup_outer_diameter, h=cup_height, $fn=128);
-         // 内側(底厚さぶん、底上げ)
+         // 内側(底厚さ分だけ上げた位置から切り抜き、内部空間を作る)
          translate([0,0,cup_bottom_thickness])
              cylinder(d=cup_inner_diameter, h=cup_height-cup_bottom_thickness, $fn=128);
      }
  }
  
  // 取手本体:カップ外径に密着+十分外側に飛び出す
  module handle() {
      angle_span = 220; // 円弧 span(だいたい3/4)
      handle_center_dist = (cup_outer_diameter/2) + handle_radius + handle_offset;
      // カップ中心高さに取手の中心、Y方向に配置
      translate([0, 0, cup_height/2])
          rotate([0,0,90])
              translate([0, handle_center_dist, 0])
                  rotate([0,0,-angle_span/2])
                      arc_torus(handle_radius, handle_thickness/2, angle_span);
  }
  
  // 部分トーラス生成
  module arc_torus(major_r, minor_r, angle) {
      rotate_extrude(angle=angle, $fn=100)
          translate([major_r,0,0]) 
              circle(r=minor_r, $fn=32);
  }
  
  union() {
      cup();
      handle();
  }
SCAD (47 lines)
// パラメータ
cup_outer_diameter = 80;
cup_height = 100;
cup_wall_thickness = 4;
cup_bottom_thickness = 6;

cup_inner_diameter = cup_outer_diameter - 2 * cup_wall_thickness;
cup_inner_height = cup_height - cup_bottom_thickness;

handle_radius = 12;      // リング取手半径
handle_thickness = 8;    // 取手の断面厚み
handle_offset = 4;       // カップ外周から取手始点まで(ゆとり)

// カップ本体
module cup() {
    difference() {
        // 外側
        cylinder(d=cup_outer_diameter, h=cup_height, $fn=128);
        // 内側(底厚さ分だけ上げた位置から切り抜き、内部空間を作る)
        translate([0,0,cup_bottom_thickness])
            cylinder(d=cup_inner_diameter, h=cup_height-cup_bottom_thickness, $fn=128);
    }
}

// 取手本体:カップ外径に密着+十分外側に飛び出す
module handle() {
    angle_span = 220; // 円弧 span(だいたい3/4)
    handle_center_dist = (cup_outer_diameter/2) + handle_radius + handle_offset;
    // カップ中心高さに取手の中心、Y方向に配置
    translate([0, 0, cup_height/2])
        rotate([0,0,90])
            translate([0, handle_center_dist, 0])
                rotate([0,0,-angle_span/2])
                    arc_torus(handle_radius, handle_thickness/2, angle_span);
}

// 部分トーラス生成
module arc_torus(major_r, minor_r, angle) {
    rotate_extrude(angle=angle, $fn=100)
        translate([major_r,0,0]) 
            circle(r=minor_r, $fn=32);
}

union() {
    cup();
    handle();
}