[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