Fix T52176: Bevel doesn't correctly work with default empty Vgroup.
authorBastien Montagne <montagne29@wanadoo.fr>
Wed, 26 Jul 2017 14:23:24 +0000 (16:23 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Wed, 26 Jul 2017 14:23:24 +0000 (16:23 +0200)
`defvert_array_find_weight_safe()` was confusing 'invalid vgroup' and
'valid but totally empty vgroup' cases.

Note that this also affected at least ShrinkWrap and SimpleDeform
modifiers.

source/blender/blenkernel/intern/deform.c

index 69baaf5e58ae738067885010cd68acbbd17aed5e..eec8d2478da13b45568708643c06d2daa439fa2c 100644 (file)
@@ -621,8 +621,17 @@ float defvert_find_weight(const struct MDeformVert *dvert, const int defgroup)
  */
 float defvert_array_find_weight_safe(const struct MDeformVert *dvert, const int index, const int defgroup)
 {
-       if (defgroup == -1 || dvert == NULL)
+       /* Invalid defgroup index means the vgroup selected is invalid, does not exist, in that case it is OK to return 1.0
+        * (i.e. maximum weight, as if no vgroup was selected).
+        * But in case of valid defgroup and NULL dvert data pointer, it means that vgroup **is** valid,
+        * and just totally empty, so we shall return '0.0' value then!
+       */
+       if (defgroup == -1) {
                return 1.0f;
+       }
+       else if (dvert == NULL) {
+               return 0.0f;
+       }
 
        return defvert_find_weight(dvert + index, defgroup);
 }