vibe-openscad

tier-2-offset-handle-mug / claude-opus-4-1-20250805

5 run / 累計 43.7s / 累計 $0.2111

claude opus 4.1 2025-08-05 bare

bare (provider default effort)

run detail →
render
bare render of tier-2-offset-handle-mug
loading STL…
success 7.7s · 330/309t · $0.0281
SCAD (30 lines)
$fn = 100;

// マグカップ本体
difference() {
    // 外側の円筒
    cylinder(h = 90, r = 40, center = false);
    // 内側をくり抜く
    translate([0, 0, 6])
        cylinder(h = 90, r = 35, center = false);
}

// 取手(+X方向)
translate([40, 0, 45]) {
    difference() {
        union() {
            // 取手の外側形状
            rotate([90, 0, 0])
                cylinder(h = 8, r = 30, center = true);
            // 本体との接続部分
            translate([-15, 0, 0])
                cube([15, 8, 40], center = true);
        }
        // 取手の内側をくり抜く
        rotate([90, 0, 0])
            cylinder(h = 10, r = 22, center = true);
        // 本体側を切り取る
        translate([-50, 0, 0])
            cube([50, 20, 80], center = true);
    }
}

prompt

OpenSCAD で、向きが指定されたマグカップを作ってください。

本体:
- 外径 80mm、内径 70mm(肉厚 5mm)、高さ 90mm の円筒形マグ
- 底面の厚みは 6mm
- 内側は飲み物を入れられるよう中空

取手(handle):
- マグの **+X 軸方向の側面のみ** に付ける(他の方向には付けない)
- 取手は D 字形状(外側が半円、本体側が直線)で、本体外周にしっかり接続する
- 取手の内側の空間は高さ 30mm × 幅 25mm(指 3 本ぐらい入る)
- 取手はマグの高さ方向の中央付近に付ける
- 本体と取手は確実に union され、マニフォールド(隙間や宙吊りなし)を保つ

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

variant: thinking

off (default) success
off
7.7s · 330/309t · $0.0281
SCAD (30 lines)
$fn = 100;

// マグカップ本体
difference() {
    // 外側の円筒
    cylinder(h = 90, r = 40, center = false);
    // 内側をくり抜く
    translate([0, 0, 6])
        cylinder(h = 90, r = 35, center = false);
}

// 取手(+X方向)
translate([40, 0, 45]) {
    difference() {
        union() {
            // 取手の外側形状
            rotate([90, 0, 0])
                cylinder(h = 8, r = 30, center = true);
            // 本体との接続部分
            translate([-15, 0, 0])
                cube([15, 8, 40], center = true);
        }
        // 取手の内側をくり抜く
        rotate([90, 0, 0])
            cylinder(h = 10, r = 22, center = true);
        // 本体側を切り取る
        translate([-50, 0, 0])
            cube([50, 20, 80], center = true);
    }
}
adaptivenot run
dynamicnot run

iteration: iter-png

i1 success
iter 1
9.2s · 1395/352t · $0.0473
diff vs bare: +18/-14
  $fn = 100;
  
  // マグカップ本体
  difference() {
      // 外側の円筒
      cylinder(h = 90, r = 40, center = false);
      // 内側をくり抜く
      translate([0, 0, 6])
          cylinder(h = 90, r = 35, center = false);
  }
  
  // 取手(+X方向)
