[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