Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2019-03-26 10:47:55 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-03-26 12:25:25 +0300
commit40f8ddf8297a062968fc6a1523aa210d69c22626 (patch)
tree27e26dd44f3e8778ad06012d184fcb11ed175c94 /source/blender/blenkernel/intern/mball.c
parent30fbf905ef8bd587eef43030b81d75b9eb704bec (diff)
3D View: move deselect all logic into an option
This removes `VIEW3D_OT_select_or_deselect_all`, adding a deselect_all option to the `VIEW3D_OT_select` operator. - Add utility functions to simplify de-selecting all. - Return true from selection functions when they change the selection to avoid redundant updates. - Use arrays of bases when passing objects between selection utility functions since some users require bases. - Fix logical error in box selection that updated all objects after the first hit.
Diffstat (limited to 'source/blender/blenkernel/intern/mball.c')
-rw-r--r--source/blender/blenkernel/intern/mball.c67
1 files changed, 43 insertions, 24 deletions
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c
index d8aabcb6258..6a28c341fac 100644
--- a/source/blender/blenkernel/intern/mball.c
+++ b/source/blender/blenkernel/intern/mball.c
@@ -331,10 +331,10 @@ bool BKE_mball_is_any_selected(const MetaBall *mb)
}
-bool BKE_mball_is_any_selected_multi(Object **objects, int objects_len)
+bool BKE_mball_is_any_selected_multi(Base **bases, int bases_len)
{
- for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
- Object *obedit = objects[ob_index];
+ for (uint base_index = 0; base_index < bases_len; base_index++) {
+ Object *obedit = bases[base_index]->object;
MetaBall *mb = (MetaBall *)obedit->data;
if (BKE_mball_is_any_selected(mb)) {
return true;
@@ -559,64 +559,83 @@ int BKE_mball_select_count(const MetaBall *mb)
return sel;
}
-int BKE_mball_select_count_multi(Object **objects, int objects_len)
+int BKE_mball_select_count_multi(Base **bases, int bases_len)
{
int sel = 0;
- for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
- const Object *obedit = objects[ob_index];
+ for (uint ob_index = 0; ob_index < bases_len; ob_index++) {
+ const Object *obedit = bases[ob_index]->object;
const MetaBall *mb = (MetaBall *)obedit->data;
sel += BKE_mball_select_count(mb);
}
return sel;
}
-void BKE_mball_select_all(MetaBall *mb)
+bool BKE_mball_select_all(MetaBall *mb)
{
+ bool changed = false;
for (MetaElem *ml = mb->editelems->first; ml; ml = ml->next) {
- ml->flag |= SELECT;
+ if ((ml->flag & SELECT) == 0) {
+ ml->flag |= SELECT;
+ changed = true;
+ }
}
+ return changed;
}
-void BKE_mball_select_all_multi(Object **objects, int objects_len)
+bool BKE_mball_select_all_multi_ex(Base **bases, int bases_len)
{
- for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
- Object *obedit = objects[ob_index];
+ bool changed_multi = false;
+ for (uint ob_index = 0; ob_index < bases_len; ob_index++) {
+ Object *obedit = bases[ob_index]->object;
MetaBall *mb = obedit->data;
- BKE_mball_select_all(mb);
+ changed_multi |= BKE_mball_select_all(mb);
}
+ return changed_multi;
}
-void BKE_mball_deselect_all(MetaBall *mb)
+bool BKE_mball_deselect_all(MetaBall *mb)
{
+ bool changed = false;
for (MetaElem *ml = mb->editelems->first; ml; ml = ml->next) {
- ml->flag &= ~SELECT;
+ if ((ml->flag & SELECT) != 0) {
+ ml->flag &= ~SELECT;
+ changed = true;
+ }
}
+ return changed;
}
-void BKE_mball_deselect_all_multi(Object **objects, int objects_len)
+bool BKE_mball_deselect_all_multi_ex(Base **bases, int bases_len)
{
- for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
- Object *obedit = objects[ob_index];
+ bool changed_multi = false;
+ for (uint ob_index = 0; ob_index < bases_len; ob_index++) {
+ Object *obedit = bases[ob_index]->object;
MetaBall *mb = obedit->data;
-
- BKE_mball_deselect_all(mb);
+ changed_multi |= BKE_mball_deselect_all(mb);
+ DEG_id_tag_update(&mb->id, ID_RECALC_SELECT);
}
+ return changed_multi;
}
-void BKE_mball_select_swap(MetaBall *mb)
+bool BKE_mball_select_swap(MetaBall *mb)
{
+ bool changed = false;
for (MetaElem *ml = mb->editelems->first; ml; ml = ml->next) {
ml->flag ^= SELECT;
+ changed = true;
}
+ return changed;
}
-void BKE_mball_select_swap_multi(Object **objects, int objects_len)
+bool BKE_mball_select_swap_multi_ex(Base **bases, int bases_len)
{
- for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
- Object *obedit = objects[ob_index];
+ bool changed_multi = false;
+ for (uint ob_index = 0; ob_index < bases_len; ob_index++) {
+ Object *obedit = bases[ob_index]->object;
MetaBall *mb = (MetaBall *)obedit->data;
- BKE_mball_select_swap(mb);
+ changed_multi |= BKE_mball_select_swap(mb);
}
+ return changed_multi;
}
/* **** Depsgraph evaluation **** */