Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenkernel/intern/data_transfer.c')
-rw-r--r--source/blender/blenkernel/intern/data_transfer.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/source/blender/blenkernel/intern/data_transfer.c b/source/blender/blenkernel/intern/data_transfer.c
index e3d2f63ced9..70942b45d2b 100644
--- a/source/blender/blenkernel/intern/data_transfer.c
+++ b/source/blender/blenkernel/intern/data_transfer.c
@@ -501,12 +501,15 @@ static bool data_transfer_layersmapping_cdlayers_multisrc_to_dst(
idx_src++;
if (idx_dst < idx_src) {
- if (!use_create) {
- return true;
+ if (use_create) {
+ /* Create as much data layers as necessary! */
+ for (; idx_dst < idx_src; idx_dst++) {
+ CustomData_add_layer(cd_dst, cddata_type, CD_CALLOC, NULL, num_elem_dst);
+ }
}
- /* Create as much data layers as necessary! */
- for (; idx_dst < idx_src; idx_dst++) {
- CustomData_add_layer(cd_dst, cddata_type, CD_CALLOC, NULL, num_elem_dst);
+ else {
+ /* Otherwise, just try to map what we can with existing dst data layers. */
+ idx_src = idx_dst;
}
}
else if (use_delete && idx_dst > idx_src) {
@@ -551,14 +554,14 @@ static bool data_transfer_layersmapping_cdlayers_multisrc_to_dst(
data_src = CustomData_get_layer_n(cd_src, cddata_type, idx_src);
if ((idx_dst = CustomData_get_named_layer(cd_dst, cddata_type, name)) == -1) {
- if (!use_create) {
- if (r_map) {
- BLI_freelistN(r_map);
- }
- return true;
+ if (use_create) {
+ CustomData_add_layer_named(cd_dst, cddata_type, CD_CALLOC, NULL, num_elem_dst, name);
+ idx_dst = CustomData_get_named_layer(cd_dst, cddata_type, name);
+ }
+ else {
+ /* If we are not allowed to create missing dst data layers, just skip matching src one. */
+ continue;
}
- CustomData_add_layer_named(cd_dst, cddata_type, CD_CALLOC, NULL, num_elem_dst, name);
- idx_dst = CustomData_get_named_layer(cd_dst, cddata_type, name);
}
else if (data_dst_to_delete) {
data_dst_to_delete[idx_dst] = false;