diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-08-23 15:28:33 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-08-23 15:28:33 +0400 |
commit | 81096bab0ca70b51ab3762c663a93db887f70d43 (patch) | |
tree | 3865322944e92735b820d6251bbcf435e11b850a /source/blender/bmesh/operators/bmo_triangulate.c | |
parent | 9843170f4b364cfd0b2b0346bfc4958c10e443f3 (diff) |
correct error in recent commit triangle-fill-dissolve, need to check if the edges face is removed (happens in rare cases).
Diffstat (limited to 'source/blender/bmesh/operators/bmo_triangulate.c')
-rw-r--r-- | source/blender/bmesh/operators/bmo_triangulate.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/source/blender/bmesh/operators/bmo_triangulate.c b/source/blender/bmesh/operators/bmo_triangulate.c index a8179330261..590b5ea97c4 100644 --- a/source/blender/bmesh/operators/bmo_triangulate.c +++ b/source/blender/bmesh/operators/bmo_triangulate.c @@ -137,16 +137,21 @@ void bmo_triangle_fill_exec(BMesh *bm, BMOperator *op) if (use_dissolve) { BMO_ITER (e, &siter, op->slots_out, "geom.out", BM_EDGE) { - BMFace *f_new; - f_new = BM_faces_join_pair(bm, e->l->f, - e->l->radial_next->f, e, - false); /* join faces */ - if (f_new) { - BMO_elem_flag_enable(bm, f_new, ELE_NEW); - BM_edge_kill(bm, e); + if (LIKELY(e->l)) { /* in rare cases the edges face will have already been removed from the edge */ + BMFace *f_new; + f_new = BM_faces_join_pair(bm, e->l->f, + e->l->radial_next->f, e, + false); /* join faces */ + if (f_new) { + BMO_elem_flag_enable(bm, f_new, ELE_NEW); + BM_edge_kill(bm, e); + } + else { + BMO_error_clear(bm); + } } else { - BMO_error_clear(bm); + BM_edge_kill(bm, e); } } |