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);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to