diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2019-03-06 13:38:06 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2019-03-06 17:19:29 +0300 |
commit | 4dbf5e3a81466724f7eefc0978ae247571d1f4bd (patch) | |
tree | 8988dc5b22f06125fa8f917f4d50d3a4b0cb524f | |
parent | a997c9b9bc8053312d61d0e4c8db86c182e1bd51 (diff) |
Fix T62613: In duplicated collections objects loses patrenting.
We need to remap duplicated IDs' ID pointers to new ones if they exist.
-rw-r--r-- | source/blender/blenkernel/intern/collection.c | 6 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/library_remap.c | 2 |
2 files changed, 7 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c index ceac0215a5f..d351f112c8a 100644 --- a/source/blender/blenkernel/intern/collection.c +++ b/source/blender/blenkernel/intern/collection.c @@ -33,6 +33,7 @@ #include "BKE_idprop.h" #include "BKE_layer.h" #include "BKE_library.h" +#include "BKE_library_remap.h" #include "BKE_main.h" #include "BKE_object.h" #include "BKE_rigidbody.h" @@ -308,14 +309,19 @@ Collection *BKE_collection_duplicate( } if (do_hierarchy) { + BKE_main_id_tag_all(bmain, LIB_TAG_NEW, false); BKE_main_id_clear_newpoins(bmain); } Collection *collection_new = collection_duplicate_recursive( bmain, parent, collection, do_hierarchy, do_deep_copy); + /* This code will follows into all ID links using an ID tagged with LIB_TAG_NEW.*/ + BKE_libblock_relink_to_newid(&collection_new->id); + if (do_hierarchy) { /* Cleanup. */ + BKE_main_id_tag_all(bmain, LIB_TAG_NEW, false); BKE_main_id_clear_newpoins(bmain); } diff --git a/source/blender/blenkernel/intern/library_remap.c b/source/blender/blenkernel/intern/library_remap.c index 03630297dc3..077ce059edf 100644 --- a/source/blender/blenkernel/intern/library_remap.c +++ b/source/blender/blenkernel/intern/library_remap.c @@ -679,7 +679,7 @@ static int id_relink_to_newid_looper(void *UNUSED(user_data), ID *UNUSED(self_id /** Similar to libblock_relink_ex, but is remapping IDs to their newid value if non-NULL, in given \a id. * - * Very specific usage, not sure we'll keep it on the long run, currently only used in Object duplication code... + * Very specific usage, not sure we'll keep it on the long run, currently only used in Object/Collection duplication code... */ void BKE_libblock_relink_to_newid(ID *id) { |