Fix T49296, assert failure in Bevel code.

The mesh interpolation function failed to fill a fractions-of-the-way
array properly when the distances are very small but nonzero.
This commit is contained in:
Howard Trickey 2016-09-12 07:27:29 -04:00
parent fb2c435d86
commit 0f8f494d63
Notes: blender-bot 2023-02-14 07:37:25 +01:00
Referenced by issue #49296, Assert failure in Bevel code
1 changed files with 8 additions and 2 deletions

View File

@ -2194,10 +2194,13 @@ static void fill_vmesh_fracs(VMesh *vm, float *frac, int i)
total += len_v3v3(mesh_vert(vm, i, 0, k)->co, mesh_vert(vm, i, 0, k + 1)->co);
frac[k + 1] = total;
}
if (total > BEVEL_EPSILON) {
if (total > 0.0f) {
for (k = 1; k <= ns; k++)
frac[k] /= total;
}
else {
frac[ns] = 1.0f;
}
}
/* Like fill_vmesh_fracs but want fractions for profile points of bndv, with ns segments */
@ -2215,11 +2218,14 @@ static void fill_profile_fracs(BevelParams *bp, BoundVert *bndv, float *frac, in
frac[k + 1] = total;
copy_v3_v3(co, nextco);
}
if (total > BEVEL_EPSILON) {
if (total > 0.0f) {
for (k = 1; k <= ns; k++) {
frac[k] /= total;
}
}
else {
frac[ns] = 1.0f;
}
}
/* Return i such that frac[i] <= f <= frac[i + 1], where frac[n] == 1.0