[Bf-blender-cvs] [93f82698e75] blender2.8: Object: utility (de)select all functions

Campbell Barton noreply at git.blender.org
Tue Nov 20 07:02:04 CET 2018


Commit: 93f82698e759bb7b4aa999173433d2053cf99606
Author: Campbell Barton
Date:   Tue Nov 20 17:00:55 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB93f82698e759bb7b4aa999173433d2053cf99606

Object: utility (de)select all functions

part of D3955 by @angavrilov

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

M	source/blender/editors/include/ED_object.h
M	source/blender/editors/object/object_select.c

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

diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index 4547aaae5d4..29047f02e5a 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -109,6 +109,8 @@ bool ED_object_parent_set(struct ReportList *reports, const struct bContext *C,
 void ED_object_parent_clear(struct Object *ob, const int type);
 
 void ED_object_base_select(struct Base *base, eObjectSelect_Mode mode);
+bool ED_object_base_select_all_visible(struct ViewLayer *view_layer);
+bool ED_object_base_deselect_all_visible(struct ViewLayer *view_layer);
 void ED_object_base_activate(struct bContext *C, struct Base *base);
 void ED_object_base_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Object *ob);
 
diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c
index a50c5a14e06..c4c86c0bd72 100644
--- a/source/blender/editors/object/object_select.c
+++ b/source/blender/editors/object/object_select.c
@@ -117,6 +117,31 @@ void ED_object_base_select(Base *base, eObjectSelect_Mode mode)
 	}
 }
 
+/** Apply selection operation to all visible bases in the view layer. */
+bool ED_object_base_select_all_visible(ViewLayer *view_layer)
+{
+	bool changed = false;
+	FOREACH_VISIBLE_BASE_BEGIN(view_layer, base)
+	{
+		ED_object_base_select(base, BA_SELECT);
+		changed = true;
+	}
+	FOREACH_VISIBLE_BASE_END;
+	return changed;
+}
+
+bool ED_object_base_deselect_all_visible(ViewLayer *view_layer)
+{
+	bool changed = false;
+	FOREACH_VISIBLE_BASE_BEGIN(view_layer, base)
+	{
+		ED_object_base_select(base, BA_DESELECT);
+		changed = true;
+	}
+	FOREACH_VISIBLE_BASE_END;
+	return changed;
+}
+
 /**
  * Change active base, it includes the notifier
  */
@@ -154,17 +179,14 @@ static bool objects_selectable_poll(bContext *C)
 
 static int object_select_by_type_exec(bContext *C, wmOperator *op)
 {
+	ViewLayer *view_layer = CTX_data_view_layer(C);
 	short obtype, extend;
 
 	obtype = RNA_enum_get(op->ptr, "type");
 	extend = RNA_boolean_get(op->ptr, "extend");
 
 	if (extend == 0) {
-		CTX_DATA_BEGIN (C, Base *, base, visible_bases)
-		{
-			ED_object_base_select(base, BA_DESELECT);
-		}
-		CTX_DATA_END;
+		ED_object_base_deselect_all_visible(view_layer);
 	}
 
 	CTX_DATA_BEGIN (C, Base *, base, visible_bases)
@@ -387,11 +409,7 @@ static int object_select_linked_exec(bContext *C, wmOperator *op)
 	extend = RNA_boolean_get(op->ptr, "extend");
 
 	if (extend == 0) {
-		CTX_DATA_BEGIN (C, Base *, base, visible_bases)
-		{
-			ED_object_base_select(base, BA_DESELECT);
-		}
-		CTX_DATA_END;
+		ED_object_base_deselect_all_visible(view_layer);
 	}
 
 	ob = OBACT(view_layer);
@@ -760,12 +778,7 @@ static int object_select_grouped_exec(bContext *C, wmOperator *op)
 	extend = RNA_boolean_get(op->ptr, "extend");
 
 	if (extend == 0) {
-		CTX_DATA_BEGIN (C, Base *, base, visible_bases)
-		{
-			ED_object_base_select(base, BA_DESELECT);
-			changed = true;
-		}
-		CTX_DATA_END;
+		changed = ED_object_base_deselect_all_visible(view_layer);
 	}
 
 	ob = OBACT(view_layer);



More information about the Bf-blender-cvs mailing list