[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16025] trunk/blender/source/blender/ blenkernel/intern/bvhutils.c: Fixing point-face distance to support degenerated tris/quads with area< FLT_EPSILON

Daniel Genrich daniel.genrich at gmx.net
Fri Aug 8 16:24:48 CEST 2008


Revision: 16025
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16025
Author:   genscher
Date:     2008-08-08 16:24:47 +0200 (Fri, 08 Aug 2008)

Log Message:
-----------
Fixing point-face distance to support degenerated tris/quads with area<FLT_EPSILON

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/bvhutils.c

Modified: trunk/blender/source/blender/blenkernel/intern/bvhutils.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/bvhutils.c	2008-08-08 11:40:51 UTC (rev 16024)
+++ trunk/blender/source/blender/blenkernel/intern/bvhutils.c	2008-08-08 14:24:47 UTC (rev 16025)
@@ -268,17 +268,24 @@
 	do
 	{	
 		float nearest_tmp[3], dist;
-
-		dist = nearest_point_in_tri_surface(co,t0, t1, t2, nearest_tmp);
-		if(dist < nearest->dist)
+		float vec[3][3];
+		
+		// only insert valid triangles / quads with area > 0
+		VECSUB(vec[0], t2, t1);
+		VECSUB(vec[1], t0, t1);
+		Crossf(vec[2], vec[0], vec[1]);
+		if(INPR(vec[2], vec[2]) >= FLT_EPSILON)
 		{
-			nearest->index = index;
-			nearest->dist = dist;
-			VECCOPY(nearest->co, nearest_tmp);
-			CalcNormFloat((float*)t0, (float*)t1, (float*)t2, nearest->no); //TODO.. (interpolate normals from the vertexs coordinates?
+			dist = nearest_point_in_tri_surface(co,t0, t1, t2, nearest_tmp);
+			if(dist < nearest->dist)
+			{
+				nearest->index = index;
+				nearest->dist = dist;
+				VECCOPY(nearest->co, nearest_tmp);
+				CalcNormFloat((float*)t0, (float*)t1, (float*)t2, nearest->no); //TODO.. (interpolate normals from the vertexs coordinates?
+			}
 		}
 
-
 		t1 = t2;
 		t2 = t3;
 		t3 = NULL;
@@ -396,7 +403,7 @@
 			VECCOPY(co[2], vert[ face[i].v3 ].co);
 			if(face[i].v4)
 				VECCOPY(co[3], vert[ face[i].v4 ].co);
-
+			
 			BLI_bvhtree_insert(tree, i, co[0], face[i].v4 ? 4 : 3);
 		}
 		BLI_bvhtree_balance(tree);





More information about the Bf-blender-cvs mailing list