[Bf-blender-cvs] [e515f81318b] master: Cleanup: move swapping objects in a collection to a utility function
Campbell Barton
noreply at git.blender.org
Wed Feb 1 08:00:07 CET 2023
Commit: e515f81318b14646d321fcad35ecfec5e070edb2
Author: Campbell Barton
Date: Wed Feb 1 14:18:32 2023 +1100
Branches: master
https://developer.blender.org/rBe515f81318b14646d321fcad35ecfec5e070edb2
Cleanup: move swapping objects in a collection to a utility function
Including this logic inline complicated D17016 & was noted as a TODO.
===================================================================
M source/blender/blenkernel/BKE_collection.h
M source/blender/blenkernel/intern/collection.c
M source/blender/makesrna/intern/rna_collection.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_collection.h b/source/blender/blenkernel/BKE_collection.h
index dd7866d83e5..61f3e675391 100644
--- a/source/blender/blenkernel/BKE_collection.h
+++ b/source/blender/blenkernel/BKE_collection.h
@@ -153,6 +153,14 @@ bool BKE_collection_object_remove(struct Main *bmain,
struct Collection *collection,
struct Object *object,
bool free_us);
+/**
+ * Replace one object with another in a collection (managing user counts).
+ */
+bool BKE_collection_object_replace(struct Main *bmain,
+ struct Collection *collection,
+ struct Object *ob_old,
+ struct Object *ob_new);
+
/**
* Move object from a collection into another
*
diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c
index 8b430546644..a28c623057f 100644
--- a/source/blender/blenkernel/intern/collection.c
+++ b/source/blender/blenkernel/intern/collection.c
@@ -1214,6 +1214,28 @@ bool BKE_collection_object_remove(Main *bmain,
return true;
}
+bool BKE_collection_object_replace(Main *bmain,
+ Collection *collection,
+ Object *ob_old,
+ Object *ob_new)
+{
+ CollectionObject *cob = BLI_findptr(
+ &collection->gobject, ob_old, offsetof(CollectionObject, ob));
+ if (cob == NULL) {
+ return false;
+ }
+
+ id_us_min(&cob->ob->id);
+ cob->ob = ob_new;
+ id_us_plus(&cob->ob->id);
+
+ if (BKE_collection_is_in_scene(collection)) {
+ BKE_main_collection_sync(bmain);
+ }
+
+ return true;
+}
+
/**
* Remove object from all collections of scene
* \param collection_skip: Don't remove base from this collection.
diff --git a/source/blender/makesrna/intern/rna_collection.c b/source/blender/makesrna/intern/rna_collection.c
index 4fbefb68d6b..74e1f74d486 100644
--- a/source/blender/makesrna/intern/rna_collection.c
+++ b/source/blender/makesrna/intern/rna_collection.c
@@ -193,24 +193,11 @@ static bool rna_Collection_objects_override_apply(Main *bmain,
return true;
}
- CollectionObject *cob_dst = BLI_findptr(
- &coll_dst->gobject, ob_dst, offsetof(CollectionObject, ob));
-
- if (cob_dst == NULL) {
+ if (!BKE_collection_object_replace(bmain, coll_dst, ob_dst, ob_src)) {
BLI_assert_msg(0, "Could not find destination object in destination collection!");
return false;
}
- /* XXX TODO: We most certainly rather want to have a 'swap object pointer in collection'
- * util in BKE_collection. This is only temp quick dirty test! */
- id_us_min(&cob_dst->ob->id);
- cob_dst->ob = ob_src;
- id_us_plus(&cob_dst->ob->id);
-
- if (BKE_collection_is_in_scene(coll_dst)) {
- BKE_main_collection_sync(bmain);
- }
-
RNA_property_update_main(bmain, NULL, ptr_dst, prop_dst);
return true;
}
More information about the Bf-blender-cvs
mailing list