[Bf-blender-cvs] [bf4f01779d8] master: BKE_object: add util to count number of scenes using an object.

Bastien Montagne noreply at git.blender.org
Sat Feb 9 13:24:44 CET 2019


Commit: bf4f01779d818be876fde59914597308544c4d3a
Author: Bastien Montagne
Date:   Sat Feb 9 13:18:22 2019 +0100
Branches: master
https://developer.blender.org/rBbf4f01779d818be876fde59914597308544c4d3a

BKE_object: add util to count number of scenes using an object.

Issue is, ob->id.us is not relevant anymore here, since several
collection might be referencing it inside of a same scene, that is still
only one usage from user perspective...

Note that for now we are just counting scenes instantiating an object,
time will say wether we need more refined/complete check (as a reminder,
most [all?] other Object usages are *not* refcounting ones).

===================================================================

M	source/blender/blenkernel/BKE_object.h
M	source/blender/blenkernel/intern/object.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 618ca1a0dad..527d88917c9 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -301,6 +301,8 @@ bool BKE_object_is_animated(struct Scene *scene, struct Object *ob);
 int BKE_object_is_modified(struct Scene *scene, struct Object *ob);
 int BKE_object_is_deform_modified(struct Scene *scene, struct Object *ob);
 
+int BKE_object_scenes_users_get(struct Main *bmain, struct Object *ob);
+
 struct MovieClip *BKE_object_movieclip_get(struct Scene *scene, struct Object *ob, bool use_default);
 
 void BKE_object_runtime_reset(struct Object *object);
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 64345a72740..c1af6037e05 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -3514,6 +3514,18 @@ bool BKE_object_is_animated(Scene *scene, Object *ob)
 	return false;
 }
 
+/** Return the number of scenes using (instantiating) that object in their collections. */
+int BKE_object_scenes_users_get(Main *bmain, Object *ob)
+{
+	int num_scenes = 0;
+	for (Scene *scene = bmain->scene.first; scene != NULL; scene = scene->id.next) {
+		if (BKE_collection_has_object_recursive(BKE_collection_master(scene), ob)) {
+			num_scenes++;
+		}
+	}
+	return num_scenes;
+}
+
 MovieClip *BKE_object_movieclip_get(Scene *scene, Object *ob, bool use_default)
 {
 	MovieClip *clip = use_default ? scene->clip : NULL;



More information about the Bf-blender-cvs mailing list