vibe-openscad

tier-2-offset-handle-mug / gemini-3.1-flash-lite

6 run / 累計 15.7s / 累計 $0.0062

gemini flash-lite 3.1 bare

bare (provider default effort)

run detail →
render
bare render of tier-2-offset-handle-mug
loading STL…
success 2.5s · 232/592t · $0.0009
SCAD (54 lines)
// マグカップのパラメータ
outer_d = 80;
inner_d = 70;
height = 90;
bottom_thickness = 6;
wall_thickness = 5;

// 取手のパラメータ
handle_inner_h = 30;
handle_inner_w = 25;
handle_thickness = 10;

module mug() {
    union() {
        // マグ本体
        difference() {
            cylinder(d = outer_d, h = height, $fn = 100);
            translate([0, 0, bottom_thickness])
                cylinder(d = inner_d, h = height - bottom_thickness + 0.1, $fn = 100);
        }

        // 取手
        handle_x_offset = outer_d / 2 - 1; // 本体と重なりを持たせる
        handle_total_w = handle_inner_w + handle_thickness * 2;
        handle_total_h = handle_inner_h + handle_thickness * 2;

        translate([handle_x_offset, 0, height / 2]) {
            difference() {
                // 取手の外形
                rotate([90, 0, 90])
                    linear_extrude(height = handle_thickness) {
                        hull() {
                            translate([0, handle_inner_h / 2, 0]) circle(d = handle_thickness);
                            translate([0, -handle_inner_h / 2, 0]) circle(d = handle_thickness);
                            translate([handle_inner_w + handle_thickness / 2, 0, 0]) 
                                scale([1, handle_total_h / handle_total_w]) circle(d = handle_total_w);
                        }
                    }
                // 取手の内側の穴
                rotate([90, 0, 90])
                    translate([handle_thickness / 2, 0, -1])
                        linear_extrude(height = handle_thickness + 2) {
                            hull() {
                                translate([0, handle_inner_h / 2, 0]) circle(d = handle_thickness);
                                translate([0, -handle_inner_h / 2, 0]) circle(d = handle_thickness);
                                translate([handle_inner_w - handle_thickness / 2, 0, 0]) circle(d = handle_thickness);
                            }
                        }
            }
        }
    }
}

mug();
パラメータ (8) —
スライダを動かすと openscad-wasm で再レンダリング

prompt

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

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

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

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

variant: thinking

off success →
off
1.9s · 232/272t · $0.0005
SCAD (33 lines)
// マグカップの設定
$fn = 100;

module mug() {
    union() {
        // 本体
        difference() {
            cylinder(d = 80, h = 90);
            translate([0, 0, 6])
                cylinder(d = 70, h = 85);
        }

        // 取手
        // 本体外径80mm (半径40mm) の +X 側に配置
        translate([40, 0, 45]) {
            rotate([0, 90, 0]) {
                difference() {
                    // 取手の外形 (D字形状)
                    union() {
                        cylinder(d = 40, h = 10);
                        translate([-20, 0, 0])
                            cube([20, 40, 10]);
                    }
                    // 取手の穴 (高さ30mm x 幅25mm)
                    translate([-20, 5, -1])
                        cube([25, 30, 12]);
                }
            }
        }
    }
}

mug();
adaptivenot run
—
dynamic (default) success →
dynamic
2.5s · 232/592t · $0.0009
SCAD (54 lines)
// マグカップのパラメータ
outer_d = 80;
inner_d = 70;
height = 90;
bottom_thickness = 6;
wall_thickness = 5;

// 取手のパラメータ
handle_inner_h = 30;
handle_inner_w = 25;
handle_thickness = 10;

module mug() {
    union() {
        // マグ本体
        difference() {
            cylinder(d = outer_d, h = height, $fn = 100);
            translate([0, 0, bottom_thickness])
                cylinder(d = inner_d, h = height - bottom_thickness + 0.1, $fn = 100);
        }

