vibe-openscad

tier-1-mug / gemini-2.5-flash

6 run / 累計 164.3s / 累計 $0.0107

gemini flash 2.5 bare

bare (provider default effort)

run detail →
render
bare render of tier-1-mug
loading STL…
success 27.5s · 142/609t · $0.0016
SCAD (56 lines)
// 定数定義
D_outer = 80;    // 外径
H_cup = 100;     // 高さ
thickness_wall = 4; // 肉厚
thickness_bottom = 6; // 底面の厚み

R_handle_tube = 12; // 取手のチューブの半径 (取手自体の半径)
D_finger_hole = 40; // 指が通る穴の直径 (適当な値、調整可能)

// 半径計算
R_outer = D_outer / 2;
R_inner = R_outer - thickness_wall;
R_finger_hole = D_finger_hole / 2;

// マグカップ本体
module mug_body() {
    difference() {
        // 外側の円筒
        cylinder(h = H_cup, r = R_outer, center = false, $fn = 60);

        // 内側をくり抜く円筒
        translate([0, 0, thickness_bottom]) {
            cylinder(h = H_cup - thickness_bottom, r = R_inner, center = false, $fn = 60);
        }
    }
}

// 取手
module handle() {
    // torusのr1は、チューブ中心が描く円の半径
    // torusのr2は、チューブ自体の半径 (R_handle_tube)
    // r1 = 指が通る穴の半径 + チューブの半径
    handle_torus_r1 = R_finger_hole + R_handle_tube;

    // 取手の中心X座標
    // カップの中心から: カップの外側半径 + 指が通る穴の半径 + チューブの半径
    handle_pos_x = R_outer + R_finger_hole + R_handle_tube;

    // 取手の中心Z座標 (カップの高さの中心)
    handle_pos_z = H_cup / 2;

    // torusはデフォルトでXY平面にリングの中心が来てZ軸に穴が開く。
    // これをY軸周りに90度回転させることで、穴がY軸を向き、リングがX軸方向に飛び出す形にする。
    // その後、所定の位置に平行移動する。
    translate([handle_pos_x, 0, handle_pos_z]) {
        rotate([0, 90, 0]) {
            torus(r = handle_torus_r1, r2 = R_handle_tube, $fn = 60);
        }
    }
}

// 全体を結合
union() {
    mug_body();
    handle();
}
パラメータ (6)
スライダを動かすと openscad-wasm で再レンダリング

prompt

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

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

variant: thinking

off success
off
2.9s · 142/340t · $0.0009
SCAD (33 lines)
// マグカップのパラメータ
outer_diameter = 80;
height = 100;
wall_thickness = 4;
bottom_thickness = 6;
handle_radius = 12; // ハンドルのリングの半径

// 計算される値
inner_diameter = outer_diameter - (wall_thickness * 2);
inner_height = height - bottom_thickness;

// カップ本体
difference() {
    // 外側の円筒
    cylinder(h = height, r = outer_diameter / 2, $fn = 64);

    // 内側をくり抜く円筒
    translate([0, 0, bottom_thickness]) {
        cylinder(h = inner_height, r = inner_diameter / 2, $fn = 64);
    }
}

// 取手
translate([outer_diameter / 2, 0, height / 2]) { // カップの側面に移動し、中心高さに配置
    rotate([0, 90, 0]) { // 円筒の軸をX方向に回転
        difference() {
            // 外側のリング部分
            cylinder(h = wall_thickness + handle_radius * 2, r = handle_radius + wall_thickness, $fn = 64);
            // 内側をくり抜く部分
            cylinder(h = wall_thickness + handle_radius * 2, r = handle_radius, $fn = 64);
        }
    }
}
adaptivenot run
dynamic (default) success
dynamic
27.5s · 142/609t · $0.0016
SCAD (56 lines)
// 定数定義
D_outer = 80;    // 外径
H_cup = 100;     // 高さ
thickness_wall = 4; // 肉厚
thickness_bottom = 6; // 底面の厚み

