[Bf-blender-cvs] [40f8ddf8297] master: 3D View: move deselect all logic into an option

Campbell Barton noreply at git.blender.org
Tue Mar 26 10:27:26 CET 2019


Commit: 40f8ddf8297a062968fc6a1523aa210d69c22626
Author: Campbell Barton
Date:   Tue Mar 26 18:47:55 2019 +1100
Branches: master
https://developer.blender.org/rB40f8ddf8297a062968fc6a1523aa210d69c22626

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.

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

M	release/scripts/presets/keyconfig/keymap_data/blender_default.py
M	release/scripts/startup/bl_operators/view3d.py
M	source/blender/blenkernel/BKE_mball.h
M	source/blender/blenkernel/intern/mball.c
M	source/blender/editors/armature/armature_select.c
M	source/blender/editors/armature/pose_select.c
M	source/blender/editors/curve/editcurve_paint.c
M	source/blender/editors/curve/editcurve_select.c
M	source/blender/editors/include/ED_armature.h
M	source/blender/editors/include/ED_curve.h
M	source/blender/editors/include/ED_lattice.h
M	source/blender/editors/include/ED_mball.h
M	source/blender/editors/include/ED_mesh.h
M	source/blender/editors/include/ED_particle.h
M	source/blender/editors/include/ED_sculpt.h
M	source/blender/editors/lattice/editlattice_select.c
M	source/blender/editors/mesh/editface.c
M	source/blender/editors/mesh/editmesh_select.c
M	source/blender/editors/metaball/mball_edit.c
M	source/blender/editors/physics/particle_edit.c
M	source/blender/editors/sculpt_paint/paint_mask.c
M	source/blender/editors/sculpt_paint/paint_utils.c
M	source/blender/editors/space_view3d/view3d_select.c
M	source/blender/makesdna/DNA_curve_types.h

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

diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 967e83386d3..eacbd558146 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -1047,7 +1047,7 @@ def km_view3d(params):
            {"type": params.select_mouse, "value": params.select_mouse_value, **{m: True for m in mods}},
            {"properties": [(c, True) for c in props]},
         ) for operator, props, mods in (
-            ("view3d.select_or_deselect_all" if not params.legacy else "view3d.select", (), ()),
+            ("view3d.select", ("deselect_all",) if not params.legacy else (), ()),
             ("view3d.select", ("toggle",), ("shift",)),
             ("view3d.select", ("center", "object"), ("ctrl",)),
             ("view3d.select", ("enumerate",), ("alt",)),
diff --git a/release/scripts/startup/bl_operators/view3d.py b/release/scripts/startup/bl_operators/view3d.py
index 50d2b49b529..2216dce2d28 100644
--- a/release/scripts/startup/bl_operators/view3d.py
+++ b/release/scripts/startup/bl_operators/view3d.py
@@ -139,109 +139,8 @@ class VIEW3D_OT_edit_mesh_extrude_shrink_fatten(Operator):
         return self.execute(context)
 
 
-class VIEW3D_OT_select_or_deselect_all(Operator):
-    """Select element under the mouse, deselect everything is there's nothing under the mouse"""
-    bl_label = "Select or Deselect All"
-    bl_idname = "view3d.select_or_deselect_all"
-
-    extend: BoolProperty(
-        name="Extend",
-        description="Extend selection instead of deselecting everything first",
-        default=False,
-        options={'SKIP_SAVE'},
-    )
-
-    toggle: BoolProperty(
-        name="Toggle",
-        description="Toggle the selection",
-        default=False,
-        options={'SKIP_SAVE'},
-    )
-
-    deselect: BoolProperty(
-        name="Deselect",
-        description="Remove from selection",
-        default=False,
-        options={'SKIP_SAVE'},
-    )
-
-    center: BoolProperty(
-        name="Center",
-        description="Use the object center when selecting, in editmode used to extend object selection",
-        default=False,
-        options={'SKIP_SAVE'},
-    )
-
-    enumerate: BoolProperty(
-        name="Enumerate",
-        description="List objects under the mouse (object mode only)",
-        default=False,
-        options={'SKIP_SAVE'},
-    )
-
-    object: BoolProperty(
-        name="Object",
-        description="Use object selection (editmode only)",
-        default=False,
-        options={'SKIP_SAVE'},
-    )
-
-    def invoke(self, context, event):
-        retval = bpy.ops.view3d.select(
-            'INVOKE_DEFAULT',
-            True,  # undo push
-            extend=self.extend,
-            deselect=self.deselect,
-            toggle=self.toggle,
-            center=self.center,
-            enumerate=self.enumerate,
-            object=self.object,
-        )
-
-        # Finished means something was selected.
-        if 'FINISHED' in retval:
-            return retval
-        if self.extend or self.toggle or self.deselect:
-            return retval
-
-        active_object = context.active_object
-        if active_object:
-            if active_object.mode == 'OBJECT':
-                select_all = bpy.ops.object.select_all
-            elif active_object.mode == 'EDIT':
-                if active_object.type == 'MESH':
-                    select_all = bpy.ops.mesh.select_all
-                elif active_object.type == 'CURVE':
-                    select_all = bpy.ops.curve.select_all
-                elif active_object.type == 'SURFACE':
-                    select_all = bpy.ops.curve.select_all
-                elif active_object.type == 'LATTICE':
-                    select_all = bpy.ops.lattice.select_all
-                elif active_object.type == 'META':
-                    select_all = bpy.ops.mball.select_all
-                elif active_object.type == 'ARMATURE':
-                    select_all = bpy.ops.armature.select_all
-                else:
-                    return retval
-            elif active_object.mode == 'POSE':
-                select_all = bpy.ops.pose.select_all
-            elif active_object.mode == 'PARTICLE_EDIT':
-                select_all = bpy.ops.particle.select_all
-            else:
-                # Don nothing in paint and sculpt modes.
-                return retval
-        else:
-            select_all = bpy.ops.object.select_all
-
-        if select_all.poll():
-            return select_all('INVOKE_DEFAULT', True, action='DESELECT')
-        else:
-            return retval
-
-
 classes = (
     VIEW3D_OT_edit_mesh_extrude_individual_move,
     VIEW3D_OT_edit_mesh_extrude_move,
     VIEW3D_OT_edit_mesh_extrude_shrink_fatten,
-    VIEW3D_OT_select_or_deselect_all,
 )
diff --git a/source/blender/blenkernel/BKE_mball.h b/source/blender/blenkernel/BKE_mball.h
index fc065279aa3..0c2a3c28da9 100644
--- a/source/blender/blenkernel/BKE_mball.h
+++ b/source/blender/blenkernel/BKE_mball.h
@@ -22,6 +22,7 @@
 /** \file
  * \ingroup bke
  */
+struct Base;
 struct BoundBox;
 struct Depsgraph;
 struct Main;
@@ -39,7 +40,7 @@ struct MetaBall *BKE_mball_copy(struct Main *bmain, const struct MetaBall *mb);
 void BKE_mball_make_local(struct Main *bmain, struct MetaBall *mb, const bool lib_local);
 
 bool BKE_mball_is_any_selected(const struct MetaBall *mb);
-bool BKE_mball_is_any_selected_multi(struct Object **objects, int objects_len);
+bool BKE_mball_is_any_selected_multi(struct Base **bases, int bases_len);
 bool BKE_mball_is_any_unselected(const struct MetaBall *mb);
 bool BKE_mball_is_basis_for(struct Object *ob1, struct Object *ob2);
 bool BKE_mball_is_basis(struct Object *ob);
@@ -63,13 +64,13 @@ void BKE_mball_translate(struct MetaBall *mb, const float offset[3]);
 struct MetaElem *BKE_mball_element_add(struct MetaBall *mb, const int type);
 
 int BKE_mball_select_count(const struct MetaBall *mb);
-int BKE_mball_select_count_multi(struct Object **objects, int objects_len);
-void BKE_mball_select_all(struct MetaBall *mb);
-void BKE_mball_select_all_multi(struct Object **objects, int objects_len);
-void BKE_mball_deselect_all(struct MetaBall *mb);
-void BKE_mball_deselect_all_multi(struct Object **objects, int objects_len);
-void BKE_mball_select_swap(struct MetaBall *mb);
-void BKE_mball_select_swap_multi(struct Object **objects, int objects_len);
+int BKE_mball_select_count_multi(struct Base **bases, int bases_len);
+bool BKE_mball_select_all(struct MetaBall *mb);
+bool BKE_mball_select_all_multi_ex(struct Base **bases, int bases_len);
+bool BKE_mball_deselect_all(struct MetaBall *mb);
+bool BKE_mball_deselect_all_multi_ex(struct Base **bases, int bases_len);
+bool BKE_mball_select_swap(struct MetaBall *mb);
+bool BKE_mball_select_swap_multi_ex(struct Base **bases, int bases_len);
 
 /* **** Depsgraph evaluation **** */
 
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->

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list