diff options
Diffstat (limited to 'source/blender/blenkernel/intern/deform.c')
-rw-r--r-- | source/blender/blenkernel/intern/deform.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c index c3f3516c714..a6c5ddf0285 100644 --- a/source/blender/blenkernel/intern/deform.c +++ b/source/blender/blenkernel/intern/deform.c @@ -1060,12 +1060,15 @@ static bool data_transfer_layersmapping_vgroups_multisrc_to_dst( idx_src++; if (idx_dst < idx_src) { - if (!use_create) { - return false; + if (use_create) { + /* Create as much vgroups as necessary! */ + for (; idx_dst < idx_src; idx_dst++) { + BKE_object_defgroup_add(ob_dst); + } } - /* Create as much vgroups as necessary! */ - for (; idx_dst < idx_src; idx_dst++) { - BKE_object_defgroup_add(ob_dst); + else { + /* Otherwise, just try to map what we can with existing dst vgroups. */ + idx_src = idx_dst; } } else if (use_delete && idx_dst > idx_src) { @@ -1115,14 +1118,14 @@ static bool data_transfer_layersmapping_vgroups_multisrc_to_dst( } if ((idx_dst = defgroup_name_index(ob_dst, dg_src->name)) == -1) { - if (!use_create) { - if (r_map) { - BLI_freelistN(r_map); - } - return false; + if (use_create) { + BKE_object_defgroup_add_name(ob_dst, dg_src->name); + idx_dst = ob_dst->actdef - 1; + } + else { + /* If we are not allowed to create missing dst vgroups, just skip matching src one. */ + continue; } - BKE_object_defgroup_add_name(ob_dst, dg_src->name); - idx_dst = ob_dst->actdef - 1; } if (r_map) { /* At this stage, we **need** a valid CD_MDEFORMVERT layer on dest! |