diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-11-06 17:17:16 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2014-11-06 17:35:46 +0300 |
commit | a081a4817cf43ec20fc7ba26b2b92fad2d976c8e (patch) | |
tree | 440dc7241ba7eebff4eb11b8119575dd340044d8 /source/blender/editors/mesh | |
parent | d1eb762b579b531a78f117a1c123465b8647296d (diff) |
Editmesh: select more/less can now step over adjacent faces
This keeps a square shaped selection when using grid topology.
Diffstat (limited to 'source/blender/editors/mesh')
-rw-r--r-- | source/blender/editors/mesh/editmesh_select.c | 14 | ||||
-rw-r--r-- | source/blender/editors/mesh/editmesh_utils.c | 16 |
2 files changed, 18 insertions, 12 deletions
diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index 473da4c9756..5f3f7cb242c 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -2473,12 +2473,13 @@ void MESH_OT_select_mirror(wmOperatorType *ot) /* ******************** **************** */ -static int edbm_select_more_exec(bContext *C, wmOperator *UNUSED(op)) +static int edbm_select_more_exec(bContext *C, wmOperator *op) { Object *obedit = CTX_data_edit_object(C); BMEditMesh *em = BKE_editmesh_from_object(obedit); + const bool use_face_step = RNA_boolean_get(op->ptr, "use_face_step"); - EDBM_select_more(em); + EDBM_select_more(em, use_face_step); WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit); return OPERATOR_FINISHED; @@ -2497,14 +2498,17 @@ void MESH_OT_select_more(wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + RNA_def_boolean(ot->srna, "use_face_step", true, "Face Step", "Connected faces (instead of edges)"); } -static int edbm_select_less_exec(bContext *C, wmOperator *UNUSED(op)) +static int edbm_select_less_exec(bContext *C, wmOperator *op) { Object *obedit = CTX_data_edit_object(C); BMEditMesh *em = BKE_editmesh_from_object(obedit); + const bool use_face_step = RNA_boolean_get(op->ptr, "use_face_step"); - EDBM_select_less(em); + EDBM_select_less(em, use_face_step); WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit); return OPERATOR_FINISHED; @@ -2523,6 +2527,8 @@ void MESH_OT_select_less(wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + RNA_def_boolean(ot->srna, "use_face_step", true, "Face Step", "Connected faces (instead of edges)"); } /** diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c index c7d1d883537..30750393f39 100644 --- a/source/blender/editors/mesh/editmesh_utils.c +++ b/source/blender/editors/mesh/editmesh_utils.c @@ -432,14 +432,14 @@ void EDBM_select_flush(BMEditMesh *em) BM_mesh_select_flush(em->bm); } -void EDBM_select_more(BMEditMesh *em) +void EDBM_select_more(BMEditMesh *em, const bool use_face_step) { BMOperator bmop; - int use_faces = em->selectmode == SCE_SELECT_FACE; + const bool use_faces = (em->selectmode == SCE_SELECT_FACE); BMO_op_initf(em->bm, &bmop, BMO_FLAG_DEFAULTS, - "region_extend geom=%hvef use_constrict=%b use_faces=%b", - BM_ELEM_SELECT, false, use_faces); + "region_extend geom=%hvef use_contract=%b use_faces=%b use_face_step=%b", + BM_ELEM_SELECT, false, use_faces, use_face_step); BMO_op_exec(em->bm, &bmop); /* don't flush selection in edge/vertex mode */ BMO_slot_buffer_hflag_enable(em->bm, bmop.slots_out, "geom.out", BM_ALL_NOLOOP, BM_ELEM_SELECT, use_faces ? true : false); @@ -448,14 +448,14 @@ void EDBM_select_more(BMEditMesh *em) EDBM_selectmode_flush(em); } -void EDBM_select_less(BMEditMesh *em) +void EDBM_select_less(BMEditMesh *em, const bool use_face_step) { BMOperator bmop; - int use_faces = em->selectmode == SCE_SELECT_FACE; + const bool use_faces = (em->selectmode == SCE_SELECT_FACE); BMO_op_initf(em->bm, &bmop, BMO_FLAG_DEFAULTS, - "region_extend geom=%hvef use_constrict=%b use_faces=%b", - BM_ELEM_SELECT, true, use_faces); + "region_extend geom=%hvef use_contract=%b use_faces=%b use_face_step=%b", + BM_ELEM_SELECT, true, use_faces, use_face_step); BMO_op_exec(em->bm, &bmop); /* don't flush selection in edge/vertex mode */ BMO_slot_buffer_hflag_disable(em->bm, bmop.slots_out, "geom.out", BM_ALL_NOLOOP, BM_ELEM_SELECT, use_faces ? true : false); |