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-01-21 21:25:08 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-01-21 21:25:08 +0400
commit78405a89c84bb0e7a8617521152e28bc7db78c37 (patch)
treea7dacc93ff05291743ea95d938f59de0984db40b /source/blender/bmesh
parent8cde4e5182fd2bf2bab393db32c0fa460874f82b (diff)
fix [#33937] Planar decimate + triangulate operator leaves non-triangle faces
triangulate operation will now always triangulate, even on degenerate faces.
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r--source/blender/bmesh/intern/bmesh_polygon.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/source/blender/bmesh/intern/bmesh_polygon.c b/source/blender/bmesh/intern/bmesh_polygon.c
index f7dc143104c..62bd2649cd4 100644
--- a/source/blender/bmesh/intern/bmesh_polygon.c
+++ b/source/blender/bmesh/intern/bmesh_polygon.c
@@ -883,7 +883,13 @@ void BM_face_triangulate(BMesh *bm, BMFace *f, float (*projectverts)[3], const s
while (!done && f->len > 3) {
done = true;
l_iter = find_ear(f, projectverts, use_beauty, abscoss);
- if (l_iter) {
+
+ /* force triangulation - if we can't find an ear the face is degenerate */
+ if (l_iter == NULL) {
+ l_iter = BM_FACE_FIRST_LOOP(f);
+ }
+
+ {
done = false;
/* printf("Subdividing face...\n");*/
f = BM_face_split(bm, l_iter->f, l_iter->prev->v, l_iter->next->v, &newl, NULL, true);
@@ -914,6 +920,8 @@ void BM_face_triangulate(BMesh *bm, BMFace *f, float (*projectverts)[3], const s
}
}
+ BLI_assert(f->len == 3);
+
#if 0 /* XXX find_ear should now always return a corner, so no more need for this piece of code... */
if (f->len > 3) {
l_iter = BM_FACE_FIRST_LOOP(f);