Fix T53398: Surface deform modifier says that convex polygons are concave for big...
authorSergey Sharybin <sergey.vfx@gmail.com>
Mon, 18 Dec 2017 14:16:22 +0000 (15:16 +0100)
committerSergey Sharybin <sergey.vfx@gmail.com>
Mon, 18 Dec 2017 14:16:22 +0000 (15:16 +0100)
Dot-product for angle check need either to be divided by vectors magnitude or be
calculated for normalized vectors.

source/blender/modifiers/intern/MOD_surfacedeform.c

index b692137b604a913e008856dae502982f6ca4801d..f8bad417f0b41fc03b392f43539c8b0c8bbf0d7d 100644 (file)
@@ -331,11 +331,13 @@ BLI_INLINE int isPolyValid(const float coords[][2], const unsigned int nr)
 
        copy_v2_v2(prev_co, coords[nr - 1]);
        sub_v2_v2v2(prev_vec, prev_co, coords[nr - 2]);
+       normalize_v2(prev_vec);
 
        for (int i = 0; i < nr; i++) {
                sub_v2_v2v2(curr_vec, coords[i], prev_co);
 
-               if (len_squared_v2(curr_vec) < FLT_EPSILON) {
+               const float curr_len = normalize_v2(curr_vec);
+               if (curr_len < FLT_EPSILON) {
                        return MOD_SDEF_BIND_RESULT_OVERLAP_ERR;
                }