diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2013-10-20 01:20:50 +0400 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2013-10-20 01:20:50 +0400 |
commit | 8f22c120f52fa6c9868eefa6561d06e984a86535 (patch) | |
tree | d06322f81b735c427e920b5e795e9758cb573d29 | |
parent | 0410eff30606473ab106f49cca8a83abf599dacf (diff) |
fix [#37145] "Triangulate Face" crash in specific scene
it was asserting if the last edge faces were already all set
-rw-r--r-- | source/blender/bmesh/intern/bmesh_polygon.c | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/source/blender/bmesh/intern/bmesh_polygon.c b/source/blender/bmesh/intern/bmesh_polygon.c index 46810f4dc8c..8a3abcb9b5e 100644 --- a/source/blender/bmesh/intern/bmesh_polygon.c +++ b/source/blender/bmesh/intern/bmesh_polygon.c @@ -974,26 +974,25 @@ void BM_face_triangulate(BMesh *bm, BMFace *f, BLI_assert(ok); - if (i == edge_array_len - 1) { - if (FACE_USED_TEST(f_a) == false) { + if (FACE_USED_TEST(f_a) == false) { + FACE_USED_SET(f_a); + + if (nf_i < edge_array_len) { + r_faces_new[nf_i++] = f_a; + } else { f_new = f_a; - } - else if (FACE_USED_TEST(f_b) == false) { - f_new = f_b; - } - else { - BLI_assert(false); + break; } } - else { - if (FACE_USED_TEST(f_a) == false) { - FACE_USED_SET(f_a); - r_faces_new[nf_i++] = f_a; - } - if (FACE_USED_TEST(f_b) == false) { - FACE_USED_SET(f_b); + if (FACE_USED_TEST(f_b) == false) { + FACE_USED_SET(f_b); + + if (nf_i < edge_array_len) { r_faces_new[nf_i++] = f_b; + } else { + f_new = f_b; + break; } } } |