[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53966] trunk/blender/source/blender/bmesh /intern/bmesh_polygon.c: fix [#33937] Planar decimate + triangulate operator leaves non-triangle faces

Campbell Barton ideasman42 at gmail.com
Mon Jan 21 18:25:09 CET 2013


Revision: 53966
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53966
Author:   campbellbarton
Date:     2013-01-21 17:25:08 +0000 (Mon, 21 Jan 2013)
Log Message:
-----------
fix [#33937] Planar decimate + triangulate operator leaves non-triangle faces

triangulate operation will now always triangulate, even on degenerate faces.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_polygon.c

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_polygon.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_polygon.c	2013-01-21 16:43:04 UTC (rev 53965)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_polygon.c	2013-01-21 17:25:08 UTC (rev 53966)
@@ -883,7 +883,13 @@
 	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 @@
 		}
 	}
 
+	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);




More information about the Bf-blender-cvs mailing list