R_handle_tube = 12; // 取手のチューブの半径 (取手自体の半径)
D_finger_hole = 40; // 指が通る穴の直径 (適当な値、調整可能)

// 半径計算
R_outer = D_outer / 2;
R_inner = R_outer - thickness_wall;
R_finger_hole = D_finger_hole / 2;

// マグカップ本体
module mug_body() {
    difference() {
        // 外側の円筒
        cylinder(h = H_cup, r = R_outer, center = false, $fn = 60);

        // 内側をくり抜く円筒
        translate([0, 0, thickness_bottom]) {
            cylinder(h = H_cup - thickness_bottom, r = R_inner, center = false, $fn = 60);
        }
    }
}

// 取手
module handle() {
    // torusのr1は、チューブ中心が描く円の半径
    // torusのr2は、チューブ自体の半径 (R_handle_tube)
    // r1 = 指が通る穴の半径 + チューブの半径
    handle_torus_r1 = R_finger_hole + R_handle_tube;

    // 取手の中心X座標
    // カップの中心から: カップの外側半径 + 指が通る穴の半径 + チューブの半径
    handle_pos_x = R_outer + R_finger_hole + R_handle_tube;

    // 取手の中心Z座標 (カップの高さの中心)
    handle_pos_z = H_cup / 2;

    // torusはデフォルトでXY平面にリングの中心が来てZ軸に穴が開く。
    // これをY軸周りに90度回転させることで、穴がY軸を向き、リングがX軸方向に飛び出す形にする。
    // その後、所定の位置に平行移動する。
    translate([handle_pos_x, 0, handle_pos_z]) {
        rotate([0, 90, 0]) {
            torus(r = handle_torus_r1, r2 = R_handle_tube, $fn = 60);
        }
    }
}

// 全体を結合
union() {
    mug_body();
    handle();
}

iteration: iter-png

