[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57588] trunk/blender/source/blender/ blenkernel/intern/editmesh_bvh.c: BKE_bmbvh_find_vert_closest: very stupid & old bug, it was comparing hit locations incorrectly so that only the first hit was valid .

Campbell Barton ideasman42 at gmail.com
Wed Jun 19 22:43:38 CEST 2013


Revision: 57588
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57588
Author:   campbellbarton
Date:     2013-06-19 20:43:38 +0000 (Wed, 19 Jun 2013)
Log Message:
-----------
BKE_bmbvh_find_vert_closest: very stupid & old bug, it was comparing hit locations incorrectly so that only the first hit was valid.
This isn't noticeable for small distances, otherwise it gives bad results.

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

Modified: trunk/blender/source/blender/blenkernel/intern/editmesh_bvh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/editmesh_bvh.c	2013-06-19 20:40:54 UTC (rev 57587)
+++ trunk/blender/source/blender/blenkernel/intern/editmesh_bvh.c	2013-06-19 20:43:38 UTC (rev 57588)
@@ -369,7 +369,7 @@
 	int   index_tri;
 };
 
-static void bmbvh_find_vert_closest_cb(void *userdata, int index, const float *UNUSED(co), BVHTreeNearest *hit)
+static void bmbvh_find_vert_closest_cb(void *userdata, int index, const float co[3], BVHTreeNearest *hit)
 {
 	struct VertSearchUserData *bmcb_data = userdata;
 	const BMLoop **ltri = bmcb_data->looptris[index];
@@ -382,7 +382,7 @@
 	bmbvh_tri_from_face(tri_cos, ltri, bmcb_data->cos_cage);
 
 	for (i = 0; i < 3; i++) {
-		dist = len_squared_v3v3(hit->co, tri_cos[i]);
+		dist = len_squared_v3v3(co, tri_cos[i]);
 		if (dist < hit->dist && dist < maxdist) {
 			copy_v3_v3(hit->co, tri_cos[i]);
 			/* XXX, normal ignores cage */
@@ -402,7 +402,6 @@
 
 	if (bmtree->cos_cage) BLI_assert(!(bmtree->em->bm->elem_index_dirty & BM_VERT));
 
-	copy_v3_v3(hit.co, co);
 	hit.dist = maxdist_sq;
 	hit.index = -1;
 
@@ -411,7 +410,7 @@
 	bmcb_data.maxdist = maxdist_sq;
 
 	BLI_bvhtree_find_nearest(bmtree->tree, co, &hit, bmbvh_find_vert_closest_cb, &bmcb_data);
-	if (hit.dist != FLT_MAX && hit.index != -1) {
+	if (hit.index != -1) {
 		BMLoop **ltri = bmtree->em->looptris[hit.index];
 		return ltri[bmcb_data.index_tri]->v;
 	}




More information about the Bf-blender-cvs mailing list