From 0f8f494d637cab3802239120456c3eb58011cdff Mon Sep 17 00:00:00 2001 From: Howard Trickey Date: Mon, 12 Sep 2016 07:27:29 -0400 Subject: 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. --- source/blender/bmesh/tools/bmesh_bevel.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'source/blender/bmesh') diff --git a/source/blender/bmesh/tools/bmesh_bevel.c b/source/blender/bmesh/tools/bmesh_bevel.c index 1dfb9dee8eb..45fbfdd1767 100644 --- a/source/blender/bmesh/tools/bmesh_bevel.c +++ b/source/blender/bmesh/tools/bmesh_bevel.c @@ -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 -- cgit v1.2.3