diff options
author | milios <n_mhlios@hotmail.com> | 2018-08-31 23:07:42 +0300 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2018-08-31 23:14:56 +0300 |
commit | efd843b51c755ed3df1eb14533b3bc4fbe574619 (patch) | |
tree | b9165c3f25e431ba992dddbabb7ba57ec568d645 | |
parent | 41759e74de041dae465f9f5af4535aad8141284f (diff) |
Multi-Objects: MESH_OT_offset_edge_loops
Changes from reviewer (Dalai Felinto):
* Code style (replace tabs with spaces).
* Return OPERATOR_CANCELLED if no a single object get through.
Maniphest Tasks: T54643
https://developer.blender.org/D3392
-rw-r--r-- | source/blender/editors/mesh/editmesh_tools.c | 59 |
1 files changed, 36 insertions, 23 deletions
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 1cc1330abe1..c6c011cc436 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -6466,37 +6466,50 @@ void MESH_OT_wireframe(wmOperatorType *ot) static int edbm_offset_edgeloop_exec(bContext *C, wmOperator *op) { - Object *obedit = CTX_data_edit_object(C); - BMEditMesh *em = BKE_editmesh_from_object(obedit); - BMOperator bmop; const bool use_cap_endpoint = RNA_boolean_get(op->ptr, "use_cap_endpoint"); + int ret = OPERATOR_CANCELLED; - EDBM_op_init( - em, &bmop, op, - "offset_edgeloops edges=%he use_cap_endpoint=%b", - BM_ELEM_SELECT, use_cap_endpoint); + ViewLayer *view_layer = CTX_data_view_layer(C); + uint objects_len = 0; + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + for (uint ob_index = 0; ob_index < objects_len; ob_index++) { + Object *obedit = objects[ob_index]; + BMEditMesh *em = BKE_editmesh_from_object(obedit); - BMO_op_exec(em->bm, &bmop); + if (em->bm->totedgesel == 0) { + continue; + } - BM_mesh_elem_hflag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT, false); + BMOperator bmop; + EDBM_op_init( + em, &bmop, op, + "offset_edgeloops edges=%he use_cap_endpoint=%b", + BM_ELEM_SELECT, use_cap_endpoint); - /* If in face-only select mode, switch to edge select mode so that - * an edge-only selection is not inconsistent state */ - if (em->selectmode == SCE_SELECT_FACE) { - em->selectmode = SCE_SELECT_EDGE; - EDBM_selectmode_set(em); - EDBM_selectmode_to_scene(C); - } + BMO_op_exec(em->bm, &bmop); - BMO_slot_buffer_hflag_enable(em->bm, bmop.slots_out, "edges.out", BM_EDGE, BM_ELEM_SELECT, true); + BM_mesh_elem_hflag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT, false); - if (!EDBM_op_finish(em, &bmop, op, true)) { - return OPERATOR_CANCELLED; - } - else { - EDBM_update_generic(em, true, true); - return OPERATOR_FINISHED; + /* If in face-only select mode, switch to edge select mode so that + * an edge-only selection is not inconsistent state */ + if (em->selectmode == SCE_SELECT_FACE) { + em->selectmode = SCE_SELECT_EDGE; + EDBM_selectmode_set(em); + EDBM_selectmode_to_scene(C); + } + + BMO_slot_buffer_hflag_enable(em->bm, bmop.slots_out, "edges.out", BM_EDGE, BM_ELEM_SELECT, true); + + if (!EDBM_op_finish(em, &bmop, op, true)) { + continue; + } + else { + EDBM_update_generic(em, true, true); + ret = OPERATOR_FINISHED; + } } + MEM_freeN(objects); + return ret; } void MESH_OT_offset_edge_loops(wmOperatorType *ot) |