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);


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to