diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-04-16 19:16:48 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-04-16 19:16:48 +0400 |
commit | 9f5006a9670b655292d8cf534d474991a63f344c (patch) | |
tree | 851a8f3ebcd7f6bc18184bdc765401600467c184 /source/blender/blenkernel | |
parent | 53c9507c2878b38176c841c4a2172ea7f543aaba (diff) |
add distance arg to BKE_bmbvh_ray_cast(). currently unused.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_editmesh_bvh.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/editmesh_bvh.c | 15 |
2 files changed, 11 insertions, 6 deletions
diff --git a/source/blender/blenkernel/BKE_editmesh_bvh.h b/source/blender/blenkernel/BKE_editmesh_bvh.h index cdab48f239c..b0761f216d2 100644 --- a/source/blender/blenkernel/BKE_editmesh_bvh.h +++ b/source/blender/blenkernel/BKE_editmesh_bvh.h @@ -45,7 +45,7 @@ BMBVHTree *BKE_bmbvh_new(struct BMEditMesh *em, int flag, struct Scene *sce void BKE_bmbvh_free(BMBVHTree *tree); struct BVHTree *BKE_bmbvh_tree_get(BMBVHTree *tree); struct BMFace *BKE_bmbvh_ray_cast(BMBVHTree *tree, const float co[3], const float dir[3], - float r_hitout[3], float r_cagehit[3]); + float *r_dist, float r_hitout[3], float r_cagehit[3]); /* find a vert closest to co in a sphere of radius maxdist */ struct BMVert *BKE_bmbvh_find_vert_closest(BMBVHTree *tree, const float co[3], const float maxdist); diff --git a/source/blender/blenkernel/intern/editmesh_bvh.c b/source/blender/blenkernel/intern/editmesh_bvh.c index a94d1d1e5aa..7921468fdc6 100644 --- a/source/blender/blenkernel/intern/editmesh_bvh.c +++ b/source/blender/blenkernel/intern/editmesh_bvh.c @@ -237,17 +237,18 @@ static void raycallback(void *userdata, int index, const BVHTreeRay *ray, BVHTre } BMFace *BKE_bmbvh_ray_cast(BMBVHTree *tree, const float co[3], const float dir[3], - float r_hitout[3], float r_cagehit[3]) + float *r_dist, float r_hitout[3], float r_cagehit[3]) { BVHTreeRayHit hit; + const float dist = r_dist ? *r_dist : FLT_MAX; - hit.dist = FLT_MAX; + hit.dist = dist; hit.index = -1; - - tree->uv[0] = tree->uv[1] = 0.0f; + + zero_v2(tree->uv); BLI_bvhtree_ray_cast(tree->tree, co, dir, 0.0f, &hit, raycallback, tree); - if (hit.dist != FLT_MAX && hit.index != -1) { + if (hit.index != -1 && hit.dist != dist) { if (r_hitout) { if (tree->flag & BMBVH_RETURN_ORIG) { const float *co1, *co2, *co3; @@ -271,6 +272,10 @@ BMFace *BKE_bmbvh_ray_cast(BMBVHTree *tree, const float co[3], const float dir[3 } } + if (r_dist) { + *r_dist = hit.dist; + } + return tree->em->looptris[hit.index][0]->f; } |