- translate([40, 0, 45]) {
+ translate([35, 0, 45]) {
      difference() {
-         union() {
-             // 取手の外側形状
-             rotate([90, 0, 0])
-                 cylinder(h = 8, r = 30, center = true);
-             // 本体との接続部分
-             translate([-15, 0, 0])
-                 cube([15, 8, 40], center = true);
+         // 取手の外側形状(D字型)
+         hull() {
+             // 本体側の接続部
+             translate([0, -4, -15])
+                 cube([10, 8, 30]);
+             // 外側の半円部分
+             translate([32.5, 0, 0])
+                 rotate([90, 0, 0])
+                     cylinder(h = 8, r = 15, center = true);
          }
-         // 取手の内側をくり抜く
-         rotate([90, 0, 0])
-             cylinder(h = 10, r = 22, center = true);
-         // 本体側を切り取る
-         translate([-50, 0, 0])
-             cube([50, 20, 80], center = true);
+         // 取手の内側をくり抜く(高さ30mm × 幅25mm)
+         hull() {
+             translate([5, -5, -15])
+                 cube([1, 10, 30]);
+             translate([30, 0, 0])
+                 rotate([90, 0, 0])
+                     cylinder(h = 10, r = 15, center = true);
+         }
      }
  }
SCAD (34 lines)
$fn = 100;

// マグカップ本体
difference() {
    // 外側の円筒
    cylinder(h = 90, r = 40, center = false);
    // 内側をくり抜く
    translate([0, 0, 6])
        cylinder(h = 90, r = 35, center = false);
}

// 取手(+X方向)
translate([35, 0, 45]) {
    difference() {
        // 取手の外側形状(D字型)
        hull() {
            // 本体側の接続部
            translate([0, -4, -15])
                cube([10, 8, 30]);
            // 外側の半円部分
            translate([32.5, 0, 0])
                rotate([90, 0, 0])
                    cylinder(h = 8, r = 15, center = true);
        }
        // 取手の内側をくり抜く(高さ30mm × 幅25mm)
        hull() {
            translate([5, -5, -15])
                cube([1, 10, 30]);
            translate([30, 0, 0])
                rotate([90, 0, 0])
                    cylinder(h = 10, r = 15, center = true);
        }
    }
}
i2 success
iter 2
9.5s · 1438/457t · $0.0558
diff vs i1: +21/-12
  $fn = 100;
  
  // マグカップ本体
  difference() {
      // 外側の円筒
      cylinder(h = 90, r = 40, center = false);
      // 内側をくり抜く
      translate([0, 0, 6])
          cylinder(h = 90, r = 35, center = false);
  }
  
  // 取手(+X方向)
- translate([35, 0, 45]) {
+ translate([40, 0, 45]) {
      difference() {
          // 取手の外側形状(D字型)
-         hull() {
-             // 本体側の接続部
-             translate([0, -4, -15])
-                 cube([10, 8, 30]);
-             // 外側の半円部分
-             translate([32.5, 0, 0])
-                 rotate([90, 0, 0])
-                     cylinder(h = 8, r = 15, center = true);
+         union() {
+             // 本体との接続部分(上側)
+             translate([-5, -4, 10])
+                 cube([8, 8, 8]);
+             // 本体との接続部分(下側)
+             translate([-5, -4, -18])
+                 cube([8, 8, 8]);
+             // D字の主要部分
+             hull() {
+                 // 本体側の垂直部分
+                 translate([-2, -4, -15])
+                     cube([4, 8, 30]);
+                 // 外側の半円部分
+                 translate([25, 0, 0])
+                     rotate([90, 0, 0])
+                         cylinder(h = 8, r = 17.5, center = true);
+             }
          }
          // 取手の内側をくり抜く(高さ30mm × 幅25mm)
          hull() {
-             translate([5, -5, -15])
+             translate([0, -5, -15])
                  cube([1, 10, 30]);
-             translate([30, 0, 0])
+             translate([25, 0, 0])
                  rotate([90, 0, 0])
-                     cylinder(h = 10, r = 15, center = true);
+                     cylinder(h = 10, r = 12.5, center = true);
          }
      }
  }
SCAD (43 lines)
$fn = 100;

// マグカップ本体
difference() {
    // 外側の円筒
    cylinder(h = 90, r = 40, center = false);
    // 内側をくり抜く
    translate([0, 0, 6])
        cylinder(h = 90, r = 35, center = false);
}

// 取手(+X方向)
translate([40, 0, 45]) {
    difference() {
        // 取手の外側形状(D字型)
        union() {
            // 本体との接続部分(上側)
            translate([-5, -4, 10])
                cube([8, 8, 8]);
            // 本体との接続部分(下側)
            translate([-5, -4, -18])
                cube([8, 8, 8]);
            // D字の主要部分
            hull() {
                // 本体側の垂直部分
                translate([-2, -4, -15])
                    cube([4, 8, 30]);
                // 外側の半円部分
                translate([25, 0, 0])
                    rotate([90, 0, 0])
                        cylinder(h = 8, r = 17.5, center = true);
            }
        }
        // 取手の内側をくり抜く(高さ30mm × 幅25mm)
        hull() {
            translate([0, -5, -15])
                cube([1, 10, 30]);
            translate([25, 0, 0])
                rotate([90, 0, 0])
                    cylinder(h = 10, r = 12.5, center = true);
        }
    }
}
i3 success
iter 3
9.6s · 1543/381t · $0.0517
diff vs i2: +25/-32
  $fn = 100;
  
  // マグカップ本体
- difference() {
-     // 外側の円筒
-     cylinder(h = 90, r = 40, center = false);
-     // 内側をくり抜く
-     translate([0, 0, 6])
-         cylinder(h = 90, r = 35, center = false);
- }
- 
- // 取手(+X方向)
- translate([40, 0, 45]) {
+ union() {
      difference() {
-         // 取手の外側形状(D字型)
-         union() {
-             // 本体との接続部分(上側)
-             translate([-5, -4, 10])
-                 cube([8, 8, 8]);
-             // 本体との接続部分(下側)
-             translate([-5, -4, -18])
-                 cube([8, 8, 8]);
-             // D字の主要部分
+         // 外側の円筒
+         cylinder(h = 90, r = 40, center = false);
+         // 内側をくり抜く
+         translate([0, 0, 6])
+             cylinder(h = 90, r = 35, center = false);
+     }
+ 
+     // 取手(+X方向)
+     translate([37, 0, 45]) {
+         difference() {
+             // 取手の外側形状(D字型)
              hull() {
-                 // 本体側の垂直部分
-                 translate([-2, -4, -15])
-                     cube([4, 8, 30]);
+                 // 本体側の接続部分(太めにして確実に接続)
+                 translate([0, -6, -17.5])
+                     cube([6, 12, 35]);
                  // 外側の半円部分
-                 translate([25, 0, 0])
+                 translate([20, 0, 0])
                      rotate([90, 0, 0])
-                         cylinder(h = 8, r = 17.5, center = true);
+                         cylinder(h = 12, r = 17.5, center = true);
              }
+             // 取手の内側をくり抜く(高さ30mm × 幅25mm)
+             hull() {
+                 translate([3, -7, -15])
+                     cube([1, 14, 30]);
+                 translate([20, 0, 0])
+                     rotate([90, 0, 0])
+                         cylinder(h = 14, r = 15, center = true);
+             }
          }
-         // 取手の内側をくり抜く(高さ30mm × 幅25mm)
-         hull() {
-             translate([0, -5, -15])
-                 cube([1, 10, 30]);
-             translate([25, 0, 0])
-                 rotate([90, 0, 0])
-                     cylinder(h = 10, r = 12.5, center = true);
-         }
      }
  }
SCAD (36 lines)
$fn = 100;

// マグカップ本体
union() {
    difference() {
        // 外側の円筒
        cylinder(h = 90, r = 40, center = false);
        // 内側をくり抜く
        translate([0, 0, 6])
            cylinder(h = 90, r = 35, center = false);
    }

    // 取手(+X方向)
    translate([37, 0, 45]) {
        difference() {
            // 取手の外側形状(D字型)
            hull() {
                // 本体側の接続部分(太めにして確実に接続)
                translate([0, -6, -17.5])
                    cube([6, 12, 35]);
                // 外側の半円部分
                translate([20, 0, 0])
                    rotate([90, 0, 0])
                        cylinder(h = 12, r = 17.5, center = true);
            }
            // 取手の内側をくり抜く(高さ30mm × 幅25mm)
            hull() {
                translate([3, -7, -15])
                    cube([1, 14, 30]);
                translate([20, 0, 0])
                    rotate([90, 0, 0])
                        cylinder(h = 14, r = 15, center = true);
            }
        }
    }
}