diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-03-06 01:17:24 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-03-06 01:17:24 +0400 |
commit | bd83487dab6e4be5facf9fefb476a4273c64e1df (patch) | |
tree | d9830dc6cb286f6e31c63258736428d45377657a /source/blender/bmesh | |
parent | 1ae27144f665efeed0b9cd0f07fbe50a25b494d4 (diff) |
fix [#30459] BMesh Edge Split Hangs.
edge split result is still not correct in this case but at least avoid eternal loop.
also - dont tag sharp edges with <2 faces for splitting.
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r-- | source/blender/bmesh/operators/bmo_edgesplit.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/source/blender/bmesh/operators/bmo_edgesplit.c b/source/blender/bmesh/operators/bmo_edgesplit.c index 05a48f64e3b..e00f8cf4ca9 100644 --- a/source/blender/bmesh/operators/bmo_edgesplit.c +++ b/source/blender/bmesh/operators/bmo_edgesplit.c @@ -122,7 +122,7 @@ static void tag_out_edges(BMesh *bm, EdgeTag *etags, BMOperator *UNUSED(op)) { EdgeTag *et; BMIter iter; - BMLoop *l, *startl; + BMLoop *l, *l_start, *l_prev; BMEdge *e; BMVert *v; int i, ok; @@ -177,17 +177,19 @@ static void tag_out_edges(BMesh *bm, EdgeTag *etags, BMOperator *UNUSED(op)) * possible l->e is not et->newe1 or et->newe2. So always clear * the flag on l->e as well, to prevent infinite looping. */ BMO_elem_flag_disable(bm, l->e, EDGE_SEAM); + l_start = l; - startl = l; do { + /* l_prev checks stops us from looping over the same edge forever [#30459] */ + l_prev = l; l = BM_face_other_edge_loop(l->f, l->e, v); - if (l == startl || BM_edge_face_count(l->e) != 2) { + if (l == l_start || BM_edge_face_count(l->e) != 2) { break; } l = l->radial_next; - } while (l != startl && !BMO_elem_flag_test(bm, l->e, EDGE_SEAM)); + } while (l != l_start && l != l_prev && !BMO_elem_flag_test(bm, l->e, EDGE_SEAM)); - if (l == startl || !BMO_elem_flag_test(bm, l->e, EDGE_SEAM)) { + if (l == l_start || !BMO_elem_flag_test(bm, l->e, EDGE_SEAM)) { break; } |