        // 取手
        handle_x_offset = outer_d / 2 - 1; // 本体と重なりを持たせる
        handle_total_w = handle_inner_w + handle_thickness * 2;
        handle_total_h = handle_inner_h + handle_thickness * 2;

        translate([handle_x_offset, 0, height / 2]) {
            difference() {
                // 取手の外形
                rotate([90, 0, 90])
                    linear_extrude(height = handle_thickness) {
                        hull() {
                            translate([0, handle_inner_h / 2, 0]) circle(d = handle_thickness);
                            translate([0, -handle_inner_h / 2, 0]) circle(d = handle_thickness);
                            translate([handle_inner_w + handle_thickness / 2, 0, 0]) 
                                scale([1, handle_total_h / handle_total_w]) circle(d = handle_total_w);
                        }
                    }
                // 取手の内側の穴
                rotate([90, 0, 90])
                    translate([handle_thickness / 2, 0, -1])
                        linear_extrude(height = handle_thickness + 2) {
                            hull() {
                                translate([0, handle_inner_h / 2, 0]) circle(d = handle_thickness);
                                translate([0, -handle_inner_h / 2, 0]) circle(d = handle_thickness);
                                translate([handle_inner_w - handle_thickness / 2, 0, 0]) circle(d = handle_thickness);
                            }
                        }
            }
        }
    }
}

mug();

iteration: iter-png

i1 success →
iter 1
2.7s · 1956/549t · $0.0013
diff vs bare: +20/-26
  // マグカップのパラメータ
  outer_d = 80;
  inner_d = 70;
  height = 90;
  bottom_thickness = 6;
- wall_thickness = 5;
  
  // 取手のパラメータ
  handle_inner_h = 30;
  handle_inner_w = 25;
