17.9s
· 1954/1230t · $0.0405
diff vs bare: +13/-12
// L-bracket with countersunk holes
// パラメータ
width = 50; // 幅 (X方向)
depth = 40; // 水平面の奥行き / 垂直面の高さ
thickness = 3; // 板厚
hole_d = 4.5; // 貫通穴径 M4
cs_d = 8; // 皿座面径
cs_depth = 2; // 皿座面深さ
edge_off = 10; // 面の縁からの距離
- // 穴中心のX座標(左右対称)
- x1 = width/2 - 12.5;
- x2 = width/2 + 12.5;
+ // 穴中心のX座標(面の中心線X=25に対して左右対称)
+ x1 = width/2 - 12.5; // 12.5
+ x2 = width/2 + 12.5; // 37.5
- // 皿穴モジュール(Z軸方向に貫通、上面側に皿座)
- // 座面は -Z 側へ向く(穴は下から上へ貫通、上面が外側)
+ // 皿穴モジュール(+Z方向に貫通、上面=外側に円錐の皿座)
module countersunk_hole(plate_thickness) {
// 貫通穴
translate([0, 0, -1])
cylinder(h = plate_thickness + 2, d = hole_d, $fn = 48);
- // 皿座面(上面=外側)
+ // 皿座(円錐テーパー、上面=外側に向け広がる)
translate([0, 0, plate_thickness - cs_depth])
- cylinder(h = cs_depth + 1, d = cs_d, $fn = 48);
+ cylinder(h = cs_depth, d1 = hole_d, d2 = cs_d, $fn = 48);
+ // 念のため外側を少し抜く
+ translate([0, 0, plate_thickness - 0.001])
+ cylinder(h = 1, d = cs_d, $fn = 48);
}
module l_bracket() {
difference() {
union() {
// 水平面 (+Y方向に伸びる)
cube([width, depth, thickness]);
// 垂直面 (+Z方向に伸びる)
cube([width, thickness, depth]);
}
// --- 水平面の皿穴 (外側 = -Z 側) ---
- // Y位置: 縁(Y=depth)から10mm内側 -> Y = depth - 10
+ // Y位置: 縁(Y=depth)から10mm内側 -> Y = depth - edge_off
for (x = [x1, x2]) {
- translate([x, depth - edge_off, 0])
+ translate([x, depth - edge_off, thickness])
rotate([180, 0, 0])
- translate([0, 0, -thickness])
- countersunk_hole(thickness);
+ countersunk_hole(thickness);
}
// --- 垂直面の皿穴 (外側 = -Y 側) ---
- // Z位置: 縁(Z=depth)から10mm内側 -> Z = depth - 10
+ // Z位置: 縁(Z=depth)から10mm内側 -> Z = depth - edge_off
for (x = [x1, x2]) {
translate([x, thickness, depth - edge_off])
rotate([90, 0, 0])
countersunk_hole(thickness);
}
}
}
l_bracket();
SCAD (57 lines)
// L-bracket with countersunk holes
// パラメータ
width = 50; // 幅 (X方向)
depth = 40; // 水平面の奥行き / 垂直面の高さ
thickness = 3; // 板厚
hole_d = 4.5; // 貫通穴径 M4
cs_d = 8; // 皿座面径
cs_depth = 2; // 皿座面深さ
edge_off = 10; // 面の縁からの距離
// 穴中心のX座標(面の中心線X=25に対して左右対称)
x1 = width/2 - 12.5; // 12.5
x2 = width/2 + 12.5; // 37.5
// 皿穴モジュール(+Z方向に貫通、上面=外側に円錐の皿座)
module countersunk_hole(plate_thickness) {
// 貫通穴
translate([0, 0, -1])
cylinder(h = plate_thickness + 2, d = hole_d, $fn = 48);
// 皿座(円錐テーパー、上面=外側に向け広がる)
translate([0, 0, plate_thickness - cs_depth])
cylinder(h = cs_depth, d1 = hole_d, d2 = cs_d, $fn = 48);
// 念のため外側を少し抜く
translate([0, 0, plate_thickness - 0.001])
cylinder(h = 1, d = cs_d, $fn = 48);
}
module l_bracket() {
difference() {
union() {
// 水平面 (+Y方向に伸びる)
cube([width, depth, thickness]);
// 垂直面 (+Z方向に伸びる)
cube([width, thickness, depth]);
}
// --- 水平面の皿穴 (外側 = -Z 側) ---
// Y位置: 縁(Y=depth)から10mm内側 -> Y = depth - edge_off
for (x = [x1, x2]) {
translate([x, depth - edge_off, thickness])
rotate([180, 0, 0])
countersunk_hole(thickness);
}
// --- 垂直面の皿穴 (外側 = -Y 側) ---
// Z位置: 縁(Z=depth)から10mm内側 -> Z = depth - edge_off
for (x = [x1, x2]) {
translate([x, thickness, depth - edge_off])
rotate([90, 0, 0])
countersunk_hole(thickness);
}
}
}
l_bracket();
13.7s
· 2021/1200t · $0.0401
diff vs i1: +3/-2
// L-bracket with countersunk holes
// パラメータ
width = 50; // 幅 (X方向)
depth = 40; // 水平面の奥行き / 垂直面の高さ
thickness = 3; // 板厚
hole_d = 4.5; // 貫通穴径 M4
cs_d = 8; // 皿座面径
cs_depth = 2; // 皿座面深さ
edge_off = 10; // 面の縁からの距離
// 穴中心のX座標(面の中心線X=25に対して左右対称)
x1 = width/2 - 12.5; // 12.5
x2 = width/2 + 12.5; // 37.5
// 皿穴モジュール(+Z方向に貫通、上面=外側に円錐の皿座)
module countersunk_hole(plate_thickness) {
// 貫通穴
translate([0, 0, -1])
cylinder(h = plate_thickness + 2, d = hole_d, $fn = 48);
// 皿座(円錐テーパー、上面=外側に向け広がる)
translate([0, 0, plate_thickness - cs_depth])
cylinder(h = cs_depth, d1 = hole_d, d2 = cs_d, $fn = 48);
// 念のため外側を少し抜く
translate([0, 0, plate_thickness - 0.001])
cylinder(h = 1, d = cs_d, $fn = 48);
}
module l_bracket() {
difference() {
union() {
// 水平面 (+Y方向に伸びる)
cube([width, depth, thickness]);
// 垂直面 (+Z方向に伸びる)
cube([width, thickness, depth]);
}
// --- 水平面の皿穴 (外側 = -Z 側) ---
// Y位置: 縁(Y=depth)から10mm内側 -> Y = depth - edge_off
for (x = [x1, x2]) {
translate([x, depth - edge_off, thickness])
rotate([180, 0, 0])
countersunk_hole(thickness);
}
// --- 垂直面の皿穴 (外側 = -Y 側) ---
// Z位置: 縁(Z=depth)から10mm内側 -> Z = depth - edge_off
+ // 板のローカル+Z軸が外側(-Y方向)を向くように配置
for (x = [x1, x2]) {
- translate([x, thickness, depth - edge_off])
- rotate([90, 0, 0])
+ translate([x, 0, depth - edge_off])
+ rotate([-90, 0, 0])
countersunk_hole(thickness);
}
}
}
l_bracket();
SCAD (58 lines)
// L-bracket with countersunk holes
// パラメータ
width = 50; // 幅 (X方向)
depth = 40; // 水平面の奥行き / 垂直面の高さ
thickness = 3; // 板厚
hole_d = 4.5; // 貫通穴径 M4
cs_d = 8; // 皿座面径
cs_depth = 2; // 皿座面深さ
edge_off = 10; // 面の縁からの距離
// 穴中心のX座標(面の中心線X=25に対して左右対称)
x1 = width/2 - 12.5; // 12.5
x2 = width/2 + 12.5; // 37.5
// 皿穴モジュール(+Z方向に貫通、上面=外側に円錐の皿座)
module countersunk_hole(plate_thickness) {
// 貫通穴
translate([0, 0, -1])
cylinder(h = plate_thickness + 2, d = hole_d, $fn = 48);
// 皿座(円錐テーパー、上面=外側に向け広がる)
translate([0, 0, plate_thickness - cs_depth])
cylinder(h = cs_depth, d1 = hole_d, d2 = cs_d, $fn = 48);
// 念のため外側を少し抜く
translate([0, 0, plate_thickness - 0.001])
cylinder(h = 1, d = cs_d, $fn = 48);
}
module l_bracket() {
difference() {
union() {
// 水平面 (+Y方向に伸びる)
cube([width, depth, thickness]);
// 垂直面 (+Z方向に伸びる)
cube([width, thickness, depth]);
}
// --- 水平面の皿穴 (外側 = -Z 側) ---
// Y位置: 縁(Y=depth)から10mm内側 -> Y = depth - edge_off
for (x = [x1, x2]) {
translate([x, depth - edge_off, thickness])
rotate([180, 0, 0])
countersunk_hole(thickness);
}
// --- 垂直面の皿穴 (外側 = -Y 側) ---
// Z位置: 縁(Z=depth)から10mm内側 -> Z = depth - edge_off
// 板のローカル+Z軸が外側(-Y方向)を向くように配置
for (x = [x1, x2]) {
translate([x, 0, depth - edge_off])
rotate([-90, 0, 0])
countersunk_hole(thickness);
}
}
}
l_bracket();
19.0s
· 2051/1226t · $0.0409
diff vs i2: +15/-14
// L-bracket with countersunk holes
// パラメータ
width = 50; // 幅 (X方向)
depth = 40; // 水平面の奥行き / 垂直面の高さ
thickness = 3; // 板厚
hole_d = 4.5; // 貫通穴径 M4
cs_d = 8; // 皿座面径
cs_depth = 2; // 皿座面深さ
edge_off = 10; // 面の縁からの距離
- // 穴中心のX座標(面の中心線X=25に対して左右対称)
+ // 穴中心のX座標(面の中心線X=25に対して左右対称、間隔25mm)
x1 = width/2 - 12.5; // 12.5
x2 = width/2 + 12.5; // 37.5
- // 皿穴モジュール(+Z方向に貫通、上面=外側に円錐の皿座)
+ // 皿穴モジュール
+ // ローカル座標で板厚方向 +Z に貫通させる。
+ // 外側 = ローカル -Z 面(z=0 側)に皿座が広がるように作る。
module countersunk_hole(plate_thickness) {
// 貫通穴
translate([0, 0, -1])
cylinder(h = plate_thickness + 2, d = hole_d, $fn = 48);
- // 皿座(円錐テーパー、上面=外側に向け広がる)
- translate([0, 0, plate_thickness - cs_depth])
- cylinder(h = cs_depth, d1 = hole_d, d2 = cs_d, $fn = 48);
- // 念のため外側を少し抜く
- translate([0, 0, plate_thickness - 0.001])
- cylinder(h = 1, d = cs_d, $fn = 48);
+ // 皿座(外側=z=0側に向かって広がる円錐)
+ translate([0, 0, 0])
+ cylinder(h = cs_depth, d1 = cs_d, d2 = hole_d, $fn = 48);
}
module l_bracket() {
difference() {
union() {
// 水平面 (+Y方向に伸びる)
cube([width, depth, thickness]);
// 垂直面 (+Z方向に伸びる)
cube([width, thickness, depth]);
}
- // --- 水平面の皿穴 (外側 = -Z 側) ---
+ // --- 水平面の皿穴 (外側 = -Z 側 / 下面) ---
// Y位置: 縁(Y=depth)から10mm内側 -> Y = depth - edge_off
+ // 板のローカル+Z軸が +Z(板内方向)になるよう、回転なしで z=0 を下面に合わせる。
+ // ただし外側=z=0=下面に皿座が来るので回転不要。
for (x = [x1, x2]) {
- translate([x, depth - edge_off, thickness])
- rotate([180, 0, 0])
- countersunk_hole(thickness);
+ translate([x, depth - edge_off, 0])
+ countersunk_hole(thickness);
}
- // --- 垂直面の皿穴 (外側 = -Y 側) ---
+ // --- 垂直面の皿穴 (外側 = -Y 側 / 手前) ---
// Z位置: 縁(Z=depth)から10mm内側 -> Z = depth - edge_off
- // 板のローカル+Z軸が外側(-Y方向)を向くように配置
+ // 板のローカル+Z軸を +Y(板内方向)に向ける = X軸まわり -90度回転。
+ // これで z=0 面が -Y 側(外側)になり、皿座が外側に広がる。
for (x = [x1, x2]) {
translate([x, 0, depth - edge_off])
rotate([-90, 0, 0])
countersunk_hole(thickness);
}
}
}
l_bracket();
SCAD (59 lines)
// L-bracket with countersunk holes
// パラメータ
width = 50; // 幅 (X方向)
depth = 40; // 水平面の奥行き / 垂直面の高さ
thickness = 3; // 板厚
hole_d = 4.5; // 貫通穴径 M4
cs_d = 8; // 皿座面径
cs_depth = 2; // 皿座面深さ
edge_off = 10; // 面の縁からの距離
// 穴中心のX座標(面の中心線X=25に対して左右対称、間隔25mm)
x1 = width/2 - 12.5; // 12.5
x2 = width/2 + 12.5; // 37.5
// 皿穴モジュール
// ローカル座標で板厚方向 +Z に貫通させる。
// 外側 = ローカル -Z 面(z=0 側)に皿座が広がるように作る。
module countersunk_hole(plate_thickness) {
// 貫通穴
translate([0, 0, -1])
cylinder(h = plate_thickness + 2, d = hole_d, $fn = 48);
// 皿座(外側=z=0側に向かって広がる円錐)
translate([0, 0, 0])
cylinder(h = cs_depth, d1 = cs_d, d2 = hole_d, $fn = 48);
}
module l_bracket() {
difference() {
union() {
// 水平面 (+Y方向に伸びる)
cube([width, depth, thickness]);
// 垂直面 (+Z方向に伸びる)
cube([width, thickness, depth]);
}
// --- 水平面の皿穴 (外側 = -Z 側 / 下面) ---
// Y位置: 縁(Y=depth)から10mm内側 -> Y = depth - edge_off
// 板のローカル+Z軸が +Z(板内方向)になるよう、回転なしで z=0 を下面に合わせる。
// ただし外側=z=0=下面に皿座が来るので回転不要。
for (x = [x1, x2]) {
translate([x, depth - edge_off, 0])
countersunk_hole(thickness);
}
// --- 垂直面の皿穴 (外側 = -Y 側 / 手前) ---
// Z位置: 縁(Z=depth)から10mm内側 -> Z = depth - edge_off
// 板のローカル+Z軸を +Y(板内方向)に向ける = X軸まわり -90度回転。
// これで z=0 面が -Y 側(外側)になり、皿座が外側に広がる。
for (x = [x1, x2]) {
translate([x, 0, depth - edge_off])
rotate([-90, 0, 0])
countersunk_hole(thickness);
}
}
}
l_bracket();