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:
parent
b11f073ca0
commit
90f920c138
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue