[Bf-blender-cvs] [6383ed9956c] master: Fix: Assert failure in mirror modifier

Hans Goudey noreply at git.blender.org
Tue Dec 20 21:07:52 CET 2022


Commit: 6383ed9956cc661cff0ecb16d37e042503b66bfa
Author: Hans Goudey
Date:   Tue Dec 20 14:07:14 2022 -0600
Branches: master
https://developer.blender.org/rB6383ed9956cc661cff0ecb16d37e042503b66bfa

Fix: Assert failure in mirror modifier

This was harmless because the function would just return null in release
builds, which was checked. Theoretically this vertex group mapping
shouldn't depend on the object type, but the vertex group API would
have to move away from the object-level first.

===================================================================

M	source/blender/blenkernel/intern/mesh_mirror.cc

===================================================================

diff --git a/source/blender/blenkernel/intern/mesh_mirror.cc b/source/blender/blenkernel/intern/mesh_mirror.cc
index 8830139a697..26a84d4d2b9 100644
--- a/source/blender/blenkernel/intern/mesh_mirror.cc
+++ b/source/blender/blenkernel/intern/mesh_mirror.cc
@@ -445,27 +445,27 @@ Mesh *BKE_mesh_mirror_apply_mirror_on_axis_for_modifier(MirrorModifierData *mmd,
   }
 
   /* handle vgroup stuff */
-  if ((mmd->flag & MOD_MIR_VGROUP) && CustomData_has_layer(&result->vdata, CD_MDEFORMVERT)) {
-    MDeformVert *dvert = BKE_mesh_deform_verts_for_write(result) + maxVerts;
-    int *flip_map = nullptr, flip_map_len = 0;
-
-    flip_map = BKE_object_defgroup_flip_map(ob, false, &flip_map_len);
-
-    if (flip_map) {
-      for (i = 0; i < maxVerts; dvert++, i++) {
-        /* merged vertices get both groups, others get flipped */
-        if (use_correct_order_on_merge && do_vtargetmap && (vtargetmap[i + maxVerts] != -1)) {
-          BKE_defvert_flip_merged(dvert - maxVerts, flip_map, flip_map_len);
-        }
-        else if (!use_correct_order_on_merge && do_vtargetmap && (vtargetmap[i] != -1)) {
-          BKE_defvert_flip_merged(dvert, flip_map, flip_map_len);
-        }
-        else {
-          BKE_defvert_flip(dvert, flip_map, flip_map_len);
+  if (BKE_object_supports_vertex_groups(ob)) {
+    if ((mmd->flag & MOD_MIR_VGROUP) && CustomData_has_layer(&result->vdata, CD_MDEFORMVERT)) {
+      MDeformVert *dvert = BKE_mesh_deform_verts_for_write(result) + maxVerts;
+      int flip_map_len = 0;
+      int *flip_map = BKE_object_defgroup_flip_map(ob, false, &flip_map_len);
+      if (flip_map) {
+        for (i = 0; i < maxVerts; dvert++, i++) {
+          /* merged vertices get both groups, others get flipped */
+          if (use_correct_order_on_merge && do_vtargetmap && (vtargetmap[i + maxVerts] != -1)) {
+            BKE_defvert_flip_merged(dvert - maxVerts, flip_map, flip_map_len);
+          }
+          else if (!use_correct_order_on_merge && do_vtargetmap && (vtargetmap[i] != -1)) {
+            BKE_defvert_flip_merged(dvert, flip_map, flip_map_len);
+          }
+          else {
+            BKE_defvert_flip(dvert, flip_map, flip_map_len);
+          }
         }
-      }
 
-      MEM_freeN(flip_map);
+        MEM_freeN(flip_map);
+      }
     }
   }



More information about the Bf-blender-cvs mailing list