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>2016-01-07 12:54:17 +0300
committerCampbell Barton <ideasman42@gmail.com>2016-01-07 12:57:03 +0300
commiteed28a1db8b8145a6751ebfe0df40f345d7244be (patch)
treebf30bc6d8e75690e840e21b1a2fbc35cd06d6ecc /source/blender/editors/mesh/editmesh_select.c
parent9e3ae79a5435f0d201b973667bba53d1da0d8c90 (diff)
Select mirror multiple axis support
Previously you could only select mirror on X axis, now support mirroring on multiple axis as well as more than one (for mesh and lattice data).
Diffstat (limited to 'source/blender/editors/mesh/editmesh_select.c')
-rw-r--r--source/blender/editors/mesh/editmesh_select.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c
index f46b208fdb3..a770fc26cba 100644
--- a/source/blender/editors/mesh/editmesh_select.c
+++ b/source/blender/editors/mesh/editmesh_select.c
@@ -74,8 +74,9 @@
/* ****************************** MIRROR **************** */
-void EDBM_select_mirrored(BMEditMesh *em, bool extend,
- int *r_totmirr, int *r_totfail)
+void EDBM_select_mirrored(
+ BMEditMesh *em, const int axis, const bool extend,
+ int *r_totmirr, int *r_totfail)
{
Mesh *me = (Mesh *)em->ob->data;
BMesh *bm = em->bm;
@@ -106,7 +107,7 @@ void EDBM_select_mirrored(BMEditMesh *em, bool extend,
}
}
- EDBM_verts_mirror_cache_begin(em, 0, true, true, use_topology);
+ EDBM_verts_mirror_cache_begin(em, axis, true, true, use_topology);
if (!extend)
EDBM_flag_disable_all(em, BM_ELEM_SELECT);
@@ -3019,12 +3020,18 @@ static int edbm_select_mirror_exec(bContext *C, wmOperator *op)
{
Object *obedit = CTX_data_edit_object(C);
BMEditMesh *em = BKE_editmesh_from_object(obedit);
- bool extend = RNA_boolean_get(op->ptr, "extend");
+ const int axis_flag = RNA_enum_get(op->ptr, "axis");
+ const bool extend = RNA_boolean_get(op->ptr, "extend");
if (em->bm->totvert && em->bm->totvertsel) {
int totmirr, totfail;
- EDBM_select_mirrored(em, extend, &totmirr, &totfail);
+ for (int axis = 0; axis < 3; axis++) {
+ if ((1 << axis) & axis_flag) {
+ EDBM_select_mirrored(em, axis, extend, &totmirr, &totfail);
+ }
+ }
+
if (totmirr) {
EDBM_selectmode_flush(em);
WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data);
@@ -3051,6 +3058,8 @@ void MESH_OT_select_mirror(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
/* props */
+ RNA_def_enum_flag(ot->srna, "axis", rna_enum_axis_flag_xyz_items, (1 << 0), "Axis", "");
+
RNA_def_boolean(ot->srna, "extend", 0, "Extend", "Extend the existing selection");
}