iter-png-1/claude-fable-5 / tier-2-offset-handle-mug
success tier 2
bare (claude fable 5)
render
// 取手付きマグカップ(取手は +X 方向のみ)
$fn = 120;
// ===== パラメータ =====
outer_r = 40; // 外半径(外径 80mm)
inner_r = 35; // 内半径(内径 70mm、肉厚 5mm)
mug_h = 90; // 高さ
bottom_t = 6; // 底面の厚み
handle_t = 8; // 取手の棒の太さ
handle_d = 12; // 取手の奥行き(Y方向の幅)
open_w = 25; // 取手内側空間の幅(X方向、指3本分)
open_h = 30; // 取手内側空間の高さ(Z方向)
open_x0 = 42; // 内側開口の開始X位置(外壁のすぐ外)
handle_z = mug_h / 2; // 取手の中心高さ(マグ中央)
// ===== 取手の内側開口(D字の内側): 平らな辺 + 半円 =====
module handle_opening_2d() {
hull() {
// 本体側の直線部分
translate([open_x0, -open_h/2])
square([0.01, open_h]);
// 外側の半円部分
translate([open_x0 + open_w - open_h/2, 0])
circle(r = open_h/2);
}
}
// ===== D字リング断面(内側開口を太さ handle_t で囲む) =====
module handle_2d() {
difference() {
offset(r = handle_t) handle_opening_2d();
handle_opening_2d();
}
}
// ===== 取手本体(XZ平面のD字をY方向に押し出し、+X側面へ配置) =====
// 内側の縁は本体外壁より内側まで食い込ませており、
// 後段で飲み物用キャビティを差し引くことで内壁面はきれいに保たれる
module handle() {
translate([0, 0, handle_z])
rotate([90, 0, 0])
linear_extrude(height = handle_d, center = true)
handle_2d();
}
// ===== マグ全体 =====
module mug() {
difference() {
// 本体外形と取手を先に union → マニフォールドを保証
union() {
cylinder(r = outer_r, h = mug_h);
handle();
}
// 飲み物用の中空(底厚 6mm を残す)
// 取手の食い込み部分も同時にトリムされ、内壁は滑らか
translate([0, 0, bottom_t])
cylinder(r = inner_r, h = mug_h);
}
}
mug(); パラメータ (9) —
スライダを動かすと openscad-wasm で再レンダリング
iteration chain
各 iteration step は独立した benchmark run です。parentRunId で前段にリンクします。
← parent
bare/claude-fable-5 success → children (1)
prompt
OpenSCAD で、向きが指定されたマグカップを作ってください。 本体: - 外径 80mm、内径 70mm(肉厚 5mm)、高さ 90mm の円筒形マグ - 底面の厚みは 6mm - 内側は飲み物を入れられるよう中空 取手(handle): - マグの **+X 軸方向の側面のみ** に付ける(他の方向には付けない) - 取手は D 字形状(外側が半円、本体側が直線)で、本体外周にしっかり接続する - 取手の内側の空間は高さ 30mm × 幅 25mm(指 3 本ぐらい入る) - 取手はマグの高さ方向の中央付近に付ける - 本体と取手は確実に union され、マニフォールド(隙間や宙吊りなし)を保つ 完成したコード全体を ```openscad ... ``` のフェンスで囲んで出力してください。コードのみで、追加の説明は不要です。