i1 success
iter 1
37.0s · 1071/654t · $0.0020
diff vs bare: +7/-6
  // 定数定義
  D_outer = 80;    // 外径
  H_cup = 100;     // 高さ
  thickness_wall = 4; // 肉厚
  thickness_bottom = 6; // 底面の厚み
  
  R_handle_tube = 12; // 取手のチューブの半径 (取手自体の半径)
  D_finger_hole = 40; // 指が通る穴の直径 (適当な値、調整可能)
  
  // 半径計算
  R_outer = D_outer / 2;
  R_inner = R_outer - thickness_wall;
  R_finger_hole = D_finger_hole / 2;
  
  // マグカップ本体
  module mug_body() {
      difference() {
          // 外側の円筒
          cylinder(h = H_cup, r = R_outer, center = false, $fn = 60);
  
          // 内側をくり抜く円筒
          translate([0, 0, thickness_bottom]) {
-             cylinder(h = H_cup - thickness_bottom, r = R_inner, center = false, $fn = 60);
+             // Z-fightingを避けるため、内側の円筒の高さをわずかに外側より高くする
+             cylinder(h = H_cup - thickness_bottom + 0.1, r = R_inner, center = false, $fn = 60);
          }
      }
  }
  
  // 取手
  module handle() {
      // torusのr1は、チューブ中心が描く円の半径
-     // torusのr2は、チューブ自体の半径 (R_handle_tube)
      // r1 = 指が通る穴の半径 + チューブの半径
      handle_torus_r1 = R_finger_hole + R_handle_tube;
  
      // 取手の中心X座標
-     // カップの中心から: カップの外側半径 + 指が通る穴の半径 + チューブの半径
-     handle_pos_x = R_outer + R_finger_hole + R_handle_tube;
+     // カップの表面(R_outer)に取手の内側が接するように配置する
+     // torusのX方向の厚みは 2 * R_handle_tube なので、中心X座標は R_outer + R_handle_tube となる
+     handle_pos_x = R_outer + R_handle_tube;
  
      // 取手の中心Z座標 (カップの高さの中心)
      handle_pos_z = H_cup / 2;
  
      // torusはデフォルトでXY平面にリングの中心が来てZ軸に穴が開く。
-     // これをY軸周りに90度回転させることで、穴がY軸を向き、リングがX軸方向に飛び出す形にする。
+     // これをY軸周りに90度回転させることで、穴がX軸を向き、リングがYZ平面に広がる形にする。
      // その後、所定の位置に平行移動する。
      translate([handle_pos_x, 0, handle_pos_z]) {
-         rotate([0, 90, 0]) {
+         rotate([0, 90, 0]) { // Y軸周りに90度回転
              torus(r = handle_torus_r1, r2 = R_handle_tube, $fn = 60);
          }
      }
  }
  
  // 全体を結合
  union() {
      mug_body();
      handle();
  }
SCAD (57 lines)
// 定数定義
D_outer = 80;    // 外径
H_cup = 100;     // 高さ
thickness_wall = 4; // 肉厚
thickness_bottom = 6; // 底面の厚み

R_handle_tube = 12; // 取手のチューブの半径 (取手自体の半径)
D_finger_hole = 40; // 指が通る穴の直径 (適当な値、調整可能)

// 半径計算
R_outer = D_outer / 2;
R_inner = R_outer - thickness_wall;
R_finger_hole = D_finger_hole / 2;

// マグカップ本体
module mug_body() {
    difference() {
        // 外側の円筒
        cylinder(h = H_cup, r = R_outer, center = false, $fn = 60);

        // 内側をくり抜く円筒
        translate([0, 0, thickness_bottom]) {
            // Z-fightingを避けるため、内側の円筒の高さをわずかに外側より高くする
            cylinder(h = H_cup - thickness_bottom + 0.1, r = R_inner, center = false, $fn = 60);
        }
    }
}

// 取手
module handle() {
    // torusのr1は、チューブ中心が描く円の半径
    // r1 = 指が通る穴の半径 + チューブの半径
    handle_torus_r1 = R_finger_hole + R_handle_tube;

    // 取手の中心X座標
    // カップの表面(R_outer)に取手の内側が接するように配置する
    // torusのX方向の厚みは 2 * R_handle_tube なので、中心X座標は R_outer + R_handle_tube となる
    handle_pos_x = R_outer + R_handle_tube;

    // 取手の中心Z座標 (カップの高さの中心)
    handle_pos_z = H_cup / 2;

    // torusはデフォルトでXY平面にリングの中心が来てZ軸に穴が開く。
    // これをY軸周りに90度回転させることで、穴がX軸を向き、リングがYZ平面に広がる形にする。
    // その後、所定の位置に平行移動する。
    translate([handle_pos_x, 0, handle_pos_z]) {
        rotate([0, 90, 0]) { // Y軸周りに90度回転
            torus(r = handle_torus_r1, r2 = R_handle_tube, $fn = 60);
        }
    }
}

// 全体を結合
union() {
    mug_body();
    handle();
}
i2 success
iter 2
29.9s · 1116/790t · $0.0023
diff vs i1: +11/-4
  // 定数定義
  D_outer = 80;    // 外径
  H_cup = 100;     // 高さ
  thickness_wall = 4; // 肉厚
  thickness_bottom = 6; // 底面の厚み
  
- R_handle_tube = 12; // 取手のチューブの半径 (取手自体の半径)
- D_finger_hole = 40; // 指が通る穴の直径 (適当な値、調整可能)
+ // 「外径方向に飛び出す半径 12mm の取手」について
+ // この表現は、取手のチューブ自体の半径が12mmなのか、あるいは取手全体がカップの外径から12mm飛び出すことを意味するのか、複数の解釈が可能です。
+ // 一般的なマグカップの取手の形状と、指が通せることを考慮し、今回は「取手全体がカップの外径から12mm飛び出す」と解釈します。
+ // その場合、取手のチューブの直径が12mmとなり、半径は 6mm となります。
+ R_handle_tube = 6; // 取手のチューブの半径
  
+ // 指が通る穴の直径
+ // 問題文に明示がないため、指が通りやすい適切なサイズとして40mmを維持します。
+ D_finger_hole = 40;
+ 
  // 半径計算
  R_outer = D_outer / 2;
  R_inner = R_outer - thickness_wall;
  R_finger_hole = D_finger_hole / 2;
  
  // マグカップ本体
  module mug_body() {
      difference() {
          // 外側の円筒
          cylinder(h = H_cup, r = R_outer, center = false, $fn = 60);
  
          // 内側をくり抜く円筒
          translate([0, 0, thickness_bottom]) {
              // Z-fightingを避けるため、内側の円筒の高さをわずかに外側より高くする
              cylinder(h = H_cup - thickness_bottom + 0.1, r = R_inner, center = false, $fn = 60);
          }
      }
  }
  
  // 取手
  module handle() {
      // torusのr1は、チューブ中心が描く円の半径
      // r1 = 指が通る穴の半径 + チューブの半径
      handle_torus_r1 = R_finger_hole + R_handle_tube;
  
      // 取手の中心X座標
-     // カップの表面(R_outer)に取手の内側が接するように配置する
-     // torusのX方向の厚みは 2 * R_handle_tube なので、中心X座標は R_outer + R_handle_tube となる
+     // カップの表面(R_outer)に取手の最も内側が接するように配置する
+     // torusのX方向の厚みは 2 * R_handle_tube なので、チューブの中心X座標は R_outer + R_handle_tube となる
      handle_pos_x = R_outer + R_handle_tube;
  
      // 取手の中心Z座標 (カップの高さの中心)
      handle_pos_z = H_cup / 2;
  
      // torusはデフォルトでXY平面にリングの中心が来てZ軸に穴が開く。
      // これをY軸周りに90度回転させることで、穴がX軸を向き、リングがYZ平面に広がる形にする。
      // その後、所定の位置に平行移動する。
      translate([handle_pos_x, 0, handle_pos_z]) {
          rotate([0, 90, 0]) { // Y軸周りに90度回転
              torus(r = handle_torus_r1, r2 = R_handle_tube, $fn = 60);
          }
      }
  }
  
  // 全体を結合
  union() {
      mug_body();
      handle();
  }
SCAD (64 lines)
// 定数定義
D_outer = 80;    // 外径
H_cup = 100;     // 高さ
thickness_wall = 4; // 肉厚
thickness_bottom = 6; // 底面の厚み

// 「外径方向に飛び出す半径 12mm の取手」について
// この表現は、取手のチューブ自体の半径が12mmなのか、あるいは取手全体がカップの外径から12mm飛び出すことを意味するのか、複数の解釈が可能です。
// 一般的なマグカップの取手の形状と、指が通せることを考慮し、今回は「取手全体がカップの外径から12mm飛び出す」と解釈します。
// その場合、取手のチューブの直径が12mmとなり、半径は 6mm となります。
R_handle_tube = 6; // 取手のチューブの半径

// 指が通る穴の直径
// 問題文に明示がないため、指が通りやすい適切なサイズとして40mmを維持します。
D_finger_hole = 40;

// 半径計算
R_outer = D_outer / 2;
R_inner = R_outer - thickness_wall;
R_finger_hole = D_finger_hole / 2;

// マグカップ本体
module mug_body() {
    difference() {
        // 外側の円筒
        cylinder(h = H_cup, r = R_outer, center = false, $fn = 60);

        // 内側をくり抜く円筒
        translate([0, 0, thickness_bottom]) {
            // Z-fightingを避けるため、内側の円筒の高さをわずかに外側より高くする
            cylinder(h = H_cup - thickness_bottom + 0.1, r = R_inner, center = false, $fn = 60);
        }
    }
}

// 取手
module handle() {
    // torusのr1は、チューブ中心が描く円の半径
    // r1 = 指が通る穴の半径 + チューブの半径
    handle_torus_r1 = R_finger_hole + R_handle_tube;

    // 取手の中心X座標
    // カップの表面(R_outer)に取手の最も内側が接するように配置する
    // torusのX方向の厚みは 2 * R_handle_tube なので、チューブの中心X座標は R_outer + R_handle_tube となる
    handle_pos_x = R_outer + R_handle_tube;

    // 取手の中心Z座標 (カップの高さの中心)
    handle_pos_z = H_cup / 2;

    // torusはデフォルトでXY平面にリングの中心が来てZ軸に穴が開く。
    // これをY軸周りに90度回転させることで、穴がX軸を向き、リングがYZ平面に広がる形にする。
    // その後、所定の位置に平行移動する。
    translate([handle_pos_x, 0, handle_pos_z]) {
        rotate([0, 90, 0]) { // Y軸周りに90度回転
            torus(r = handle_torus_r1, r2 = R_handle_tube, $fn = 60);
        }
    }
}

// 全体を結合
union() {
    mug_body();
    handle();
}
i3 success
iter 3
39.5s · 1252/810t · $0.0024
diff vs i2: +11/-10
  // 定数定義
  D_outer = 80;    // 外径
  H_cup = 100;     // 高さ
  thickness_wall = 4; // 肉厚
  thickness_bottom = 6; // 底面の厚み
  
  // 「外径方向に飛び出す半径 12mm の取手」について
- // この表現は、取手のチューブ自体の半径が12mmなのか、あるいは取手全体がカップの外径から12mm飛び出すことを意味するのか、複数の解釈が可能です。
- // 一般的なマグカップの取手の形状と、指が通せることを考慮し、今回は「取手全体がカップの外径から12mm飛び出す」と解釈します。
- // その場合、取手のチューブの直径が12mmとなり、半径は 6mm となります。
- R_handle_tube = 6; // 取手のチューブの半径
+ // 前回のコードでは「取手全体がカップの外径から12mm飛び出す」と解釈し、取手のチューブの半径を6mmとしましたが、
+ // 「半径 12mm の取手」という記述をより直接的に解釈し、今回は**取手のチューブ自体の半径を12mm**とします。
+ // (これにより、取手はかなり太くなりますが、指示に忠実に従います。)
+ R_handle_tube = 12; // 取手のチューブの半径
  
  // 指が通る穴の直径
  // 問題文に明示がないため、指が通りやすい適切なサイズとして40mmを維持します。
  D_finger_hole = 40;
  
  // 半径計算
  R_outer = D_outer / 2;
  R_inner = R_outer - thickness_wall;
  R_finger_hole = D_finger_hole / 2;
  
  // マグカップ本体
  module mug_body() {
      difference() {
          // 外側の円筒
          cylinder(h = H_cup, r = R_outer, center = false, $fn = 60);
  
          // 内側をくり抜く円筒
          translate([0, 0, thickness_bottom]) {
              // Z-fightingを避けるため、内側の円筒の高さをわずかに外側より高くする
              cylinder(h = H_cup - thickness_bottom + 0.1, r = R_inner, center = false, $fn = 60);
          }
      }
  }
  
  // 取手
  module handle() {
-     // torusのr1は、チューブ中心が描く円の半径
-     // r1 = 指が通る穴の半径 + チューブの半径
+     // torusのrは、チューブ中心が描く円の半径
+     // これは指が通る穴の半径とチューブの半径の和
      handle_torus_r1 = R_finger_hole + R_handle_tube;
  
      // 取手の中心X座標
-     // カップの表面(R_outer)に取手の最も内側が接するように配置する
-     // torusのX方向の厚みは 2 * R_handle_tube なので、チューブの中心X座標は R_outer + R_handle_tube となる
-     handle_pos_x = R_outer + R_handle_tube;
+     // 取手の最も内側の面がカップの外周 (R_outer) に接するように配置します。
+     // torusは回転後、その最も内側のX座標が (handle_pos_x - (handle_torus_r1 + R_handle_tube)) となるので、
+     // これが R_outer と等しくなるように handle_pos_x を計算します。
+     handle_pos_x = R_outer + handle_torus_r1 + R_handle_tube;
  
      // 取手の中心Z座標 (カップの高さの中心)
      handle_pos_z = H_cup / 2;
  
      // torusはデフォルトでXY平面にリングの中心が来てZ軸に穴が開く。
-     // これをY軸周りに90度回転させることで、穴がX軸を向き、リングがYZ平面に広がる形にする。
+     // これをY軸周りに90度回転させることで、穴がX軸を向き、リングがXZ平面に広がる形にする。
      // その後、所定の位置に平行移動する。
      translate([handle_pos_x, 0, handle_pos_z]) {
          rotate([0, 90, 0]) { // Y軸周りに90度回転
              torus(r = handle_torus_r1, r2 = R_handle_tube, $fn = 60);
          }
      }
  }
  
  // 全体を結合
  union() {
      mug_body();
      handle();
  }
SCAD (65 lines)
// 定数定義
D_outer = 80;    // 外径
H_cup = 100;     // 高さ
thickness_wall = 4; // 肉厚
thickness_bottom = 6; // 底面の厚み

// 「外径方向に飛び出す半径 12mm の取手」について
// 前回のコードでは「取手全体がカップの外径から12mm飛び出す」と解釈し、取手のチューブの半径を6mmとしましたが、
// 「半径 12mm の取手」という記述をより直接的に解釈し、今回は**取手のチューブ自体の半径を12mm**とします。
// (これにより、取手はかなり太くなりますが、指示に忠実に従います。)
R_handle_tube = 12; // 取手のチューブの半径

// 指が通る穴の直径
// 問題文に明示がないため、指が通りやすい適切なサイズとして40mmを維持します。
D_finger_hole = 40;

// 半径計算
R_outer = D_outer / 2;
R_inner = R_outer - thickness_wall;
R_finger_hole = D_finger_hole / 2;

// マグカップ本体
module mug_body() {
    difference() {
        // 外側の円筒
        cylinder(h = H_cup, r = R_outer, center = false, $fn = 60);

        // 内側をくり抜く円筒
        translate([0, 0, thickness_bottom]) {
            // Z-fightingを避けるため、内側の円筒の高さをわずかに外側より高くする
            cylinder(h = H_cup - thickness_bottom + 0.1, r = R_inner, center = false, $fn = 60);
        }
    }
}

// 取手
module handle() {
    // torusのrは、チューブ中心が描く円の半径
    // これは指が通る穴の半径とチューブの半径の和
    handle_torus_r1 = R_finger_hole + R_handle_tube;

    // 取手の中心X座標
    // 取手の最も内側の面がカップの外周 (R_outer) に接するように配置します。
    // torusは回転後、その最も内側のX座標が (handle_pos_x - (handle_torus_r1 + R_handle_tube)) となるので、
    // これが R_outer と等しくなるように handle_pos_x を計算します。
    handle_pos_x = R_outer + handle_torus_r1 + R_handle_tube;

    // 取手の中心Z座標 (カップの高さの中心)
    handle_pos_z = H_cup / 2;

    // torusはデフォルトでXY平面にリングの中心が来てZ軸に穴が開く。
    // これをY軸周りに90度回転させることで、穴がX軸を向き、リングがXZ平面に広がる形にする。
    // その後、所定の位置に平行移動する。
    translate([handle_pos_x, 0, handle_pos_z]) {
        rotate([0, 90, 0]) { // Y軸周りに90度回転
            torus(r = handle_torus_r1, r2 = R_handle_tube, $fn = 60);
        }
    }
}

// 全体を結合
union() {
    mug_body();
    handle();
}