[Bf-blender-cvs] [f8dd25a] render-layers: remove objects from collections when ED_base_object_free_and_unlink

Dalai Felinto noreply at git.blender.org
Wed Jan 4 18:22:49 CET 2017


Commit: f8dd25afb8a0b5d91371852b3e8b1c6df5455b8d
Author: Dalai Felinto
Date:   Wed Jan 4 18:02:32 2017 +0100
Branches: render-layers
https://developer.blender.org/rBf8dd25afb8a0b5d91371852b3e8b1c6df5455b8d

remove objects from collections when ED_base_object_free_and_unlink

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

M	source/blender/blenkernel/BKE_scene.h
M	source/blender/blenkernel/intern/collection.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/editors/object/object_add.c

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

diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index d215295..fc3dde2 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -70,6 +70,8 @@ void BKE_scene_free(struct Scene *sce);
 void BKE_scene_init(struct Scene *sce);
 struct Scene *BKE_scene_add(struct Main *bmain, const char *name);
 
+void BKE_scene_remove_rigidbody_object(struct Scene *scene, struct Object *ob);
+
 /* base functions */
 struct Base *BKE_scene_base_find_by_name(struct Scene *scene, const char *name);
 struct Base *BKE_scene_base_find(struct Scene *scene, struct Object *ob);
diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c
index 853e8df..d88d3fe 100644
--- a/source/blender/blenkernel/intern/collection.c
+++ b/source/blender/blenkernel/intern/collection.c
@@ -33,6 +33,7 @@
 #include "BKE_collection.h"
 #include "BKE_layer.h"
 #include "BKE_library.h"
+#include "BKE_scene.h"
 
 #include "DNA_ID.h"
 #include "DNA_layer_types.h"
@@ -215,8 +216,10 @@ void BKE_collection_object_remove(struct Scene *scene, struct SceneCollection *s
 /**
  * Remove object from all collections of scene
  */
-void BKE_collections_object_remove(struct Scene *scene, struct Object *ob)
+void BKE_collections_object_remove(Scene *scene, Object *ob)
 {
+	BKE_scene_remove_rigidbody_object(scene, ob);
+
 	SceneCollection *sc;
 	FOREACH_SCENE_COLLECTION(scene, sc)
 	{
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index d850798..896d692 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -1226,6 +1226,15 @@ char *BKE_scene_find_last_marker_name(Scene *scene, int frame)
 	return best_marker ? best_marker->name : NULL;
 }
 
+void BKE_scene_remove_rigidbody_object(Scene *scene, Object *ob)
+{
+	/* remove rigid body constraint from world before removing object */
+	if (ob->rigidbody_constraint)
+		BKE_rigidbody_remove_constraint(scene, ob);
+	/* remove rigid body object from world before removing object */
+	if (ob->rigidbody_object)
+		BKE_rigidbody_remove_object(scene, ob);
+}
 
 Base *BKE_scene_base_add(Scene *sce, Object *ob)
 {
@@ -1241,13 +1250,8 @@ Base *BKE_scene_base_add(Scene *sce, Object *ob)
 
 void BKE_scene_base_unlink(Scene *sce, Base *base)
 {
-	/* remove rigid body constraint from world before removing object */
-	if (base->object->rigidbody_constraint)
-		BKE_rigidbody_remove_constraint(sce, base->object);
-	/* remove rigid body object from world before removing object */
-	if (base->object->rigidbody_object)
-		BKE_rigidbody_remove_object(sce, base->object);
-	
+	BKE_scene_remove_rigidbody_object(sce, base->object);
+
 	BLI_remlink(&sce->base, base);
 	if (sce->basact == base)
 		sce->basact = NULL;
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index baea008..d5fbce0 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -63,6 +63,7 @@
 #include "BKE_animsys.h"
 #include "BKE_armature.h"
 #include "BKE_camera.h"
+#include "BKE_collection.h"
 #include "BKE_context.h"
 #include "BKE_curve.h"
 #include "BKE_depsgraph.h"
@@ -1118,6 +1119,7 @@ void ED_base_object_free_and_unlink(Main *bmain, Scene *scene, Base *base)
 	}
 
 	BKE_scene_base_unlink(scene, base);
+	BKE_collections_object_remove(scene, base->object);
 	object_delete_check_glsl_update(base->object);
 	BKE_libblock_free_us(bmain, base->object);
 	MEM_freeN(base);




More information about the Bf-blender-cvs mailing list