[Bf-blender-cvs] [10754500b0] render-layers: Add BASE_SELECTABLED flag

Dalai Felinto noreply at git.blender.org
Mon Jan 16 18:01:51 CET 2017


Commit: 10754500b0a15a49892ba8f9a0f1431acfe30853
Author: Dalai Felinto
Date:   Mon Jan 16 13:16:22 2017 +0100
Branches: render-layers
https://developer.blender.org/rB10754500b0a15a49892ba8f9a0f1431acfe30853

Add BASE_SELECTABLED flag

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

M	source/blender/blenkernel/intern/layer.c
M	source/blender/editors/object/object_select.c
M	source/blender/makesdna/DNA_layer_types.h

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

diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 7b0ebf38a7..59c35d3f4c 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -178,8 +178,10 @@ void BKE_scene_layer_base_deselect_all(SceneLayer *sl)
 
 void BKE_scene_layer_base_select(struct SceneLayer *sl, ObjectBase *selbase)
 {
-	selbase->flag |= BASE_SELECTED;
 	sl->basact = selbase;
+	if ((selbase->flag & BASE_SELECTABLED) != 0) {
+		selbase->flag |= BASE_SELECTED;
+	}
 }
 
 static void scene_layer_object_base_unref(SceneLayer* sl, ObjectBase *base)
@@ -206,12 +208,13 @@ static void layer_collection_base_flag_recalculate(LayerCollection *lc, bool *is
 	for (LinkData *link = lc->object_bases.first; link; link = link->next) {
 		ObjectBase *base = link->data;
 
-		if (!*is_visible) {
+		if (!(*is_visible)) {
 			base->flag &= ~BASE_VISIBLED;
 		}
 
-		if (!*is_selectable) {
+		if (!(*is_selectable)) {
 			base->flag &= ~BASE_SELECTED;
+			base->flag &= ~BASE_SELECTABLED;
 		}
 	}
 
@@ -227,7 +230,7 @@ void BKE_scene_layer_base_flag_recalculate(SceneLayer *sl)
 {
 	/* tranverse the entire tree and update ObjectBase flags */
 	for (ObjectBase *base = sl->object_bases.first; base; base = base->next) {
-		base->flag |= BASE_VISIBLED;
+		base->flag |= BASE_VISIBLED + BASE_SELECTABLED;
 	}
 
 	for (LayerCollection *lc = sl->layer_collections.first; lc; lc = lc->next) {
diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c
index f6f101b98c..80b1a226eb 100644
--- a/source/blender/editors/object/object_select.c
+++ b/source/blender/editors/object/object_select.c
@@ -123,8 +123,9 @@ void ED_object_base_select(ObjectBase *base, short mode)
 {
 	if (base) {
 		if (mode == BA_SELECT) {
-			if (!(base->object->restrictflag & OB_RESTRICT_SELECT))
+			if ((base->flag & BASE_SELECTABLED) != 0) {
 				base->flag |= BASE_SELECTED;
+			}
 		}
 		else if (mode == BA_DESELECT) {
 			base->flag &= ~BASE_SELECTED;
diff --git a/source/blender/makesdna/DNA_layer_types.h b/source/blender/makesdna/DNA_layer_types.h
index 40750d7ba4..208f0167c1 100644
--- a/source/blender/makesdna/DNA_layer_types.h
+++ b/source/blender/makesdna/DNA_layer_types.h
@@ -81,6 +81,7 @@ typedef struct SceneCollection {
 enum {
 	BASE_SELECTED         = (1 << 0),
 	BASE_VISIBLED         = (1 << 1),
+	BASE_SELECTABLED      = (1 << 2),
 };
 
 /* LayerCollection->flag */




More information about the Bf-blender-cvs mailing list