vibe-openscad

tier-1-mug / claude-opus-4-20250514

5 run / 累計 99.6s / 累計 $0.2086

claude opus 4 2025-05-14 bare

bare (provider default effort)

run detail →
render
bare render of tier-1-mug
loading STL…
success 7.8s · 210/352t · $0.0295
SCAD (34 lines)
// マグカップのパラメータ
outer_diameter = 80;
outer_radius = outer_diameter / 2;
height = 100;
wall_thickness = 4;
bottom_thickness = 6;
handle_radius = 12;

// マグカップ本体
difference() {
    // 外側の円柱
    cylinder(h = height, r = outer_radius, $fn = 100);
    
    // 内側をくり抜く
    translate([0, 0, bottom_thickness])
        cylinder(h = height - bottom_thickness + 1, r = outer_radius - wall_thickness, $fn = 100);
}

// 取手
translate([outer_radius + handle_radius, 0, height / 2]) {
    rotate([90, 0, 0]) {
        difference() {
            // 外側のトーラス
            rotate_extrude($fn = 100)
                translate([handle_radius * 1.5, 0, 0])
                    circle(r = handle_radius, $fn = 50);
            
            // 内側をくり抜く
            rotate_extrude($fn = 100)
                translate([handle_radius * 1.5, 0, 0])
                    circle(r = handle_radius - wall_thickness, $fn = 50);
        }
    }
}
パラメータ (5)
スライダを動かすと openscad-wasm で再レンダリング

prompt

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

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

variant: thinking

off (default) success
off
7.8s · 210/352t · $0.0295
SCAD (34 lines)
// マグカップのパラメータ
outer_diameter = 80;
outer_radius = outer_diameter / 2;
height = 100;
wall_thickness = 4;
bottom_thickness = 6;
handle_radius = 12;

// マグカップ本体
difference() {
    // 外側の円柱
    cylinder(h = height, r = outer_radius, $fn = 100);
    
    // 内側をくり抜く
    translate([0, 0, bottom_thickness])
        cylinder(h = height - bottom_thickness + 1, r = outer_radius - wall_thickness, $fn = 100);
}

// 取手
translate([outer_radius + handle_radius, 0, height / 2]) {
    rotate([90, 0, 0]) {
        difference() {
            // 外側のトーラス
            rotate_extrude($fn = 100)
                translate([handle_radius * 1.5, 0, 0])
                    circle(r = handle_radius, $fn = 50);
            
            // 内側をくり抜く
            rotate_extrude($fn = 100)
                translate([handle_radius * 1.5, 0, 0])
                    circle(r = handle_radius - wall_thickness, $fn = 50);
        }
    }
}
adaptivenot run
dynamicnot run

iteration: iter-png

i1 success
iter 1
64.2s · 1311/380t · $0.0482
diff vs bare: +7/-6
  // マグカップのパラメータ
  outer_diameter = 80;
  outer_radius = outer_diameter / 2;
  height = 100;
  wall_thickness = 4;
  bottom_thickness = 6;
  handle_radius = 12;
+ handle_thickness = 8;
  
  // マグカップ本体
  difference() {
      // 外側の円柱
      cylinder(h = height, r = outer_radius, $fn = 100);
      
      // 内側をくり抜く
      translate([0, 0, bottom_thickness])
          cylinder(h = height - bottom_thickness + 1, r = outer_radius - wall_thickness, $fn = 100);
  }
  
  // 取手
