[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