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>2013-03-09 18:42:10 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-03-09 18:42:10 +0400
commitc56b39c0e46d384259b9b7670fbc5823399388d6 (patch)
treeea7da304f71a4b6d8e446f5709caa58f4ca22c67 /source/blender
parent6a59f71d043b8cc6fa9556eb611beba00a7ed7e7 (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.c1
-rw-r--r--source/blender/editors/mesh/editmesh_tools.c38
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;
}
}