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.
This commit is contained in:
parent
cc13934442
commit
6383ed9956
Notes:
blender-bot
2023-04-18 05:36:55 +02:00
Referenced by issue #106934, curve + geonodes + mirror modifier crash Referenced by issue #106258, 3.5: Candidates for corrective releases Referenced by issue #100749, Blender LTS: Maintenance Task 3.3
|
@ -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;
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue