MeshLib C++ Docs
Loading...
Searching...
No Matches
MRAABBTreePoints.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRBox.h"
4#include "MRId.h"
5#include "MRVector.h"
6#include "MRVector3.h"
7
8namespace MR
9{
10
13
16{
17public:
18 struct Node
19 {
20 Box3f box;
21 NodeId l;
22 NodeId r;
24 bool leaf() const { return !l.valid(); }
26 std::pair<int, int> getLeafPointRange() const { assert( leaf() ); return { -( l + 1 ),-( r + 1 ) }; }
28 void setLeafPointRange( int first, int last ) { l = NodeId( -( first + 1 ) ); r = NodeId( -( last + 1 ) ); }
29 };
32 [[nodiscard]] const NodeVec& nodes() const { return nodes_; }
33 [[nodiscard]] const Node& operator[]( NodeId nid ) const { return nodes_[nid]; }
34 [[nodiscard]] static NodeId rootNodeId() { return NodeId{0}; }
36 [[nodiscard]] Box3f getBoundingBox() const { return nodes_.empty() ? Box3f{} : nodes_[rootNodeId()].box; }
37
38 struct Point
39 {
40 Vector3f coord;
41 VertId id;
42 };
43 [[nodiscard]] const std::vector<Point>& orderedPoints() const { return orderedPoints_; }
44
46 MRMESH_API AABBTreePoints( const PointCloud& pointCloud );
50 MRMESH_API AABBTreePoints( const VertCoords & points, const VertBitSet * validPoints = nullptr );
52 AABBTreePoints( const VertCoords & points, const VertBitSet & validPoints ) : AABBTreePoints( points, &validPoints ) {}
53
55 constexpr static int MaxNumPointsInLeaf = 16;
56
57 AABBTreePoints( AABBTreePoints && ) noexcept = default;
58 AABBTreePoints & operator =( AABBTreePoints && ) noexcept = default;
59
62 MRMESH_API void getLeafOrder( VertBMap & vertMap ) const;
66 MRMESH_API void getLeafOrderAndReset( VertBMap & vertMap );
67
69 [[nodiscard]] MRMESH_API size_t heapBytes() const;
70
75 MRMESH_API void refit( const VertCoords & newCoords, const VertBitSet & changedVerts );
76
77private:
78 std::vector<Point> orderedPoints_;
79 NodeVec nodes_;
80
81 AABBTreePoints( const AABBTreePoints & ) = default;
82 AABBTreePoints & operator =( const AABBTreePoints & ) = default;
85};
86
88
89} // namespace MR
#define MRMESH_API
Definition MRMesh/MRMeshFwd.h:79
bounding volume hierarchy for point cloud structure
Definition MRAABBTreePoints.h:16
MRMESH_API void getLeafOrderAndReset(VertBMap &vertMap)
const Node & operator[](NodeId nid) const
Definition MRAABBTreePoints.h:33
MRMESH_API size_t heapBytes() const
returns the amount of memory this object occupies on heap
const std::vector< Point > & orderedPoints() const
Definition MRAABBTreePoints.h:43
AABBTreePoints(AABBTreePoints &&) noexcept=default
const NodeVec & nodes() const
Definition MRAABBTreePoints.h:32
static constexpr int MaxNumPointsInLeaf
maximum number of points in leaf node of tree (all of leafs should have this number of points except ...
Definition MRAABBTreePoints.h:55
Box3f getBoundingBox() const
returns the root node bounding box
Definition MRAABBTreePoints.h:36
MRMESH_API AABBTreePoints(const VertCoords &points, const VertBitSet *validPoints=nullptr)
creates tree from given valid points
MRMESH_API AABBTreePoints(const Mesh &mesh)
creates tree for vertices of given mesh
MRMESH_API void refit(const VertCoords &newCoords, const VertBitSet &changedVerts)
static NodeId rootNodeId()
Definition MRAABBTreePoints.h:34
MRMESH_API void getLeafOrder(VertBMap &vertMap) const
MRMESH_API AABBTreePoints(const PointCloud &pointCloud)
creates tree for given point cloud
AABBTreePoints(const VertCoords &points, const VertBitSet &validPoints)
creates tree from given valid points
Definition MRAABBTreePoints.h:52
Definition MRSharedThreadSafeOwner.h:19
container of bits representing specific indices (faces, verts or edges)
Definition MRMesh/MRBitSet.h:127
Definition MRUniqueThreadSafeOwner.h:18
bool empty() const
Definition MRMesh/MRVector.h:40
Definition MRAABBTreePoints.h:19
void setLeafPointRange(int first, int last)
sets [first,last) to this node (leaf)
Definition MRAABBTreePoints.h:28
Box3f box
bounding box of whole subtree
Definition MRAABBTreePoints.h:20
std::pair< int, int > getLeafPointRange() const
returns [first,last) indices of leaf points
Definition MRAABBTreePoints.h:26
bool leaf() const
returns true if node represent real points, false if it has child nodes
Definition MRAABBTreePoints.h:24
NodeId r
Definition MRAABBTreePoints.h:22
NodeId l
left child node for an inner node, or -(l+1) is the index of the first point in a leaf node
Definition MRAABBTreePoints.h:21
Definition MRAABBTreePoints.h:39
Vector3f coord
Definition MRAABBTreePoints.h:40
VertId id
Definition MRAABBTreePoints.h:41
Definition MRMesh/MRMesh.h:22
Definition MRMesh/MRPointCloud.h:16