Transform Snap: Optimize edge-snap using BVH tree
changes in BLI_kdopbvh: - `BLI_bvhtree_find_nearest_to_ray` now takes is_ray_normalized and scale argument. - `BLI_bvhtree_find_nearest_to_ray_angle` has been added (use for perspective view). changes in BLI_bvhutils: - `bvhtree_from_editmesh_edges_ex` was added. changes in math_geom: - `dist_squared_ray_to_seg_v3` was added. other changes: - `do_ray_start_correction` is no longer necessary to snap to verts. - the way in which the test of depth was done before is being simulated in callbacks.
This commit is contained in:
@@ -96,7 +96,8 @@ typedef void (*BVHTree_NearestPointCallback)(void *userdata, int index, const fl
|
||||
typedef void (*BVHTree_RayCastCallback)(void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit);
|
||||
|
||||
/* callback must update nearest in case it finds a nearest result */
|
||||
typedef void (*BVHTree_NearestToRayCallback)(void *userdata, int index, const BVHTreeRay *ray, BVHTreeNearest *nearest);
|
||||
typedef void (*BVHTree_NearestToRayCallback)(void *userdata, const float ray_co[3], const float ray_dir[3],
|
||||
const float scale[3], int index, BVHTreeNearest *nearest);
|
||||
|
||||
/* callback to check if 2 nodes overlap (use thread if intersection results need to be stored) */
|
||||
typedef bool (*BVHTree_OverlapCallback)(void *userdata, int index_a, int index_b, int thread);
|
||||
@@ -142,8 +143,16 @@ int BLI_bvhtree_find_nearest(
|
||||
BVHTree *tree, const float co[3], BVHTreeNearest *nearest,
|
||||
BVHTree_NearestPointCallback callback, void *userdata);
|
||||
|
||||
int BLI_bvhtree_find_nearest_to_ray_angle(
|
||||
BVHTree *tree, const float co[3], const float dir[3],
|
||||
const bool ray_is_normalized, const float scale[3],
|
||||
BVHTreeNearest *nearest,
|
||||
BVHTree_NearestToRayCallback callback, void *userdata);
|
||||
|
||||
int BLI_bvhtree_find_nearest_to_ray(
|
||||
BVHTree *tree, const float co[3], const float dir[3], BVHTreeNearest *nearest,
|
||||
BVHTree *tree, const float co[3], const float dir[3],
|
||||
const bool ray_is_normalized, const float scale[3],
|
||||
BVHTreeNearest *nearest,
|
||||
BVHTree_NearestToRayCallback callback, void *userdata);
|
||||
|
||||
int BLI_bvhtree_ray_cast_ex(
|
||||
|
||||
Reference in New Issue
Block a user