Commit: f42543d2586c09d8d3ef25c0ae673d9145be457f
Author: Julian Eisel
Date: Thu Jul 7 02:24:29 2016 +0200
Branches: soc-2016-layer_manager
https://developer.blender.org/rBf42543d2586c09d8d3ef25c0ae673d9145be457f
Fix crash when deleting any object
===================================================================
M source/blender/blenkernel/BKE_object.h
M source/blender/blenkernel/intern/object_layer.c
M source/blender/blenkernel/intern/scene.c
M source/blender/editors/space_layers/layers_ops.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_object.h
b/source/blender/blenkernel/BKE_object.h
index 60fa0b2..07aab06 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -282,7 +282,7 @@ bool BKE_object_modifier_update_subframe(struct Scene
*scene, struct Object *ob,
struct LayerTreeItem *BKE_objectlayer_add(struct LayerTree *tree, struct
LayerTreeItem *parent, const char *name);
void BKE_objectlayer_free(struct LayerTreeItem *litem);
void BKE_objectlayer_base_assign(struct Base *base, struct LayerTreeItem
*litem, const bool has_reserved);
-void BKE_objectlayer_base_unassign(struct Base *base, struct LayerTreeItem
*litem);
+void BKE_objectlayer_base_unassign(struct Base *base);
void BKE_objectlayer_bases_unassign_all(struct LayerTreeItem *litem, const
bool unset_base_layer);
void BKE_objectlayer_base_entries_reserve(struct LayerTreeItem *litem, const
unsigned int nentries_reserve);
diff --git a/source/blender/blenkernel/intern/object_layer.c
b/source/blender/blenkernel/intern/object_layer.c
index 5ca5500..9a2f1d5 100644
--- a/source/blender/blenkernel/intern/object_layer.c
+++ b/source/blender/blenkernel/intern/object_layer.c
@@ -80,9 +80,9 @@ void BKE_objectlayer_base_assign(Base *base, LayerTreeItem
*litem, const bool ha
/**
* Un-assign \a base from object layer \a litem.
*/
-void BKE_objectlayer_base_unassign(Base *base, LayerTreeItem *litem)
+void BKE_objectlayer_base_unassign(Base *base)
{
- LayerTypeObject *oblayer = (LayerTypeObject *)litem;
+ LayerTypeObject *oblayer = (LayerTypeObject *)base->layer;
bool has_base = false;
for (int i = 0; i < oblayer->tot_bases; i++) {
diff --git a/source/blender/blenkernel/intern/scene.c
b/source/blender/blenkernel/intern/scene.c
index d0b08d8..91288bb 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -1153,7 +1153,9 @@ void BKE_scene_base_unlink(Scene *sce, Base *base)
/* remove rigid body object from world before removing object */
if (base->object->rigidbody_object)
BKE_rigidbody_remove_object(sce, base->object);
-
+ if (base->layer)
+ BKE_objectlayer_base_unassign(base);
+
BLI_remlink(&sce->base, base);
if (sce->basact == base)
sce->basact = NULL;
diff --git a/source/blender/editors/space_layers/layers_ops.c
b/source/blender/editors/space_layers/layers_ops.c
index 691aa7c..c0145cf 100644
--- a/source/blender/editors/space_layers/layers_ops.c
+++ b/source/blender/editors/space_layers/layers_ops.c
@@ -669,7 +669,7 @@ static int layer_objects_assign_invoke(bContext *C,
wmOperator *UNUSED(op), cons
for (Base *base = scene->base.first; base; base = base->next) {
if (base->flag & SELECT) {
if (base->layer) {
- BKE_objectlayer_base_unassign(base,
base->layer);
+ BKE_objectlayer_base_unassign(base);
}
BKE_objectlayer_base_assign(base, active, false);
}
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs