diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-03-09 18:42:10 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-03-09 18:42:10 +0400 |
commit | c56b39c0e46d384259b9b7670fbc5823399388d6 (patch) | |
tree | ea7da304f71a4b6d8e446f5709caa58f4ca22c67 /source/blender | |
parent | 6a59f71d043b8cc6fa9556eb611beba00a7ed7e7 (diff) |
bmesh operator 'contextual_create' wasn't flagging single faces that were created (caused glitch in some cases with recent create-select functionality).
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/bmesh/operators/bmo_create.c | 1 | ||||
-rw-r--r-- | source/blender/editors/mesh/editmesh_tools.c | 38 |
2 files changed, 25 insertions, 14 deletions
diff --git a/source/blender/bmesh/operators/bmo_create.c b/source/blender/bmesh/operators/bmo_create.c index 7f96cd990ec..50220cfaa0c 100644 --- a/source/blender/bmesh/operators/bmo_create.c +++ b/source/blender/bmesh/operators/bmo_create.c @@ -1491,6 +1491,7 @@ void bmo_contextual_create_exec(BMesh *bm, BMOperator *op) if (use_smooth) { BM_elem_flag_enable(f, BM_ELEM_SMOOTH); } + BMO_slot_buffer_from_enabled_flag(bm, op, op->slots_out, "faces.out", BM_FACE, ELE_OUT); } MEM_freeN(vert_arr); diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 5da01daff55..d4765c30fc1 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -1143,7 +1143,7 @@ static BMElem *edbm_add_edge_face_exec__tricky_extend_sel(BMesh *bm) } if (found) { - BMEdge *ed_pair[3] = {NULL}; + BMEdge *ed_pair[3]; if ( ((edbm_add_edge_face_exec__vert_edge_lookup(v, NULL, ed_pair, 3, BM_edge_is_wire) == 2) && (BM_edge_share_face_check(ed_pair[0], ed_pair[1]) == false)) || @@ -1152,8 +1152,13 @@ static BMElem *edbm_add_edge_face_exec__tricky_extend_sel(BMesh *bm) (BM_edge_share_face_check(ed_pair[0], ed_pair[1]) == false)) ) { + BMEdge *e_other = BM_edge_exists(BM_edge_other_vert(ed_pair[0], v), + BM_edge_other_vert(ed_pair[1], v)); BM_edge_select_set(bm, ed_pair[0], true); BM_edge_select_set(bm, ed_pair[1], true); + if (e_other) { + BM_edge_select_set(bm, e_other, true); + } return (BMElem *)v; } } @@ -1169,22 +1174,27 @@ static BMElem *edbm_add_edge_face_exec__tricky_extend_sel(BMesh *bm) } } if (found) { - BMEdge *ed_pair_a[2] = {NULL}; - BMEdge *ed_pair_b[2] = {NULL}; + BMEdge *ed_pair_v1[2]; + BMEdge *ed_pair_v2[2]; if ( - ((edbm_add_edge_face_exec__vert_edge_lookup(e->v1, e, ed_pair_a, 2, BM_edge_is_wire) == 1) && - (edbm_add_edge_face_exec__vert_edge_lookup(e->v2, e, ed_pair_b, 2, BM_edge_is_wire) == 1) && - (BM_edge_share_face_check(e, ed_pair_a[0]) == false) && - (BM_edge_share_face_check(e, ed_pair_b[0]) == false)) || - - ((edbm_add_edge_face_exec__vert_edge_lookup(e->v1, e, ed_pair_a, 2, BM_edge_is_boundary) == 1) && - (edbm_add_edge_face_exec__vert_edge_lookup(e->v2, e, ed_pair_b, 2, BM_edge_is_boundary) == 1) && - (BM_edge_share_face_check(e, ed_pair_a[0]) == false) && - (BM_edge_share_face_check(e, ed_pair_b[0]) == false)) + ((edbm_add_edge_face_exec__vert_edge_lookup(e->v1, e, ed_pair_v1, 2, BM_edge_is_wire) == 1) && + (edbm_add_edge_face_exec__vert_edge_lookup(e->v2, e, ed_pair_v2, 2, BM_edge_is_wire) == 1) && + (BM_edge_share_face_check(e, ed_pair_v1[0]) == false) && + (BM_edge_share_face_check(e, ed_pair_v2[0]) == false)) || + + ((edbm_add_edge_face_exec__vert_edge_lookup(e->v1, e, ed_pair_v1, 2, BM_edge_is_boundary) == 1) && + (edbm_add_edge_face_exec__vert_edge_lookup(e->v2, e, ed_pair_v2, 2, BM_edge_is_boundary) == 1) && + (BM_edge_share_face_check(e, ed_pair_v1[0]) == false) && + (BM_edge_share_face_check(e, ed_pair_v2[0]) == false)) ) { - BM_edge_select_set(bm, ed_pair_a[0], true); - BM_edge_select_set(bm, ed_pair_b[0], true); + BMEdge *e_other = BM_edge_exists(BM_edge_other_vert(ed_pair_v1[0], e->v1), + BM_edge_other_vert(ed_pair_v2[0], e->v2)); + BM_edge_select_set(bm, ed_pair_v1[0], true); + BM_edge_select_set(bm, ed_pair_v2[0], true); + if (e_other) { + BM_edge_select_set(bm, e_other, true); + } return (BMElem *)e; } } |