mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-08-23 23:03:23 +02:00
support 3D triangles
This commit is contained in:
@@ -14,7 +14,7 @@ function c3_a(r1, r2, r3) =
|
|||||||
acos((b ^ 2 + c ^ 2 - a ^ 2) / (2 * b * c));
|
acos((b ^ 2 + c ^ 2 - a ^ 2) / (2 * b * c));
|
||||||
|
|
||||||
|
|
||||||
function pack_one(min_r, center, sinv, leng_cv, unit_cv, pre_leng, pre_r) =
|
function pack_one(min_r, center, v, sinv, leng_cv, unit_cv, pre_leng, pre_r) =
|
||||||
let(
|
let(
|
||||||
r2 = r2(sinv, leng_cv, pre_leng),
|
r2 = r2(sinv, leng_cv, pre_leng),
|
||||||
leng = pre_leng + r2,
|
leng = pre_leng + r2,
|
||||||
@@ -23,13 +23,13 @@ function pack_one(min_r, center, sinv, leng_cv, unit_cv, pre_leng, pre_r) =
|
|||||||
r3 = c3_r(pre_r, r2),
|
r3 = c3_r(pre_r, r2),
|
||||||
a = c3_a(pre_r, r2, r3),
|
a = c3_a(pre_r, r2, r3),
|
||||||
vta = unit_cv * (r3 + r2),
|
vta = unit_cv * (r3 + r2),
|
||||||
r3_ct1 = r2_ct + ptf_rotate(vta, a),
|
r3_ct1 = r2_ct + ptf_rotate(vta, a, v),
|
||||||
r3_ct2 = r2_ct + ptf_rotate(vta, -a)
|
r3_ct2 = r2_ct + ptf_rotate(vta, -a, v)
|
||||||
)
|
)
|
||||||
r2 > min_r ?
|
r2 > min_r ?
|
||||||
concat(
|
concat(
|
||||||
[[r2_ct, r2], if(r3 > min_r) each [[r3_ct1, r3], [r3_ct2, r3]]],
|
[[r2_ct, r2], if(r3 > min_r) each [[r3_ct1, r3], [r3_ct2, r3]]],
|
||||||
pack_one(min_r, center, sinv, leng_cv, unit_cv, r2 + leng, r2)
|
pack_one(min_r, center, v, sinv, leng_cv, unit_cv, r2 + leng, r2)
|
||||||
)
|
)
|
||||||
: [];
|
: [];
|
||||||
|
|
||||||
@@ -39,7 +39,9 @@ function tri_circle_packing(shape_pts, min_r) =
|
|||||||
s1 = shape_pts[1] - shape_pts[0],
|
s1 = shape_pts[1] - shape_pts[0],
|
||||||
s2 = shape_pts[2] - shape_pts[1],
|
s2 = shape_pts[2] - shape_pts[1],
|
||||||
s3 = shape_pts[0] - shape_pts[2],
|
s3 = shape_pts[0] - shape_pts[2],
|
||||||
R = abs(cross(s1, s2)) / (norm(s1) + norm(s2) + norm(s3)),
|
cross_value = cross(s1, s2),
|
||||||
|
nv = is_num(cross_value) ? [0, 0, cross_value] : cross_value,
|
||||||
|
R = abs(norm(nv)) / (norm(s1) + norm(s2) + norm(s3)),
|
||||||
|
|
||||||
ca = center - shape_pts[0],
|
ca = center - shape_pts[0],
|
||||||
leng_ca = norm(ca),
|
leng_ca = norm(ca),
|
||||||
@@ -58,8 +60,8 @@ function tri_circle_packing(shape_pts, min_r) =
|
|||||||
)
|
)
|
||||||
[
|
[
|
||||||
[center, R],
|
[center, R],
|
||||||
each pack_one(min_r, center, sina, leng_ca, unit_ca, R, R),
|
each pack_one(min_r, center, nv, sina, leng_ca, unit_ca, R, R),
|
||||||
each pack_one(min_r, center, sinb, leng_cb, unit_cb, R, R),
|
each pack_one(min_r, center, nv, sinb, leng_cb, unit_cb, R, R),
|
||||||
each pack_one(min_r, center, sinc, leng_cc, unit_cc, R, R),
|
each pack_one(min_r, center, nv, sinc, leng_cc, unit_cc, R, R),
|
||||||
];
|
];
|
||||||
|
|
Reference in New Issue
Block a user