diff options
author | Sergey Sharybin <sergey@blender.org> | 2021-03-29 16:46:48 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey@blender.org> | 2021-03-29 17:19:22 +0300 |
commit | 51f8dbe081f61825c532f5acc3d0918561b6e142 (patch) | |
tree | 5b8cf378df04e3e27bd2427cc6a33e87407b4a70 /source/blender/blenkernel/intern/mask.c | |
parent | 10e05bb413947c16f61e0c429b2a3883ab95c983 (diff) |
Mask: Fix possible nan values in the weight interpolation
Noticed while looking into animation data being created as per
steps to reproduce bug in T76872.
Diffstat (limited to 'source/blender/blenkernel/intern/mask.c')
-rw-r--r-- | source/blender/blenkernel/intern/mask.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/mask.c b/source/blender/blenkernel/intern/mask.c index 3a3ad9ef051..a3f122115d8 100644 --- a/source/blender/blenkernel/intern/mask.c +++ b/source/blender/blenkernel/intern/mask.c @@ -1893,10 +1893,17 @@ static void interp_weights_uv_v2_calc(float r_uv[2], const float pt_a[2], const float pt_b[2]) { + const float segment_len = len_v2v2(pt_a, pt_b); + if (segment_len == 0.0f) { + r_uv[0] = 1.0f; + r_uv[1] = 0.0f; + return; + } + float pt_on_line[2]; r_uv[0] = closest_to_line_v2(pt_on_line, pt, pt_a, pt_b); - r_uv[1] = (len_v2v2(pt_on_line, pt) / len_v2v2(pt_a, pt_b)) * + r_uv[1] = (len_v2v2(pt_on_line, pt) / segment_len) * /* This line only sets the sign. */ ((line_point_side_v2(pt_a, pt_b, pt) < 0.0f) ? -1.0f : 1.0f); } |