[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56092] trunk/blender/source/blender: add distance arg to BKE_bmbvh_ray_cast().
Campbell Barton
ideasman42 at gmail.com
Tue Apr 16 17:16:48 CEST 2013
Revision: 56092
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56092
Author: campbellbarton
Date: 2013-04-16 15:16:48 +0000 (Tue, 16 Apr 2013)
Log Message:
-----------
add distance arg to BKE_bmbvh_ray_cast(). currently unused.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_editmesh_bvh.h
trunk/blender/source/blender/blenkernel/intern/editmesh_bvh.c
trunk/blender/source/blender/editors/mesh/editmesh_knife.c
trunk/blender/source/blender/editors/mesh/editmesh_utils.c
Modified: trunk/blender/source/blender/blenkernel/BKE_editmesh_bvh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_editmesh_bvh.h 2013-04-16 15:02:41 UTC (rev 56091)
+++ trunk/blender/source/blender/blenkernel/BKE_editmesh_bvh.h 2013-04-16 15:16:48 UTC (rev 56092)
@@ -45,7 +45,7 @@
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);
Modified: trunk/blender/source/blender/blenkernel/intern/editmesh_bvh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/editmesh_bvh.c 2013-04-16 15:02:41 UTC (rev 56091)
+++ trunk/blender/source/blender/blenkernel/intern/editmesh_bvh.c 2013-04-16 15:16:48 UTC (rev 56092)
@@ -237,17 +237,18 @@
}
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;
+
+ zero_v2(tree->uv);
- tree->uv[0] = tree->uv[1] = 0.0f;
-
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 @@
}
}
+ if (r_dist) {
+ *r_dist = hit.dist;
+ }
+
return tree->em->looptris[hit.index][0]->f;
}
Modified: trunk/blender/source/blender/editors/mesh/editmesh_knife.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_knife.c 2013-04-16 15:02:41 UTC (rev 56091)
+++ trunk/blender/source/blender/editors/mesh/editmesh_knife.c 2013-04-16 15:16:48 UTC (rev 56092)
@@ -1268,7 +1268,7 @@
add_v3_v3(p1, no);
/* ray cast */
- f_hit = BKE_bmbvh_ray_cast(bmtree, p1, no, NULL, NULL);
+ f_hit = BKE_bmbvh_ray_cast(bmtree, p1, no, NULL, NULL, NULL);
}
/* ok, if visible add the new point */
@@ -1502,7 +1502,7 @@
knife_input_ray_segment(kcd, kcd->curr.mval, 1.0f, origin, origin_ofs);
sub_v3_v3v3(ray, origin_ofs, origin);
- f = BKE_bmbvh_ray_cast(kcd->bmbvh, origin, ray, co, cageco);
+ f = BKE_bmbvh_ray_cast(kcd->bmbvh, origin, ray, NULL, co, cageco);
if (is_space)
*is_space = !f;
Modified: trunk/blender/source/blender/editors/mesh/editmesh_utils.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_utils.c 2013-04-16 15:02:41 UTC (rev 56091)
+++ trunk/blender/source/blender/editors/mesh/editmesh_utils.c 2013-04-16 15:16:48 UTC (rev 56092)
@@ -1391,7 +1391,7 @@
static BMFace *edge_ray_cast(struct BMBVHTree *tree, const float co[3], const float dir[3], float *r_hitout, BMEdge *e)
{
- BMFace *f = BKE_bmbvh_ray_cast(tree, co, dir, r_hitout, NULL);
+ BMFace *f = BKE_bmbvh_ray_cast(tree, co, dir, NULL, r_hitout, NULL);
if (f && BM_edge_in_face(f, e))
return NULL;
More information about the Bf-blender-cvs
mailing list