- handle_thickness = 10;
+ handle_thickness = 10; // 取手の断面の厚み
  
  module mug() {
      union() {
          // マグ本体
          difference() {
              cylinder(d = outer_d, h = height, $fn = 100);
              translate([0, 0, bottom_thickness])
                  cylinder(d = inner_d, h = height - bottom_thickness + 0.1, $fn = 100);
          }
  
-         // 取手
-         handle_x_offset = outer_d / 2 - 1; // 本体と重なりを持たせる
-         handle_total_w = handle_inner_w + handle_thickness * 2;
-         handle_total_h = handle_inner_h + handle_thickness * 2;
- 
-         translate([handle_x_offset, 0, height / 2]) {
-             difference() {
-                 // 取手の外形
-                 rotate([90, 0, 90])
-                     linear_extrude(height = handle_thickness) {
+         // 取手 (D字形状: 外側が半円、本体側が直線)
+         // 本体外周(半径40mm)に接するように配置
+         handle_x_pos = outer_d / 2 - 2; 
+         
+         translate([handle_x_pos, 0, height / 2]) {
+             rotate([0, 90, 0]) {
+                 linear_extrude(height = handle_thickness) {
+                     difference() {
+                         // 取手の外形
                          hull() {
-                             translate([0, handle_inner_h / 2, 0]) circle(d = handle_thickness);
-                             translate([0, -handle_inner_h / 2, 0]) circle(d = handle_thickness);
-                             translate([handle_inner_w + handle_thickness / 2, 0, 0]) 
-                                 scale([1, handle_total_h / handle_total_w]) circle(d = handle_total_w);
+                             translate([0, handle_inner_h / 2, 0]) circle(d = handle_thickness, $fn = 50);
+                             translate([0, -handle_inner_h / 2, 0]) circle(d = handle_thickness, $fn = 50);
+                             translate([handle_inner_w, 0, 0]) circle(d = handle_inner_h + handle_thickness, $fn = 50);
                          }
-                     }
-                 // 取手の内側の穴
-                 rotate([90, 0, 90])
-                     translate([handle_thickness / 2, 0, -1])
-                         linear_extrude(height = handle_thickness + 2) {
-                             hull() {
-                                 translate([0, handle_inner_h / 2, 0]) circle(d = handle_thickness);
-                                 translate([0, -handle_inner_h / 2, 0]) circle(d = handle_thickness);
-                                 translate([handle_inner_w - handle_thickness / 2, 0, 0]) circle(d = handle_thickness);
-                             }
+                         // 取手の内側の穴
+                         hull() {
+                             translate([0, handle_inner_h / 2, 0]) circle(d = handle_thickness / 2, $fn = 50);
+                             translate([0, -handle_inner_h / 2, 0]) circle(d = handle_thickness / 2, $fn = 50);
+                             translate([handle_inner_w, 0, 0]) circle(d = handle_inner_h, $fn = 50);
                          }
+                     }
+                 }
              }
          }
      }
  }
  
  mug();
SCAD (48 lines)
// マグカップのパラメータ
outer_d = 80;
inner_d = 70;
height = 90;
bottom_thickness = 6;

// 取手のパラメータ
handle_inner_h = 30;
handle_inner_w = 25;
handle_thickness = 10; // 取手の断面の厚み

module mug() {
    union() {
        // マグ本体
        difference() {
            cylinder(d = outer_d, h = height, $fn = 100);
            translate([0, 0, bottom_thickness])
                cylinder(d = inner_d, h = height - bottom_thickness + 0.1, $fn = 100);
        }

        // 取手 (D字形状: 外側が半円、本体側が直線)
        // 本体外周(半径40mm)に接するように配置
        handle_x_pos = outer_d / 2 - 2; 
        
        translate([handle_x_pos, 0, height / 2]) {
            rotate([0, 90, 0]) {
                linear_extrude(height = handle_thickness) {
                    difference() {
                        // 取手の外形
                        hull() {
                            translate([0, handle_inner_h / 2, 0]) circle(d = handle_thickness, $fn = 50);
                            translate([0, -handle_inner_h / 2, 0]) circle(d = handle_thickness, $fn = 50);
                            translate([handle_inner_w, 0, 0]) circle(d = handle_inner_h + handle_thickness, $fn = 50);
                        }
                        // 取手の内側の穴
                        hull() {
                            translate([0, handle_inner_h / 2, 0]) circle(d = handle_thickness / 2, $fn = 50);
                            translate([0, -handle_inner_h / 2, 0]) circle(d = handle_thickness / 2, $fn = 50);
                            translate([handle_inner_w, 0, 0]) circle(d = handle_inner_h, $fn = 50);
                        }
                    }
                }
            }
        }
    }
}

mug();
i2 success →
iter 2
3.2s · 1913/525t · $0.0013
diff vs i1: +21/-21
  // マグカップのパラメータ
  outer_d = 80;
  inner_d = 70;
  height = 90;
  bottom_thickness = 6;
  
  // 取手のパラメータ
- handle_inner_h = 30;
- handle_inner_w = 25;
- handle_thickness = 10; // 取手の断面の厚み
+ handle_inner_h = 30; // 内側の高さ
+ handle_inner_w = 25; // 本体から外側への張り出し
+ handle_thick = 10;   // 取手の肉厚
  
  module mug() {
      union() {
          // マグ本体
          difference() {
              cylinder(d = outer_d, h = height, $fn = 100);
              translate([0, 0, bottom_thickness])
                  cylinder(d = inner_d, h = height - bottom_thickness + 0.1, $fn = 100);
          }
  
-         // 取手 (D字形状: 外側が半円、本体側が直線)
-         // 本体外周(半径40mm)に接するように配置
-         handle_x_pos = outer_d / 2 - 2; 
-         
-         translate([handle_x_pos, 0, height / 2]) {
+         // 取手
+         // 本体外径(半径40mm)に接触させるため、X軸方向に配置
+         // D字形状:本体側が直線、外側が半円
+         translate([outer_d / 2 - 1, 0, height / 2]) {
              rotate([0, 90, 0]) {
-                 linear_extrude(height = handle_thickness) {
-                     difference() {
-                         // 取手の外形
-                         hull() {
-                             translate([0, handle_inner_h / 2, 0]) circle(d = handle_thickness, $fn = 50);
-                             translate([0, -handle_inner_h / 2, 0]) circle(d = handle_thickness, $fn = 50);
-                             translate([handle_inner_w, 0, 0]) circle(d = handle_inner_h + handle_thickness, $fn = 50);
+                 rotate([0, 0, 90]) {
+                     linear_extrude(height = handle_thick) {
+                         difference() {
+                             // 取手の外形
+                             hull() {
+                                 translate([-handle_inner_h / 2, 0]) circle(d = handle_thick, $fn = 50);
+                                 translate([handle_inner_h / 2, 0]) circle(d = handle_thick, $fn = 50);
+                                 translate([0, handle_inner_w + handle_thick / 2]) circle(d = handle_thick, $fn = 50);
+                             }
+                             // 取手の内側の穴
+                             hull() {
+                                 translate([-handle_inner_h / 2 + (handle_thick/2), 0]) square([handle_inner_h - handle_thick, 0.1]);
+                                 translate([0, handle_inner_w]) circle(d = handle_inner_h - handle_thick, $fn = 50);
+                             }
                          }
-                         // 取手の内側の穴
-                         hull() {
-                             translate([0, handle_inner_h / 2, 0]) circle(d = handle_thickness / 2, $fn = 50);
-                             translate([0, -handle_inner_h / 2, 0]) circle(d = handle_thickness / 2, $fn = 50);
-                             translate([handle_inner_w, 0, 0]) circle(d = handle_inner_h, $fn = 50);
-                         }
                      }
                  }
              }
          }
      }
  }
  
  mug();
SCAD (48 lines)
// マグカップのパラメータ
outer_d = 80;
inner_d = 70;
height = 90;
bottom_thickness = 6;

// 取手のパラメータ
handle_inner_h = 30; // 内側の高さ
handle_inner_w = 25; // 本体から外側への張り出し
handle_thick = 10;   // 取手の肉厚

module mug() {
    union() {
        // マグ本体
        difference() {
            cylinder(d = outer_d, h = height, $fn = 100);
            translate([0, 0, bottom_thickness])
                cylinder(d = inner_d, h = height - bottom_thickness + 0.1, $fn = 100);
        }

        // 取手
        // 本体外径(半径40mm)に接触させるため、X軸方向に配置
        // D字形状:本体側が直線、外側が半円
        translate([outer_d / 2 - 1, 0, height / 2]) {
            rotate([0, 90, 0]) {
                rotate([0, 0, 90]) {
                    linear_extrude(height = handle_thick) {
                        difference() {
                            // 取手の外形
                            hull() {
                                translate([-handle_inner_h / 2, 0]) circle(d = handle_thick, $fn = 50);
                                translate([handle_inner_h / 2, 0]) circle(d = handle_thick, $fn = 50);
                                translate([0, handle_inner_w + handle_thick / 2]) circle(d = handle_thick, $fn = 50);
                            }
                            // 取手の内側の穴
                            hull() {
                                translate([-handle_inner_h / 2 + (handle_thick/2), 0]) square([handle_inner_h - handle_thick, 0.1]);
                                translate([0, handle_inner_w]) circle(d = handle_inner_h - handle_thick, $fn = 50);
                            }
                        }
                    }
                }
            }
        }
    }
}

mug();
i3 success →
iter 3
2.9s · 1889/525t · $0.0013
diff vs i2: +22/-20
  // マグカップのパラメータ
  outer_d = 80;
  inner_d = 70;
  height = 90;
  bottom_thickness = 6;
  
  // 取手のパラメータ
  handle_inner_h = 30; // 内側の高さ
- handle_inner_w = 25; // 本体から外側への張り出し
- handle_thick = 10;   // 取手の肉厚
+ handle_inner_w = 25; // 内側の幅(張り出し)
+ handle_thickness = 10; // 取手自体の肉厚
  
  module mug() {
      union() {
          // マグ本体
          difference() {
              cylinder(d = outer_d, h = height, $fn = 100);
              translate([0, 0, bottom_thickness])
                  cylinder(d = inner_d, h = height - bottom_thickness + 0.1, $fn = 100);
          }
  
-         // 取手
-         // 本体外径(半径40mm)に接触させるため、X軸方向に配置
-         // D字形状:本体側が直線、外側が半円
-         translate([outer_d / 2 - 1, 0, height / 2]) {
+         // 取手 (+X軸方向)
+         // 本体外径に確実に接合させるため、わずかに本体へめり込ませる
+         translate([outer_d / 2 - 2, 0, height / 2]) {
              rotate([0, 90, 0]) {
-                 rotate([0, 0, 90]) {
-                     linear_extrude(height = handle_thick) {
-                         difference() {
-                             // 取手の外形
-                             hull() {
-                                 translate([-handle_inner_h / 2, 0]) circle(d = handle_thick, $fn = 50);
-                                 translate([handle_inner_h / 2, 0]) circle(d = handle_thick, $fn = 50);
-                                 translate([0, handle_inner_w + handle_thick / 2]) circle(d = handle_thick, $fn = 50);
-                             }
-                             // 取手の内側の穴
-                             hull() {
-                                 translate([-handle_inner_h / 2 + (handle_thick/2), 0]) square([handle_inner_h - handle_thick, 0.1]);
-                                 translate([0, handle_inner_w]) circle(d = handle_inner_h - handle_thick, $fn = 50);
-                             }
+                 linear_extrude(handle_thickness, center = true) {
+                     // D字形状:本体側が直線、外側が半円
+                     // 内側の空間:高さ 30mm × 幅 25mm
+                     difference() {
+                         // 外形
+                         union() {
+                             translate([0, -handle_inner_h / 2 - handle_thickness]) 
+                                 square([handle_inner_w + handle_thickness, handle_inner_h + handle_thickness * 2]);
+                             translate([handle_inner_w + handle_thickness, 0]) 
+                                 circle(d = handle_inner_h + handle_thickness * 2, $fn = 50);
                          }
+                         // 空間 (D字の穴)
+                         union() {
+                             translate([0, -handle_inner_h / 2]) 
+                                 square([handle_inner_w, handle_inner_h]);
+                             translate([handle_inner_w, 0]) 
+                                 circle(d = handle_inner_h, $fn = 50);
+                         }
                      }
                  }
              }
          }
      }
  }
  
  mug();
SCAD (50 lines)
// マグカップのパラメータ
outer_d = 80;
inner_d = 70;
height = 90;
bottom_thickness = 6;

// 取手のパラメータ
handle_inner_h = 30; // 内側の高さ
handle_inner_w = 25; // 内側の幅(張り出し)
handle_thickness = 10; // 取手自体の肉厚

module mug() {
    union() {
        // マグ本体
        difference() {
            cylinder(d = outer_d, h = height, $fn = 100);
            translate([0, 0, bottom_thickness])
                cylinder(d = inner_d, h = height - bottom_thickness + 0.1, $fn = 100);
        }

        // 取手 (+X軸方向)
        // 本体外径に確実に接合させるため、わずかに本体へめり込ませる
        translate([outer_d / 2 - 2, 0, height / 2]) {
            rotate([0, 90, 0]) {
                linear_extrude(handle_thickness, center = true) {
                    // D字形状:本体側が直線、外側が半円
                    // 内側の空間:高さ 30mm × 幅 25mm
                    difference() {
                        // 外形
                        union() {
                            translate([0, -handle_inner_h / 2 - handle_thickness]) 
                                square([handle_inner_w + handle_thickness, handle_inner_h + handle_thickness * 2]);
                            translate([handle_inner_w + handle_thickness, 0]) 
                                circle(d = handle_inner_h + handle_thickness * 2, $fn = 50);
                        }
                        // 空間 (D字の穴)
                        union() {
                            translate([0, -handle_inner_h / 2]) 
                                square([handle_inner_w, handle_inner_h]);
                            translate([handle_inner_w, 0]) 
                                circle(d = handle_inner_h, $fn = 50);
                        }
                    }
                }
            }
        }
    }
}

mug();