83.4s
· 1338/4885t · $0.0101
diff vs bare: +5/-7
// OpenSCAD: マグカップ(外径80mm、高さ100mm、肉厚4mm、底厚6mm、リング状取手)
- // 単位: mm
+ // 修正: 取手を完全なリングに(angle=360)、取手断面を小さくして外周から十分にはみ出すよう調整
+ $fn = 200;
- $fn = 128;
-
outer_d = 80;
outer_r = outer_d / 2;
height = 100;
wall_thickness = 4;
inner_r = outer_r - wall_thickness;
bottom_thickness = 6;
cavity_height = height - bottom_thickness;
// 取手パラメータ
handle_protrusion = 12; // カップ外周からの突出量(外周からはみ出す距離)
- handle_tube_r = 10; // 取手断面の半径(チューブ半径)
- handle_angle = 220; // 取手の巻き角度(度)。180なら半円、220でやや多めに巻く
+ handle_tube_r = 3; // 取手断面の半径(チューブ半径) — 小さめにして指が通れるようにする
+ handle_angle = 360; // 取手の巻き角度(度)。リング状にするため360
handle_center_z = height/2; // 取手の高さ(カップ中心高さ)
// トーラス中心線半径(外側の最大は outer_r + handle_protrusion)
torus_R = outer_r + handle_protrusion - handle_tube_r;
// マグカップ本体(外殻 - 内空洞)
module mug_body() {
difference() {
// 外側の筒(底も含む)
translate([0,0,0]) cylinder(h = height, r = outer_r);
// 内側の空洞(底厚分だけ上げてくり抜く)
translate([0,0,bottom_thickness]) cylinder(h = cavity_height, r = inner_r);
}
}
- // リング状取手(トーラスのセグメント)
+ // リング状取手(トーラス)
module handle() {
- // 2DプロファイルをZ軸回転でトーラス(セグメント)を作成し、回転して垂直面に配置
translate([0,0,handle_center_z])
rotate([0,90,0]) // トーラスを縦向きにする(XZ平面に配置)
rotate_extrude(angle = handle_angle)
translate([torus_R, 0, 0])
circle(r = handle_tube_r);
}
// 完成モデル
union() {
mug_body();
handle();
}
SCAD (47 lines)
// OpenSCAD: マグカップ(外径80mm、高さ100mm、肉厚4mm、底厚6mm、リング状取手)
// 修正: 取手を完全なリングに(angle=360)、取手断面を小さくして外周から十分にはみ出すよう調整
$fn = 200;
outer_d = 80;
outer_r = outer_d / 2;
height = 100;
wall_thickness = 4;
inner_r = outer_r - wall_thickness;
bottom_thickness = 6;
cavity_height = height - bottom_thickness;
// 取手パラメータ
handle_protrusion = 12; // カップ外周からの突出量(外周からはみ出す距離)
handle_tube_r = 3; // 取手断面の半径(チューブ半径) — 小さめにして指が通れるようにする
handle_angle = 360; // 取手の巻き角度(度)。リング状にするため360
handle_center_z = height/2; // 取手の高さ(カップ中心高さ)
// トーラス中心線半径(外側の最大は outer_r + handle_protrusion)
torus_R = outer_r + handle_protrusion - handle_tube_r;
// マグカップ本体(外殻 - 内空洞)
module mug_body() {
difference() {
// 外側の筒(底も含む)
translate([0,0,0]) cylinder(h = height, r = outer_r);
// 内側の空洞(底厚分だけ上げてくり抜く)
translate([0,0,bottom_thickness]) cylinder(h = cavity_height, r = inner_r);
}
}
// リング状取手(トーラス)
module handle() {
translate([0,0,handle_center_z])
rotate([0,90,0]) // トーラスを縦向きにする(XZ平面に配置)
rotate_extrude(angle = handle_angle)
translate([torus_R, 0, 0])
circle(r = handle_tube_r);
}
// 完成モデル
union() {
mug_body();
handle();
}
render_error
72.0s
· 1333/4495t · $0.0093
openscad stl render failed (exit 1): ERROR: Parser error: syntax error in file ../../../../../tmp/render-KbuU52/input.scad, line 41
Can't parse file '/tmp/render-KbuU52/input.scad'!
diff vs i1: +22/-8
// OpenSCAD: マグカップ(外径80mm、高さ100mm、肉厚4mm、底厚6mm、リング状取手)
- // 修正: 取手を完全なリングに(angle=360)、取手断面を小さくして外周から十分にはみ出すよう調整
+ // 修正: 取手の向きと配置を修正(rotate_extrude の後で回転・配置する)
+ // 高解像度
$fn = 200;
outer_d = 80;
outer_r = outer_d / 2;
height = 100;
wall_thickness = 4;
inner_r = outer_r - wall_thickness;
bottom_thickness = 6;
cavity_height = height - bottom_thickness;
// 取手パラメータ
handle_protrusion = 12; // カップ外周からの突出量(外周からはみ出す距離)
- handle_tube_r = 3; // 取手断面の半径(チューブ半径) — 小さめにして指が通れるようにする
+ handle_tube_r = 3; // 取手断面の半径(チューブ半径)
handle_angle = 360; // 取手の巻き角度(度)。リング状にするため360
handle_center_z = height/2; // 取手の高さ(カップ中心高さ)
// トーラス中心線半径(外側の最大は outer_r + handle_protrusion)
torus_R = outer_r + handle_protrusion - handle_tube_r;
// マグカップ本体(外殻 - 内空洞)
module mug_body() {
difference() {
// 外側の筒(底も含む)
- translate([0,0,0]) cylinder(h = height, r = outer_r);
+ cylinder(h = height, r = outer_r);
// 内側の空洞(底厚分だけ上げてくり抜く)
- translate([0,0,bottom_thickness]) cylinder(h = cavity_height, r = inner_r);
+ // 少し余分に高さを持たせて上面の干渉を防ぐ
+ translate([0,0,bottom_thickness]) cylinder(h = cavity_height + 1, r = inner_r);
}
}
// リング状取手(トーラス)
+ // rotate_extrude でトーラスを作成した後に回転して垂直面に配置
module handle() {
- translate([0,0,handle_center_z])
- rotate([0,90,0]) // トーラスを縦向きにする(XZ平面に配置)
- rotate_extrude(angle = handle_angle)
+ // まず Z 軸周りに回転してトーラスを作る(XY 平面上の円を回転)
+ torus = rotate_extrude(angle = handle_angle)
translate([torus_R, 0, 0])
circle(r = handle_tube_r);
+
+ // トーラスをカップ側面に対して垂直に配置し、中心高さに移動
+ translate([0,0,handle_center_z])
+ rotate([0,90,0])
+ children();
}
// 完成モデル
union() {
mug_body();
- handle();
+ // ハンドルを配置(children() を使うため直接展開)
+ // ここで先に定義した torus を展開
+ // (OpenSCAD は module 内での children() 使用を許容しないため、直接同等の構造を記述)
+ translate([0,0,handle_center_z])
+ rotate([0,90,0])
+ rotate_extrude(angle = handle_angle)
+ translate([torus_R, 0, 0])
+ circle(r = handle_tube_r);
}
SCAD (61 lines)
// OpenSCAD: マグカップ(外径80mm、高さ100mm、肉厚4mm、底厚6mm、リング状取手)
// 修正: 取手の向きと配置を修正(rotate_extrude の後で回転・配置する)
// 高解像度
$fn = 200;
outer_d = 80;
outer_r = outer_d / 2;
height = 100;
wall_thickness = 4;
inner_r = outer_r - wall_thickness;
bottom_thickness = 6;
cavity_height = height - bottom_thickness;
// 取手パラメータ
handle_protrusion = 12; // カップ外周からの突出量(外周からはみ出す距離)
handle_tube_r = 3; // 取手断面の半径(チューブ半径)
handle_angle = 360; // 取手の巻き角度(度)。リング状にするため360
handle_center_z = height/2; // 取手の高さ(カップ中心高さ)
// トーラス中心線半径(外側の最大は outer_r + handle_protrusion)
torus_R = outer_r + handle_protrusion - handle_tube_r;
// マグカップ本体(外殻 - 内空洞)
module mug_body() {
difference() {
// 外側の筒(底も含む)
cylinder(h = height, r = outer_r);
// 内側の空洞(底厚分だけ上げてくり抜く)
// 少し余分に高さを持たせて上面の干渉を防ぐ
translate([0,0,bottom_thickness]) cylinder(h = cavity_height + 1, r = inner_r);
}
}
// リング状取手(トーラス)
// rotate_extrude でトーラスを作成した後に回転して垂直面に配置
module handle() {
// まず Z 軸周りに回転してトーラスを作る(XY 平面上の円を回転)
torus = rotate_extrude(angle = handle_angle)
translate([torus_R, 0, 0])
circle(r = handle_tube_r);
// トーラスをカップ側面に対して垂直に配置し、中心高さに移動
translate([0,0,handle_center_z])
rotate([0,90,0])
children();
}
// 完成モデル
union() {
mug_body();
// ハンドルを配置(children() を使うため直接展開)
// ここで先に定義した torus を展開
// (OpenSCAD は module 内での children() 使用を許容しないため、直接同等の構造を記述)
translate([0,0,handle_center_z])
rotate([0,90,0])
rotate_extrude(angle = handle_angle)
translate([torus_R, 0, 0])
circle(r = handle_tube_r);
}
37.3s
· 958/2704t · $0.0056
diff vs i2: +19/-30
// OpenSCAD: マグカップ(外径80mm、高さ100mm、肉厚4mm、底厚6mm、リング状取手)
- // 修正: 取手の向きと配置を修正(rotate_extrude の後で回転・配置する)
- // 高解像度
- $fn = 200;
+ $fn = 160;
+ // 本体パラメータ
outer_d = 80;
outer_r = outer_d / 2;
height = 100;
wall_thickness = 4;
inner_r = outer_r - wall_thickness;
bottom_thickness = 6;
- cavity_height = height - bottom_thickness;
+ cavity_height = height - bottom_thickness + 0.1; // 余裕を少し持たせる
// 取手パラメータ
- handle_protrusion = 12; // カップ外周からの突出量(外周からはみ出す距離)
- handle_tube_r = 3; // 取手断面の半径(チューブ半径)
- handle_angle = 360; // 取手の巻き角度(度)。リング状にするため360
- handle_center_z = height/2; // 取手の高さ(カップ中心高さ)
+ handle_protrusion = 12; // カップ外周からの突出量(外周からの最大は outer_r + handle_protrusion)
+ handle_tube_r = 3.5; // 取手断面の半径(チューブ半径)
+ handle_angle = 360; // リング状にするため360度
+ handle_center_z = height / 2; // 取手の中心高さ(カップ中心高さ)
- // トーラス中心線半径(外側の最大は outer_r + handle_protrusion)
+ // トーラス中心線半径(トーラスの中心線が原点からどれだけ離れているか)
torus_R = outer_r + handle_protrusion - handle_tube_r;
- // マグカップ本体(外殻 - 内空洞)
+ // マグカップ本体(外殻から内側をくり抜く)
module mug_body() {
difference() {
- // 外側の筒(底も含む)
+ // 外側の筒(底を含む)
cylinder(h = height, r = outer_r);
// 内側の空洞(底厚分だけ上げてくり抜く)
- // 少し余分に高さを持たせて上面の干渉を防ぐ
- translate([0,0,bottom_thickness]) cylinder(h = cavity_height + 1, r = inner_r);
+ translate([0, 0, bottom_thickness])
+ cylinder(h = cavity_height, r = inner_r + 0.01);
}
}
- // リング状取手(トーラス)
- // rotate_extrude でトーラスを作成した後に回転して垂直面に配置
+ // リング状取手(トーラス)を作成して側面に配置
module handle() {
- // まず Z 軸周りに回転してトーラスを作る(XY 平面上の円を回転)
- torus = rotate_extrude(angle = handle_angle)
+ // まず rotate_extrude でトーラスを作る(XY平面の円を回転)
+ // その後、Y軸回りに90度回転して垂直面に配置し、高さを合わせる
+ translate([0, 0, handle_center_z])
+ rotate([0, 90, 0])
+ rotate_extrude(angle = handle_angle)
translate([torus_R, 0, 0])
circle(r = handle_tube_r);
-
- // トーラスをカップ側面に対して垂直に配置し、中心高さに移動
- translate([0,0,handle_center_z])
- rotate([0,90,0])
- children();
}
// 完成モデル
union() {
mug_body();
- // ハンドルを配置(children() を使うため直接展開)
- // ここで先に定義した torus を展開
- // (OpenSCAD は module 内での children() 使用を許容しないため、直接同等の構造を記述)
- translate([0,0,handle_center_z])
- rotate([0,90,0])
- rotate_extrude(angle = handle_angle)
- translate([torus_R, 0, 0])
- circle(r = handle_tube_r);
+ handle();
}
SCAD (50 lines)
// OpenSCAD: マグカップ(外径80mm、高さ100mm、肉厚4mm、底厚6mm、リング状取手)
$fn = 160;
// 本体パラメータ
outer_d = 80;
outer_r = outer_d / 2;
height = 100;
wall_thickness = 4;
inner_r = outer_r - wall_thickness;
bottom_thickness = 6;
cavity_height = height - bottom_thickness + 0.1; // 余裕を少し持たせる
// 取手パラメータ
handle_protrusion = 12; // カップ外周からの突出量(外周からの最大は outer_r + handle_protrusion)
handle_tube_r = 3.5; // 取手断面の半径(チューブ半径)
handle_angle = 360; // リング状にするため360度
handle_center_z = height / 2; // 取手の中心高さ(カップ中心高さ)
// トーラス中心線半径(トーラスの中心線が原点からどれだけ離れているか)
torus_R = outer_r + handle_protrusion - handle_tube_r;
// マグカップ本体(外殻から内側をくり抜く)
module mug_body() {
difference() {
// 外側の筒(底を含む)
cylinder(h = height, r = outer_r);
// 内側の空洞(底厚分だけ上げてくり抜く)
translate([0, 0, bottom_thickness])
cylinder(h = cavity_height, r = inner_r + 0.01);
}
}
// リング状取手(トーラス)を作成して側面に配置
module handle() {
// まず rotate_extrude でトーラスを作る(XY平面の円を回転)
// その後、Y軸回りに90度回転して垂直面に配置し、高さを合わせる
translate([0, 0, handle_center_z])
rotate([0, 90, 0])
rotate_extrude(angle = handle_angle)
translate([torus_R, 0, 0])
circle(r = handle_tube_r);
}
// 完成モデル
union() {
mug_body();
handle();
}