- translate([outer_radius + handle_radius, 0, height / 2]) {
+ translate([outer_radius - handle_thickness/2, 0, height / 2]) {
      rotate([90, 0, 0]) {
          difference() {
              // 外側のトーラス
              rotate_extrude($fn = 100)
-                 translate([handle_radius * 1.5, 0, 0])
-                     circle(r = handle_radius, $fn = 50);
+                 translate([handle_radius * 2 + handle_thickness/2, 0, 0])
+                     circle(r = handle_thickness, $fn = 50);
              
-             // 内側をくり抜く
+             // 内側をくり抜く(指が通る部分)
              rotate_extrude($fn = 100)
-                 translate([handle_radius * 1.5, 0, 0])
-                     circle(r = handle_radius - wall_thickness, $fn = 50);
+                 translate([handle_radius * 2 + handle_thickness/2, 0, 0])
+                     circle(r = handle_thickness - wall_thickness, $fn = 50);
          }
      }
  }
SCAD (35 lines)
// マグカップのパラメータ
outer_diameter = 80;
outer_radius = outer_diameter / 2;
height = 100;
wall_thickness = 4;
bottom_thickness = 6;
handle_radius = 12;
handle_thickness = 8;

// マグカップ本体
difference() {
    // 外側の円柱
    cylinder(h = height, r = outer_radius, $fn = 100);
    
    // 内側をくり抜く
    translate([0, 0, bottom_thickness])
        cylinder(h = height - bottom_thickness + 1, r = outer_radius - wall_thickness, $fn = 100);
}

// 取手
translate([outer_radius - handle_thickness/2, 0, height / 2]) {
    rotate([90, 0, 0]) {
        difference() {
            // 外側のトーラス
            rotate_extrude($fn = 100)
                translate([handle_radius * 2 + handle_thickness/2, 0, 0])
                    circle(r = handle_thickness, $fn = 50);
            
            // 内側をくり抜く(指が通る部分)
            rotate_extrude($fn = 100)
                translate([handle_radius * 2 + handle_thickness/2, 0, 0])
                    circle(r = handle_thickness - wall_thickness, $fn = 50);
        }
    }
}
i2 success
iter 2
9.9s · 1339/410t · $0.0508
diff vs i1: +15/-14
  // マグカップのパラメータ
  outer_diameter = 80;
  outer_radius = outer_diameter / 2;
  height = 100;
  wall_thickness = 4;
  bottom_thickness = 6;
  handle_radius = 12;
- handle_thickness = 8;
  
  // マグカップ本体
  difference() {
      // 外側の円柱
      cylinder(h = height, r = outer_radius, $fn = 100);
      
      // 内側をくり抜く
      translate([0, 0, bottom_thickness])
          cylinder(h = height - bottom_thickness + 1, r = outer_radius - wall_thickness, $fn = 100);
  }
  
  // 取手
- translate([outer_radius - handle_thickness/2, 0, height / 2]) {
-     rotate([90, 0, 0]) {
-         difference() {
-             // 外側のトーラス
-             rotate_extrude($fn = 100)
-                 translate([handle_radius * 2 + handle_thickness/2, 0, 0])
-                     circle(r = handle_thickness, $fn = 50);
-             
-             // 内側をくり抜く(指が通る部分)
-             rotate_extrude($fn = 100)
-                 translate([handle_radius * 2 + handle_thickness/2, 0, 0])
-                     circle(r = handle_thickness - wall_thickness, $fn = 50);
-         }
+ difference() {
+     union() {
+         // 取手本体(トーラス)
+         translate([outer_radius + handle_radius, 0, height / 2])
+             rotate([90, 0, 0])
+                 rotate_extrude($fn = 100)
+                     translate([handle_radius, 0, 0])
+                         circle(r = handle_radius, $fn = 50);
+         
+         // カップと取手の接続部分
+         translate([outer_radius - wall_thickness/2, -handle_radius, height/2 - handle_radius])
+             cube([wall_thickness + handle_radius, handle_radius * 2, handle_radius * 2]);
      }
+     
+     // カップ本体の形状で切り取る(きれいな接続のため)
+     cylinder(h = height, r = outer_radius - wall_thickness - 0.01, $fn = 100);
  }
SCAD (36 lines)
// マグカップのパラメータ
outer_diameter = 80;
outer_radius = outer_diameter / 2;
height = 100;
wall_thickness = 4;
bottom_thickness = 6;
handle_radius = 12;

// マグカップ本体
difference() {
    // 外側の円柱
    cylinder(h = height, r = outer_radius, $fn = 100);
    
    // 内側をくり抜く
    translate([0, 0, bottom_thickness])
        cylinder(h = height - bottom_thickness + 1, r = outer_radius - wall_thickness, $fn = 100);
}

// 取手
difference() {
    union() {
        // 取手本体(トーラス)
        translate([outer_radius + handle_radius, 0, height / 2])
            rotate([90, 0, 0])
                rotate_extrude($fn = 100)
                    translate([handle_radius, 0, 0])
                        circle(r = handle_radius, $fn = 50);
        
        // カップと取手の接続部分
        translate([outer_radius - wall_thickness/2, -handle_radius, height/2 - handle_radius])
            cube([wall_thickness + handle_radius, handle_radius * 2, handle_radius * 2]);
    }
    
    // カップ本体の形状で切り取る(きれいな接続のため)
    cylinder(h = height, r = outer_radius - wall_thickness - 0.01, $fn = 100);
}
i3 success
iter 3
9.9s · 1369/400t · $0.0505
diff vs i2: +16/-18
  // マグカップのパラメータ
  outer_diameter = 80;
  outer_radius = outer_diameter / 2;
  height = 100;
  wall_thickness = 4;
  bottom_thickness = 6;
- handle_radius = 12;
+ handle_thickness = 8;
+ handle_outer_radius = 20;
+ handle_inner_radius = 12;
  
  // マグカップ本体
  difference() {
      // 外側の円柱
      cylinder(h = height, r = outer_radius, $fn = 100);
      
      // 内側をくり抜く
      translate([0, 0, bottom_thickness])
          cylinder(h = height - bottom_thickness + 1, r = outer_radius - wall_thickness, $fn = 100);
  }
  
  // 取手
- difference() {
-     union() {
-         // 取手本体(トーラス)
-         translate([outer_radius + handle_radius, 0, height / 2])
-             rotate([90, 0, 0])
-                 rotate_extrude($fn = 100)
-                     translate([handle_radius, 0, 0])
-                         circle(r = handle_radius, $fn = 50);
-         
-         // カップと取手の接続部分
-         translate([outer_radius - wall_thickness/2, -handle_radius, height/2 - handle_radius])
-             cube([wall_thickness + handle_radius, handle_radius * 2, handle_radius * 2]);
-     }
-     
-     // カップ本体の形状で切り取る(きれいな接続のため)
-     cylinder(h = height, r = outer_radius - wall_thickness - 0.01, $fn = 100);
- }
+ translate([outer_radius, 0, height / 2])
+     rotate([90, 0, 0])
+         difference() {
+             // 取手の外側
+             cylinder(h = handle_thickness, r = handle_outer_radius, center = true, $fn = 100);
+             
+             // 取手の内側(指を通す穴)
+             cylinder(h = handle_thickness + 1, r = handle_inner_radius, center = true, $fn = 100);
+             
+             // カップ本体と重なる部分を切り取る
+             translate([-handle_outer_radius - outer_radius, 0, 0])
+                 cube([handle_outer_radius * 2, handle_thickness + 2, handle_outer_radius * 2 + 2], center = true);
+         }
SCAD (34 lines)
// マグカップのパラメータ
outer_diameter = 80;
outer_radius = outer_diameter / 2;
height = 100;
wall_thickness = 4;
bottom_thickness = 6;
handle_thickness = 8;
handle_outer_radius = 20;
handle_inner_radius = 12;

// マグカップ本体
difference() {
    // 外側の円柱
    cylinder(h = height, r = outer_radius, $fn = 100);
    
    // 内側をくり抜く
    translate([0, 0, bottom_thickness])
        cylinder(h = height - bottom_thickness + 1, r = outer_radius - wall_thickness, $fn = 100);
}

// 取手
translate([outer_radius, 0, height / 2])
    rotate([90, 0, 0])
        difference() {
            // 取手の外側
            cylinder(h = handle_thickness, r = handle_outer_radius, center = true, $fn = 100);
            
            // 取手の内側(指を通す穴)
            cylinder(h = handle_thickness + 1, r = handle_inner_radius, center = true, $fn = 100);
            
            // カップ本体と重なる部分を切り取る
            translate([-handle_outer_radius - outer_radius, 0, 0])
                cube([handle_outer_radius * 2, handle_thickness + 2, handle_outer_radius * 2 + 2], center = true);
        }