|
Blender V4.3
|
#include "BLI_sys_types.h"Go to the source code of this file.
Classes | |
| struct | BVHTreeAxisRange |
| struct | BVHTreeOverlap |
| struct | BVHTreeNearest |
| struct | BVHTreeRay |
| struct | BVHTreeRayHit |
Macros | |
| #define | USE_KDOPBVH_WATERTIGHT |
| #define | BVH_RAYCAST_DEFAULT (BVH_RAYCAST_WATERTIGHT) |
| #define | BVH_RAYCAST_DIST_MAX (FLT_MAX / 2.0f) |
Typedefs | |
| typedef struct BVHTree | BVHTree |
| typedef struct BVHTreeAxisRange | BVHTreeAxisRange |
| typedef struct BVHTreeOverlap | BVHTreeOverlap |
| typedef struct BVHTreeNearest | BVHTreeNearest |
| typedef struct BVHTreeRay | BVHTreeRay |
| typedef struct BVHTreeRayHit | BVHTreeRayHit |
| typedef void(* | BVHTree_NearestPointCallback) (void *userdata, int index, const float co[3], BVHTreeNearest *nearest) |
| typedef void(* | BVHTree_RayCastCallback) (void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit) |
| typedef bool(* | BVHTree_OverlapCallback) (void *userdata, int index_a, int index_b, int thread) |
| typedef void(* | BVHTree_RangeQuery) (void *userdata, int index, const float co[3], float dist_sq) |
| typedef void(* | BVHTree_NearestProjectedCallback) (void *userdata, int index, const struct DistProjectedAABBPrecalc *precalc, const float(*clip_plane)[4], int clip_plane_len, BVHTreeNearest *nearest) |
Enumerations | |
| enum | { BVH_OVERLAP_USE_THREADING = (1 << 0) , BVH_OVERLAP_RETURN_PAIRS = (1 << 1) , BVH_OVERLAP_SELF = (1 << 2) } |
| enum | { BVH_NEAREST_OPTIMAL_ORDER = (1 << 0) } |
| enum | { BVH_RAYCAST_WATERTIGHT = (1 << 0) } |
Variables | |
| const float | bvhtree_kdop_axes [13][3] |
| #define BVH_RAYCAST_DEFAULT (BVH_RAYCAST_WATERTIGHT) |
Definition at line 91 of file BLI_kdopbvh.h.
Referenced by BLI_bvhtree_ray_cast(), BLI_bvhtree_ray_cast_all(), boid_find_ground(), blender::ed::sculpt_paint::cloth::cloth_brush_solve_collision(), collision_detect(), eff_calc_visibility(), and rule_avoid_collision().
Definition at line 92 of file BLI_kdopbvh.h.
Referenced by BLI_bvhtree_bb_raycast(), BLI_bvhtree_ray_cast_ex(), cast_ray_highpoly(), dynamic_paint_paint_mesh_cell_point_cb_ex(), ED_transform_snap_object_project_ray_all(), ED_transform_snap_object_project_ray_ex(), ED_transform_snap_object_project_view3d_ex(), followtrack_project_to_depth_object_if_needed(), isect_bvhtree_point_v3(), meshdeform_ray_tree_intersect(), raycastMesh(), RNA_api_object(), RNA_api_scene(), shape_cut_test_point(), shrinkwrap_calc_normal_projection_cb_ex(), shrinkwrap_get_tarmat(), test_edges_isect_2d_ray(), walk_floor_distance_get(), walk_ray_cast(), and WM_OT_xr_navigation_teleport().
| #define USE_KDOPBVH_WATERTIGHT |
Definition at line 21 of file BLI_kdopbvh.h.
Referenced by raycast_callback().
| typedef struct BVHTree BVHTree |
Definition at line 20 of file BLI_kdopbvh.h.
| typedef void(* BVHTree_NearestPointCallback) (void *userdata, int index, const float co[3], BVHTreeNearest *nearest) |
Callback must update nearest in case it finds a nearest result.
Definition at line 97 of file BLI_kdopbvh.h.
| typedef void(* BVHTree_NearestProjectedCallback) (void *userdata, int index, const struct DistProjectedAABBPrecalc *precalc, const float(*clip_plane)[4], int clip_plane_len, BVHTreeNearest *nearest) |
Callback to find nearest projected.
Definition at line 123 of file BLI_kdopbvh.h.
Callback to check if 2 nodes overlap (use thread if intersection results need to be stored).
Definition at line 113 of file BLI_kdopbvh.h.
Callback to range search query.
Definition at line 118 of file BLI_kdopbvh.h.
| typedef void(* BVHTree_RayCastCallback) (void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit) |
Callback must update hit in case it finds a nearest successful hit.
Definition at line 105 of file BLI_kdopbvh.h.
| typedef struct BVHTreeAxisRange BVHTreeAxisRange |
| typedef struct BVHTreeNearest BVHTreeNearest |
| typedef struct BVHTreeOverlap BVHTreeOverlap |
| typedef struct BVHTreeRay BVHTreeRay |
| typedef struct BVHTreeRayHit BVHTreeRayHit |
| anonymous enum |
| Enumerator | |
|---|---|
| BVH_OVERLAP_USE_THREADING | |
| BVH_OVERLAP_RETURN_PAIRS | |
| BVH_OVERLAP_SELF | |
Definition at line 76 of file BLI_kdopbvh.h.
| anonymous enum |
| Enumerator | |
|---|---|
| BVH_NEAREST_OPTIMAL_ORDER | |
Definition at line 83 of file BLI_kdopbvh.h.
| anonymous enum |
| Enumerator | |
|---|---|
| BVH_RAYCAST_WATERTIGHT | |
Definition at line 87 of file BLI_kdopbvh.h.
| void BLI_bvhtree_balance | ( | BVHTree * | tree | ) |
Definition at line 946 of file BLI_kdopbvh.c.
References BLI_assert, implicit_needed_branches(), non_recursive_bvh_div_nodes(), NULL, and tree.
Referenced by BKE_bmbvh_new_ex(), BKE_bvhtree_from_mesh_edges_init(), BKE_bvhtree_from_mesh_tris_init(), BKE_bvhtree_from_mesh_verts_init(), BKE_bvhtree_from_pointcloud_get(), BM_face_split_edgenet_connect_islands(), BM_mesh_intersect(), BM_mesh_intersect_edges(), blender::ed::greasepencil::build_curves_2d_bvh_from_visible(), bvhtree_balance(), bvhtree_balance_isolated(), bvhtree_balance_isolated(), bvhtree_build_from_cloth(), bvhtree_build_from_mvert(), C_BVHTree_FromBMesh(), C_BVHTree_FromObject(), C_BVHTree_FromPolygons(), find_nearest_points_test(), blender::ed::sculpt_paint::grease_pencil_fill_extension_cut(), heat_ray_tree_create(), knife_bvh_init(), pointdensity_cache_object(), pointdensity_cache_psys(), TEST(), TEST(), and uv_select_overlap().
| float BLI_bvhtree_bb_raycast | ( | const float | bv[6], |
| const float | light_start[3], | ||
| const float | light_end[3], | ||
| float | pos[3] ) |
Definition at line 2047 of file BLI_kdopbvh.c.
References BVH_RAYCAST_DIST_MAX, copy_v3_v3(), data, BVHTreeRayHit::dist, BVHRayCastData::hit, madd_v3_v3v3fl(), normalize_v3(), pos, ray_nearest_hit(), and sub_v3_v3v3().
| int BLI_bvhtree_find_nearest | ( | const BVHTree * | tree, |
| const float | co[3], | ||
| BVHTreeNearest * | nearest, | ||
| BVHTree_NearestPointCallback | callback, | ||
| void * | userdata ) |
Definition at line 1706 of file BLI_kdopbvh.c.
References BLI_bvhtree_find_nearest_ex(), callback, and tree.
Referenced by BKE_bmbvh_find_face_closest(), BKE_bmbvh_find_vert_closest(), BKE_shrinkwrap_find_nearest_surface(), blender::nodes::node_geo_proximity_cc::ProximityFunction::call(), blender::nodes::node_geo_sample_nearest_surface_cc::SampleNearestSurfaceFunction::call(), closest_point_on_surface(), dynamic_paint_paint_mesh_cell_point_cb_ex(), blender::bke::find_nearest_tris(), blender::nodes::get_closest_in_bvhtree(), blender::nodes::node_geo_sample_nearest_cc::get_closest_pointcloud_points(), mesh_remap_bvhtree_query_nearest(), nearest_world_tree_co(), nearestVert(), blender::ed::sculpt_paint::PuffOperationExecutor::puff(), py_bvhtree_find_nearest(), remap_hair_emitter(), shrinkwrap_calc_nearest_vertex_cb_ex(), blender::ed::curves::convert_to_particle_system::try_convert_single_object(), and vert2geom_task_cb_ex().
| int BLI_bvhtree_find_nearest_ex | ( | const BVHTree * | tree, |
| const float | co[3], | ||
| BVHTreeNearest * | nearest, | ||
| BVHTree_NearestPointCallback | callback, | ||
| void * | userdata, | ||
| int | flag ) |
Find nearest node to the given coordinates (if nearest is given it will only search nodes where square distance is smaller than nearest->dist).
Definition at line 1657 of file BLI_kdopbvh.c.
References BVH_NEAREST_OPTIMAL_ORDER, bvhtree_kdop_axes, callback, data, dfs_find_nearest_begin(), dot_v3v3(), flag, FLT_MAX, heap_find_nearest_begin(), and tree.
Referenced by BKE_shrinkwrap_find_nearest_surface(), BLI_bvhtree_find_nearest(), and find_nearest_points_test().
| int BLI_bvhtree_find_nearest_first | ( | const BVHTree * | tree, |
| const float | co[3], | ||
| float | dist_sq, | ||
| BVHTree_NearestPointCallback | callback, | ||
| void * | userdata ) |
Find the first node nearby. Favors speed over quality since it doesn't find the best target node.
Definition at line 1773 of file BLI_kdopbvh.c.
References callback, data, dfs_find_duplicate_fast_dfs(), and tree.
| int BLI_bvhtree_find_nearest_projected | ( | const BVHTree * | tree, |
| float | projmat[4][4], | ||
| float | winsize[2], | ||
| float | mval[2], | ||
| float(*) | clip_planes[4], | ||
| int | clip_plane_len, | ||
| BVHTreeNearest * | nearest, | ||
| BVHTree_NearestProjectedCallback | callback, | ||
| void * | userdata ) |
Definition at line 2333 of file BLI_kdopbvh.c.
References BVHNode::bv, bvhtree_nearest_projected_dfs_recursive(), bvhtree_nearest_projected_with_clipplane_test_dfs_recursive(), callback, copy_v4_v4(), dist_squared_to_projected_aabb(), dist_squared_to_projected_aabb_precalc(), FLT_MAX, isect_aabb_planes_v3(), max_ii(), NULL, planes_from_projmat(), and tree.
Referenced by snapMesh().
| void BLI_bvhtree_free | ( | BVHTree * | tree | ) |
Definition at line 935 of file BLI_kdopbvh.c.
References MEM_freeN(), MEM_SAFE_FREE, and tree.
Referenced by BKE_bmbvh_free(), BKE_texture_pointdensity_free_data(), BLI_bvhtree_new(), BM_face_split_edgenet_connect_islands(), BM_mesh_intersect(), BM_mesh_intersect_edges(), bvhcache_free(), cache_pointdensity(), cloth_free_modifier(), cloth_free_modifier_extern(), deform_verts(), find_nearest_points_test(), free_bvhtree_from_mesh(), free_bvhtree_from_pointcloud(), blender::ed::greasepencil::free_curves_2d_bvh_data(), free_data(), free_pointdensity(), blender::ed::sculpt_paint::grease_pencil_fill_extension_cut(), heat_system_free(), knife_bvh_free(), psys_free(), psys_update_particle_bvhtree(), py_bvhtree__tp_dealloc(), TEST(), TEST(), and uv_select_overlap().
This function returns the bounding box of the BVH tree.
Definition at line 1058 of file BLI_kdopbvh.c.
References BLI_assert, BVHNode::bv, copy_v3_v3(), NULL, tree, and zero_v3().
Definition at line 1053 of file BLI_kdopbvh.c.
References tree.
Referenced by BKE_bmbvh_overlap(), BKE_bmbvh_overlap_self(), cloth_collision(), cloth_collision_response_static(), deform_verts(), hair_collision(), and blender::draw::statvis_calc_intersect().
Number of times BLI_bvhtree_insert has been called. mainly useful for asserts functions to check we added the correct number.
Definition at line 1043 of file BLI_kdopbvh.c.
References tree.
Referenced by bvhtree_from_mesh_corner_tris_create_tree(), bvhtree_from_mesh_faces_create_tree(), bvhtree_from_mesh_verts_create_tree(), TEST(), and TEST().
Maximum number of children that a node can have.
Definition at line 1048 of file BLI_kdopbvh.c.
References tree.
Referenced by BKE_bvhtree_from_mesh_get().
Construct: first insert points, then call balance.
Definition at line 988 of file BLI_kdopbvh.c.
References BLI_assert, bvhtree_node_inflate(), create_kdop_hull(), MEM_allocN_len, NULL, and tree.
Referenced by BKE_bmbvh_new_ex(), BKE_bvhtree_from_mesh_edges_init(), BKE_bvhtree_from_mesh_tris_init(), BKE_bvhtree_from_mesh_verts_init(), BKE_bvhtree_from_pointcloud_get(), BM_face_split_edgenet_connect_islands(), BM_mesh_intersect(), BM_mesh_intersect_edges(), blender::ed::greasepencil::build_curves_2d_bvh_from_visible(), bvhtree_build_from_cloth(), bvhtree_build_from_mvert(), bvhtree_from_mesh_corner_tris_create_tree(), bvhtree_from_mesh_edges_create_tree(), bvhtree_from_mesh_faces_create_tree(), bvhtree_from_mesh_verts_create_tree(), C_BVHTree_FromBMesh(), C_BVHTree_FromObject(), C_BVHTree_FromPolygons(), find_nearest_points_test(), blender::ed::sculpt_paint::grease_pencil_fill_extension_cut(), heat_ray_tree_create(), knife_bvh_init(), pointdensity_cache_object(), pointdensity_cache_psys(), psys_update_particle_bvhtree(), TEST(), and uv_select_overlap().
Definition at line 1507 of file BLI_kdopbvh.c.
References BLI_stack_count(), BLI_stack_free(), BLI_stack_new, BLI_stack_pop_n(), bvhtree_intersect_plane_dfs_recursive(), copy_v4_v4(), data, intersect(), MEM_mallocN, NULL, BVHIntersectPlaneData::tree, and tree.
Referenced by knife_find_line_hits().
NULL return. Definition at line 863 of file BLI_kdopbvh.c.
References BLI_assert, BLI_assert_unreachable, BLI_bvhtree_free(), implicit_needed_branches(), max_ff(), MAX_TREETYPE, MEM_callocN, NULL, tree, and UNLIKELY.
Referenced by BKE_bmbvh_new_ex(), BM_face_split_edgenet_connect_islands(), BM_mesh_intersect(), BM_mesh_intersect_edges(), blender::ed::greasepencil::build_curves_2d_bvh_from_visible(), bvhtree_build_from_cloth(), bvhtree_build_from_mvert(), bvhtree_new_common(), C_BVHTree_FromBMesh(), C_BVHTree_FromObject(), C_BVHTree_FromPolygons(), find_nearest_points_test(), blender::ed::sculpt_paint::grease_pencil_fill_extension_cut(), heat_ray_tree_create(), knife_bvh_init(), pointdensity_cache_object(), pointdensity_cache_psys(), psys_update_particle_bvhtree(), TEST(), TEST(), and uv_select_overlap().
| BVHTreeOverlap * BLI_bvhtree_overlap | ( | const BVHTree * | tree1, |
| const BVHTree * | tree2, | ||
| unsigned int * | r_overlap_num, | ||
| BVHTree_OverlapCallback | callback, | ||
| void * | userdata ) |
Definition at line 1433 of file BLI_kdopbvh.c.
References BLI_bvhtree_overlap_ex(), BVH_OVERLAP_RETURN_PAIRS, BVH_OVERLAP_USE_THREADING, and callback.
Referenced by BKE_bmbvh_overlap(), BKE_bmbvh_overlap_self(), cloth_bvh_collision(), and py_bvhtree_overlap().
| BVHTreeOverlap * BLI_bvhtree_overlap_ex | ( | const BVHTree * | tree1, |
| const BVHTree * | tree2, | ||
| uint * | r_overlap_num, | ||
| BVHTree_OverlapCallback | callback, | ||
| void * | userdata, | ||
| uint | max_interactions, | ||
| int | flag ) |
Collision/overlap: check two trees if they overlap, alloc's *overlap with length of the int return value.
| callback | optional, to test the overlap before adding (must be thread-safe!). |
Definition at line 1329 of file BLI_kdopbvh.c.
References BVHTree::axis, BLI_array_alloca, BLI_assert, BLI_bvhtree_overlap_thread_num(), BLI_parallel_range_settings_defaults(), BLI_stack_count(), BLI_stack_free(), BLI_stack_new, BLI_stack_pop_n(), BLI_task_parallel_range(), BVH_OVERLAP_RETURN_PAIRS, BVH_OVERLAP_SELF, BVH_OVERLAP_USE_THREADING, BVHOverlapData_Shared, bvhtree_overlap_task_cb(), callback, count, flag, KDOPBVH_THREAD_LEAF_THRESHOLD, BVHTree::leaf_num, MEM_mallocN, min_axis(), BVHTree::nodes, NULL, BVHTree::start_axis, BVHTree::stop_axis, tree_overlap_invoke_traverse(), tree_overlap_invoke_traverse_self(), tree_overlap_test(), and UNLIKELY.
Referenced by BLI_bvhtree_overlap(), BLI_bvhtree_overlap_self(), bm_elemxelem_bvhtree_overlap(), and BM_mesh_intersect().
| BVHTreeOverlap * BLI_bvhtree_overlap_self | ( | const BVHTree * | tree, |
| unsigned int * | r_overlap_num, | ||
| BVHTree_OverlapCallback | callback, | ||
| void * | userdata ) |
Compute overlaps of the tree with itself. This is faster than BLI_bvhtree_overlap because it only tests and returns each symmetrical pair once.
Definition at line 1450 of file BLI_kdopbvh.c.
References BLI_bvhtree_overlap_ex(), BVH_OVERLAP_RETURN_PAIRS, BVH_OVERLAP_SELF, BVH_OVERLAP_USE_THREADING, callback, and tree.
Referenced by cloth_bvh_collision(), blender::draw::statvis_calc_intersect(), and uv_select_overlap().
Use to check the total number of threads BLI_bvhtree_overlap will use.
Definition at line 1300 of file BLI_kdopbvh.c.
Referenced by BLI_bvhtree_overlap_ex(), and bm_elemxelem_bvhtree_overlap().
| int BLI_bvhtree_range_query | ( | const BVHTree * | tree, |
| const float | co[3], | ||
| float | radius, | ||
| BVHTree_RangeQuery | callback, | ||
| void * | userdata ) |
Range query.
Definition at line 2173 of file BLI_kdopbvh.c.
References calc_nearest_point_squared(), callback, data, dfs_range_query(), BVHNode::index, BVHNode::node_num, NULL, RangeQueryData::tree, and tree.
Referenced by pointdensity(), py_bvhtree_find_nearest_range(), and sph_evaluate_func().
| int BLI_bvhtree_ray_cast | ( | const BVHTree * | tree, |
| const float | co[3], | ||
| const float | dir[3], | ||
| float | radius, | ||
| BVHTreeRayHit * | hit, | ||
| BVHTree_RayCastCallback | callback, | ||
| void * | userdata ) |
Definition at line 2035 of file BLI_kdopbvh.c.
References BLI_bvhtree_ray_cast_ex(), BVH_RAYCAST_DEFAULT, callback, and tree.
Referenced by BKE_bmbvh_ray_cast(), BKE_bmbvh_ray_cast_filter(), BKE_shrinkwrap_project_normal(), cast_ray_highpoly(), dynamic_paint_paint_mesh_cell_point_cb_ex(), blender::ed::greasepencil::find_curve_intersections(), find_internal_spring_target_vertex(), followtrack_project_to_depth_object_if_needed(), blender::ed::sculpt_paint::grease_pencil_fill_extension_cut(), heat_ray_source_visible(), imapaint_pick_face(), isect_bvhtree_point_v3(), knife_bvh_raycast(), mesh_remap_bvhtree_query_raycast(), blender::ed::sculpt_paint::min_distance_edit::min_distance_edit_invoke(), py_bvhtree_ray_cast(), blender::nodes::node_geo_raycast_cc::raycast_to_mesh(), raycastMesh(), blender::ed::sculpt_paint::sample_curves_3d_brush(), blender::ed::sculpt_paint::sample_curves_surface_3d_brush(), blender::ed::sculpt_paint::AddOperationExecutor::sample_in_center(), blender::bke::mesh_surface_sample::sample_surface_points_projected(), shape_cut(), blender::geometry::curve_constraints::solve_length_and_collision_constraints(), and blender::draw::statvis_calc_thickness().
| void BLI_bvhtree_ray_cast_all | ( | const BVHTree * | tree, |
| const float | co[3], | ||
| const float | dir[3], | ||
| float | radius, | ||
| float | hit_dist, | ||
| BVHTree_RayCastCallback | callback, | ||
| void * | userdata ) |
Definition at line 2108 of file BLI_kdopbvh.c.
References BLI_bvhtree_ray_cast_all_ex(), BVH_RAYCAST_DEFAULT, callback, and tree.
Referenced by raycastMesh(), and shape_cut_test_point().
| void BLI_bvhtree_ray_cast_all_ex | ( | const BVHTree * | tree, |
| const float | co[3], | ||
| const float | dir[3], | ||
| float | radius, | ||
| float | hit_dist, | ||
| BVHTree_RayCastCallback | callback, | ||
| void * | userdata, | ||
| int | flag ) |
Calls the callback for every ray intersection
Definition at line 2074 of file BLI_kdopbvh.c.
References BLI_assert, BLI_ASSERT_UNIT_V3, bvhtree_ray_cast_data_precalc(), callback, copy_v3_v3(), data, dfs_raycast_all(), flag, NULL, and tree.
Referenced by BLI_bvhtree_ray_cast_all().
| int BLI_bvhtree_ray_cast_ex | ( | const BVHTree * | tree, |
| const float | co[3], | ||
| const float | dir[3], | ||
| float | radius, | ||
| BVHTreeRayHit * | hit, | ||
| BVHTree_RayCastCallback | callback, | ||
| void * | userdata, | ||
| int | flag ) |
Definition at line 1990 of file BLI_kdopbvh.c.
References BLI_ASSERT_UNIT_V3, BVH_RAYCAST_DIST_MAX, bvhtree_ray_cast_data_precalc(), callback, copy_v3_v3(), data, dfs_raycast(), flag, and tree.
Referenced by BLI_bvhtree_ray_cast(), boid_find_ground(), blender::ed::sculpt_paint::cloth::cloth_brush_solve_collision(), collision_detect(), eff_calc_visibility(), meshdeform_ray_tree_intersect(), rule_avoid_collision(), test_edges_isect_2d_ray(), and test_edges_isect_2d_vert().
| bool BLI_bvhtree_update_node | ( | BVHTree * | tree, |
| int | index, | ||
| const float | co[3], | ||
| const float | co_moving[3], | ||
| int | numpoints ) |
Update: first update points/nodes, then call update_tree to refit the bounding volumes.
Definition at line 1006 of file BLI_kdopbvh.c.
References bvhtree_node_inflate(), create_kdop_hull(), NULL, and tree.
Referenced by bvhtree_update_from_cloth(), and bvhtree_update_from_mvert().
| void BLI_bvhtree_update_tree | ( | BVHTree * | tree | ) |
Call BLI_bvhtree_update_node() first for every node/point/triangle.
Note that this does not rebalance the tree, so if the shape of the mesh changes too much, operations on the tree may become suboptimal.
Definition at line 1030 of file BLI_kdopbvh.c.
References node_join(), and tree.
Referenced by bvhtree_update_from_cloth(), and bvhtree_update_from_mvert().
|
extern |
Expose for BVH callbacks to use.
Bounding Volume Hierarchy Definition
Notes: From OBB until 26-DOP --> all bounding volumes possible, just choose type below Notes: You have to choose the type at compile time ITM Notes: You can choose the tree type --> binary, quad, octree, choose below
Definition at line 171 of file BLI_kdopbvh.c.
Referenced by BLI_bvhtree_find_nearest_ex(), bvhtree_ray_cast_data_precalc(), and create_kdop_hull().