[Bf-blender-cvs] [f42543d] soc-2016-layer_manager: Fix crash when deleting any object
Julian Eisel
noreply at git.blender.org
Thu Jul 7 02:25:17 CEST 2016
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);
}
More information about the Bf-blender-cvs
mailing list