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); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs