[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45036] trunk/blender/source/blender/ blenlib/intern/scanfill.c: Fix #30543: tessellating ngons with small angles was failing.

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Mar 20 20:32:31 CET 2012


Revision: 45036
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45036
Author:   blendix
Date:     2012-03-20 19:32:31 +0000 (Tue, 20 Mar 2012)
Log Message:
-----------
Fix #30543: tessellating ngons with small angles was failing. There was a quite
arbitrary limit of pi/24 for picking 3 vertices to use for computing a normal,
now it uses vertices with the maximum angle between them.

Modified Paths:
--------------
    trunk/blender/source/blender/blenlib/intern/scanfill.c

Modified: trunk/blender/source/blender/blenlib/intern/scanfill.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/scanfill.c	2012-03-20 19:32:12 UTC (rev 45035)
+++ trunk/blender/source/blender/blenlib/intern/scanfill.c	2012-03-20 19:32:31 UTC (rev 45036)
@@ -872,30 +872,29 @@
 	/* just use the first three different vertices */
 	
 	/* THIS PART STILL IS PRETTY WEAK! (ton) */
-	
+
 	eve= fillvertbase.last;
 	len= 0.0;
 	v1= eve->co;
 	v2= 0;
 	eve= fillvertbase.first;
-	limit = a < 5 ? FLT_EPSILON*200 : M_PI/24.0;
+	limit = 1e-8f;
+
 	while(eve) {
 		if(v2) {
-			if( compare_v3v3(v2, eve->co, COMPLIMIT)==0) {
+			if(!compare_v3v3(v2, eve->co, COMPLIMIT)) {
 				float inner = angle_v3v3v3(v1, v2, eve->co);
-				
-				if (fabsf(inner-M_PI) < limit || fabsf(inner) < limit) {
-					eve = eve->next;
-					continue;
-				}
+				inner = MIN2(fabsf(inner), fabsf(M_PI - inner));
 
-				len= normal_tri_v3( norm,v1, v2, eve->co);
-				if(len != 0.0f) break;
+				if(inner > limit) {
+					limit = inner;
+					len= normal_tri_v3(norm, v1, v2, eve->co);
+				}
 			}
 		}
-		else if(compare_v3v3(v1, eve->co, COMPLIMIT)==0) {
+		else if(!compare_v3v3(v1, eve->co, COMPLIMIT))
 			v2= eve->co;
-		}
+
 		eve= eve->next;
 	}
 




More information about the Bf-blender-cvs mailing list