mirror of
https://github.com/BelfrySCAD/BOSL2.git
synced 2025-02-18 01:19:45 +00:00
Bugfix for bezier_segment_length() for unusual bezier curves.
This commit is contained in:
parent
6ec5013835
commit
b048570f7a
2 changed files with 20 additions and 11 deletions
29
beziers.scad
29
beziers.scad
|
@ -161,17 +161,26 @@ function bezier_segment_closest_point(curve, pt, max_err=0.01, u=0, end_u=1) =
|
||||||
// echo(bezier_segment_length(bez));
|
// echo(bezier_segment_length(bez));
|
||||||
function bezier_segment_length(curve, start_u=0, end_u=1, max_deflect=0.01) =
|
function bezier_segment_length(curve, start_u=0, end_u=1, max_deflect=0.01) =
|
||||||
let(
|
let(
|
||||||
mid_u=lerp(start_u, end_u, 0.5),
|
segs = len(curve) * 2,
|
||||||
sp = bez_point(curve,start_u),
|
path = [
|
||||||
bez_mp = bez_point(curve,mid_u),
|
for (i=[0:1:segs])
|
||||||
ep = bez_point(curve,end_u),
|
let(u=lerp(start_u, end_u, i/segs))
|
||||||
lin_mp = lerp(sp,ep,0.5),
|
bez_point(curve,u)
|
||||||
defl = norm(bez_mp-lin_mp)
|
],
|
||||||
|
defl = max([
|
||||||
|
for (i=idx(path,end=-3)) let(
|
||||||
|
mp = (path[i] + path[i+2]) / 2
|
||||||
|
) norm(path[i+1] - mp)
|
||||||
|
]),
|
||||||
|
mid_u = lerp(start_u, end_u, 0.5)
|
||||||
)
|
)
|
||||||
((end_u-start_u) >= 0.125 || defl > max_deflect)? (
|
defl <= max_deflect? path_length(path) :
|
||||||
bezier_segment_length(curve, start_u, mid_u, max_deflect) +
|
sum([
|
||||||
bezier_segment_length(curve, mid_u, end_u, max_deflect)
|
for (i=[0:1:segs-1]) let(
|
||||||
) : norm(ep-sp);
|
su = lerp(start_u, end_u, i/segs),
|
||||||
|
eu = lerp(start_u, end_u, (i+1)/segs)
|
||||||
|
) bezier_segment_length(curve, su, eu, max_deflect)
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
BOSL_VERSION = [2,0,163];
|
BOSL_VERSION = [2,0,164];
|
||||||
|
|
||||||
|
|
||||||
// Section: BOSL Library Version Functions
|
// Section: BOSL Library Version Functions
|
||||||
|
|
Loading…
Reference in a new issue