12.1s
· 1515/626t · $0.0080
diff vs bare: +14/-18
// パラメータ
cup_outer_diameter = 80;
cup_height = 100;
cup_wall_thickness = 4;
cup_bottom_thickness = 6;
cup_inner_diameter = cup_outer_diameter - 2 * cup_wall_thickness;
cup_inner_height = cup_height - cup_bottom_thickness;
- handle_radius = 12;
- handle_thickness = 4; // リング取手の断面厚み
- handle_clearance = 6; // カップ外からの飛び出し余裕
+ handle_radius = 12; // リング取手半径
+ handle_thickness = 8; // 取手断面厚み 指が通るように
+ handle_clearance = 6; // カップ外からのオフセット(ゆとり)
module cup() {
difference() {
// 外側のカップ
cylinder(d=cup_outer_diameter, h=cup_height, $fn=128);
- // 内側 (飲み物が入る部分)
+ // 内側 (飲み物が入る部分) --- 上端ぎりぎりまでくり抜き
translate([0,0,cup_bottom_thickness])
- cylinder(d=cup_inner_diameter, h=cup_inner_height, $fn=128);
+ cylinder(d=cup_inner_diameter, h=cup_height-cup_bottom_thickness, $fn=128);
}
}
module handle() {
- // 取手の中心がカップ外周から sufficient clearance で外側に出るように配置
- // y方向(外径方向)にオフセット
- angle_span = 220; // 取手リングの円弧(度)
- angle_start = -angle_span/2;
- angle_end = angle_span/2;
- // 取手の中心位置
+ // 取手中心の位置:カップ外周から浮かせて、中心高さに
handle_center_offset = (cup_outer_diameter/2) + handle_radius + handle_clearance;
- // 取手(トーラスの一部)の断面円
+ // 取手はカップ側面に沿ってリング状の切れ目(カップ側で切り欠き)
+ angle_span = 220; // 円弧度数(約3/4リング)
+
+ // カップ本体と取手がきちんと繋がるよう、開始/終端をカップ内部に少しめり込ませる
rotate([90,0,0])
translate([0,handle_center_offset,cup_height/2])
rotate([0,0,90])
arc_torus(handle_radius, handle_thickness/2, angle_span);
}
- // 部分的なトーラス(円弧状の取手)
+ // 円弧状トーラス(部分リング取手)
module arc_torus(major_r, minor_r, angle) {
- // angle: 度数法で制限
- $fn_arc = 100; // 精度
- rotate_extrude(angle=angle, $fn=$fn_arc)
- translate([major_r,0,0])
+ rotate_extrude(angle=angle, $fn=100)
+ translate([major_r,0,0])
circle(r=minor_r, $fn=32);
}
- // マグカップ本体+取手
+ // --- 出力 ---
union() {
cup();
handle();
}
SCAD (50 lines)
// パラメータ
cup_outer_diameter = 80;
cup_height = 100;
cup_wall_thickness = 4;
cup_bottom_thickness = 6;
cup_inner_diameter = cup_outer_diameter - 2 * cup_wall_thickness;
cup_inner_height = cup_height - cup_bottom_thickness;
handle_radius = 12; // リング取手半径
handle_thickness = 8; // 取手断面厚み 指が通るように
handle_clearance = 6; // カップ外からのオフセット(ゆとり)
module cup() {
difference() {
// 外側のカップ
cylinder(d=cup_outer_diameter, h=cup_height, $fn=128);
// 内側 (飲み物が入る部分) --- 上端ぎりぎりまでくり抜き
translate([0,0,cup_bottom_thickness])
cylinder(d=cup_inner_diameter, h=cup_height-cup_bottom_thickness, $fn=128);
}
}
module handle() {
// 取手中心の位置:カップ外周から浮かせて、中心高さに
handle_center_offset = (cup_outer_diameter/2) + handle_radius + handle_clearance;
// 取手はカップ側面に沿ってリング状の切れ目(カップ側で切り欠き)
angle_span = 220; // 円弧度数(約3/4リング)
// カップ本体と取手がきちんと繋がるよう、開始/終端をカップ内部に少しめり込ませる
rotate([90,0,0])
translate([0,handle_center_offset,cup_height/2])
rotate([0,0,90])
arc_torus(handle_radius, handle_thickness/2, angle_span);
}
// 円弧状トーラス(部分リング取手)
module arc_torus(major_r, minor_r, angle) {
rotate_extrude(angle=angle, $fn=100)
translate([major_r,0,0])
circle(r=minor_r, $fn=32);
}
// --- 出力 ---
union() {
cup();
handle();
}
10.8s
· 1518/614t · $0.0079
diff vs i1: +15/-18
// パラメータ
cup_outer_diameter = 80;
cup_height = 100;
cup_wall_thickness = 4;
cup_bottom_thickness = 6;
cup_inner_diameter = cup_outer_diameter - 2 * cup_wall_thickness;
cup_inner_height = cup_height - cup_bottom_thickness;
handle_radius = 12; // リング取手半径
- handle_thickness = 8; // 取手断面厚み 指が通るように
- handle_clearance = 6; // カップ外からのオフセット(ゆとり)
+ handle_thickness = 8; // 取手の断面厚み
+ handle_offset = 4; // カップ外周から取手始点まで(ゆとり)
+ // カップ本体
module cup() {
difference() {
- // 外側のカップ
+ // 外側
cylinder(d=cup_outer_diameter, h=cup_height, $fn=128);
-
- // 内側 (飲み物が入る部分) --- 上端ぎりぎりまでくり抜き
+ // 内側(底厚さぶん、底上げ)
translate([0,0,cup_bottom_thickness])
cylinder(d=cup_inner_diameter, h=cup_height-cup_bottom_thickness, $fn=128);
}
}
+ // 取手本体:カップ外径に密着+十分外側に飛び出す
module handle() {
- // 取手中心の位置:カップ外周から浮かせて、中心高さに
- handle_center_offset = (cup_outer_diameter/2) + handle_radius + handle_clearance;
-
- // 取手はカップ側面に沿ってリング状の切れ目(カップ側で切り欠き)
- angle_span = 220; // 円弧度数(約3/4リング)
-
- // カップ本体と取手がきちんと繋がるよう、開始/終端をカップ内部に少しめり込ませる
- rotate([90,0,0])
- translate([0,handle_center_offset,cup_height/2])
- rotate([0,0,90])
- arc_torus(handle_radius, handle_thickness/2, angle_span);
+ angle_span = 220; // 円弧 span(だいたい3/4)
+ handle_center_dist = (cup_outer_diameter/2) + handle_radius + handle_offset;
+ // カップ中心高さに取手の中心、Y方向に配置
+ translate([0, 0, cup_height/2])
+ rotate([0,0,90])
+ translate([0, handle_center_dist, 0])
+ rotate([0,0,-angle_span/2])
+ arc_torus(handle_radius, handle_thickness/2, angle_span);
}
- // 円弧状トーラス(部分リング取手)
+ // 部分トーラス生成
module arc_torus(major_r, minor_r, angle) {
rotate_extrude(angle=angle, $fn=100)
translate([major_r,0,0])
circle(r=minor_r, $fn=32);
}
- // --- 出力 ---
union() {
cup();
handle();
}
SCAD (47 lines)
// パラメータ
cup_outer_diameter = 80;
cup_height = 100;
cup_wall_thickness = 4;
cup_bottom_thickness = 6;
cup_inner_diameter = cup_outer_diameter - 2 * cup_wall_thickness;
cup_inner_height = cup_height - cup_bottom_thickness;
handle_radius = 12; // リング取手半径
handle_thickness = 8; // 取手の断面厚み
handle_offset = 4; // カップ外周から取手始点まで(ゆとり)
// カップ本体
module cup() {
difference() {
// 外側
cylinder(d=cup_outer_diameter, h=cup_height, $fn=128);
// 内側(底厚さぶん、底上げ)
translate([0,0,cup_bottom_thickness])
cylinder(d=cup_inner_diameter, h=cup_height-cup_bottom_thickness, $fn=128);
}
}
// 取手本体:カップ外径に密着+十分外側に飛び出す
module handle() {
angle_span = 220; // 円弧 span(だいたい3/4)
handle_center_dist = (cup_outer_diameter/2) + handle_radius + handle_offset;
// カップ中心高さに取手の中心、Y方向に配置
translate([0, 0, cup_height/2])
rotate([0,0,90])
translate([0, handle_center_dist, 0])
rotate([0,0,-angle_span/2])
arc_torus(handle_radius, handle_thickness/2, angle_span);
}
// 部分トーラス生成
module arc_torus(major_r, minor_r, angle) {
rotate_extrude(angle=angle, $fn=100)
translate([major_r,0,0])
circle(r=minor_r, $fn=32);
}
union() {
cup();
handle();
}
6.2s
· 1459/547t · $0.0073
diff vs i2: +1/-1
// パラメータ
cup_outer_diameter = 80;
cup_height = 100;
cup_wall_thickness = 4;
cup_bottom_thickness = 6;
cup_inner_diameter = cup_outer_diameter - 2 * cup_wall_thickness;
cup_inner_height = cup_height - cup_bottom_thickness;
handle_radius = 12; // リング取手半径
handle_thickness = 8; // 取手の断面厚み
handle_offset = 4; // カップ外周から取手始点まで(ゆとり)
// カップ本体
module cup() {
difference() {
// 外側
cylinder(d=cup_outer_diameter, h=cup_height, $fn=128);
- // 内側(底厚さぶん、底上げ)
+ // 内側(底厚さ分だけ上げた位置から切り抜き、内部空間を作る)
translate([0,0,cup_bottom_thickness])
cylinder(d=cup_inner_diameter, h=cup_height-cup_bottom_thickness, $fn=128);
}
}
// 取手本体:カップ外径に密着+十分外側に飛び出す
module handle() {
angle_span = 220; // 円弧 span(だいたい3/4)
handle_center_dist = (cup_outer_diameter/2) + handle_radius + handle_offset;
// カップ中心高さに取手の中心、Y方向に配置
translate([0, 0, cup_height/2])
rotate([0,0,90])
translate([0, handle_center_dist, 0])
rotate([0,0,-angle_span/2])
arc_torus(handle_radius, handle_thickness/2, angle_span);
}
// 部分トーラス生成
module arc_torus(major_r, minor_r, angle) {
rotate_extrude(angle=angle, $fn=100)
translate([major_r,0,0])
circle(r=minor_r, $fn=32);
}
union() {
cup();
handle();
}
SCAD (47 lines)
// パラメータ
cup_outer_diameter = 80;
cup_height = 100;
cup_wall_thickness = 4;
cup_bottom_thickness = 6;
cup_inner_diameter = cup_outer_diameter - 2 * cup_wall_thickness;
cup_inner_height = cup_height - cup_bottom_thickness;
handle_radius = 12; // リング取手半径
handle_thickness = 8; // 取手の断面厚み
handle_offset = 4; // カップ外周から取手始点まで(ゆとり)
// カップ本体
module cup() {
difference() {
// 外側
cylinder(d=cup_outer_diameter, h=cup_height, $fn=128);
// 内側(底厚さ分だけ上げた位置から切り抜き、内部空間を作る)
translate([0,0,cup_bottom_thickness])
cylinder(d=cup_inner_diameter, h=cup_height-cup_bottom_thickness, $fn=128);
}
}
// 取手本体:カップ外径に密着+十分外側に飛び出す
module handle() {
angle_span = 220; // 円弧 span(だいたい3/4)
handle_center_dist = (cup_outer_diameter/2) + handle_radius + handle_offset;
// カップ中心高さに取手の中心、Y方向に配置
translate([0, 0, cup_height/2])
rotate([0,0,90])
translate([0, handle_center_dist, 0])
rotate([0,0,-angle_span/2])
arc_torus(handle_radius, handle_thickness/2, angle_span);
}
// 部分トーラス生成
module arc_torus(major_r, minor_r, angle) {
rotate_extrude(angle=angle, $fn=100)
translate([major_r,0,0])
circle(r=minor_r, $fn=32);
}
union() {
cup();
handle();
}