Go to the documentation of this file.
7 #ifndef INCLUDE_JET_BVH2_H_
8 #define INCLUDE_JET_BVH2_H_
30 using Iterator =
typename ContainerType::iterator;
37 void build(
const std::vector<T>& items,
38 const std::vector<BoundingBox2D>& itemsBounds);
91 const T&
item(
size_t i)
const;
97 std::pair<size_t, size_t>
children(
size_t i)
const;
122 void initInternal(uint8_t axis,
size_t c,
const BoundingBox2D& b);
128 std::vector<BoundingBox2D> _itemBounds;
129 std::vector<Node> _nodes;
131 size_t build(
size_t nodeIndex,
size_t* itemIndices,
size_t nItems,
132 size_t currentDepth);
134 size_t qsplit(
size_t* itemIndices,
size_t numItems,
double pivot,
139 #include "detail/bvh2-inl.h"
141 #endif // INCLUDE_JET_BVH2_H_
Abstract base class for 2-D intersection test query engine.
Definition: intersection_query_engine2.h:48
const BoundingBox2D & nodeBound(size_t i) const
Returns bounding box of i-th node.
Iterator end()
Returns the end iterator of the item.
NearestNeighborQueryResult2< T > nearest(const Vector2D &pt, const NearestNeighborDistanceFunc2< T > &distanceFunc) const override
const T & item(size_t i) const
Returns the item at i.
Iterator begin()
Returns the begin iterator of the item.
bool intersects(const BoundingBox2D &box, const BoxIntersectionTestFunc2< T > &testFunc) const override
Returns true if given box intersects with any of the stored items.
Class for 2-D ray.
Definition: ray2.h:21
ConstIterator end() const
Returns the immutable end iterator of the item.
size_t numberOfNodes() const
Returns the number of nodes.
BoundingBox2< double > BoundingBox2D
Double-type 2-D BoundingBox.
Definition: bounding_box2.h:124
Nearest neighbor query result.
Definition: nearest_neighbor_query_engine2.h:19
void clear()
Clears all the contents of this instance.
Bvh2()
Default constructor.
void build(const std::vector< T > &items, const std::vector< BoundingBox2D > &itemsBounds)
Builds bounding volume hierarchy.
Definition: advection_solver2.h:18
std::function< bool(const T &, const BoundingBox2D &)> BoxIntersectionTestFunc2
Box-item intersection test function.
Definition: intersection_query_engine2.h:32
bool isLeaf(size_t i) const
Returns true if i-th node is a leaf node.
bool intersects(const Ray2D &ray, const RayIntersectionTestFunc2< T > &testFunc) const override
Returns true if given ray intersects with any of the stored items.
std::vector< Surface2Ptr > ContainerType
Definition: bvh2.h:29
ConstIterator itemOfNode(size_t i) const
Returns item of i-th node.
2-D vector class.
Definition: vector2.h:24
Abstract base class for 2-D nearest neigbor query engine.
Definition: nearest_neighbor_query_engine2.h:31
typename ContainerType::const_iterator ConstIterator
Definition: bvh2.h:31
std::function< double(const T &, const Ray2D &)> GetRayIntersectionFunc2
Ray-item closest intersection evaluation function.
Definition: intersection_query_engine2.h:40
size_t numberOfItems() const
Returns the number of items.
Bounding Volume Hierarchy (BVH) in 2D.
Definition: bvh2.h:27
std::function< double(const T &, const Vector2D &)> NearestNeighborDistanceFunc2
Nearest neighbor distance measure function.
Definition: nearest_neighbor_query_engine2.h:27
Iterator itemOfNode(size_t i)
Returns item of i-th node.
std::function< void(const T &)> IntersectionVisitorFunc2
Visitor function which is invoked for each intersecting item.
Definition: intersection_query_engine2.h:44
ConstIterator begin() const
Returns the immutable begin iterator of the item.
2-D axis-aligned bounding box class.
Definition: bounding_box2.h:41
void forEachIntersectingItem(const BoundingBox2D &box, const BoxIntersectionTestFunc2< T > &testFunc, const IntersectionVisitorFunc2< T > &visitorFunc) const override
Invokes visitorFunc for every intersecting items.
ClosestIntersectionQueryResult2< T > closestIntersection(const Ray2D &ray, const GetRayIntersectionFunc2< T > &testFunc) const override
Returns the closest intersection for given ray.
std::pair< size_t, size_t > children(size_t i) const
Returns the children indices of i-th node.
void forEachIntersectingItem(const Ray2D &ray, const RayIntersectionTestFunc2< T > &testFunc, const IntersectionVisitorFunc2< T > &visitorFunc) const override
Invokes visitorFunc for every intersecting items.
Closest intersection query result.
Definition: intersection_query_engine2.h:19
typename ContainerType::iterator Iterator
Definition: bvh2.h:30
std::function< bool(const T &, const Ray2D &)> RayIntersectionTestFunc2
Ray-item intersection test function.
Definition: intersection_query_engine2.h:36
const BoundingBox2D & boundingBox() const
Returns bounding box of every items.