Ponca  84886bac0b52a686e88046a375da13f12f2b87d2
Point Cloud Analysis library
Loading...
Searching...
No Matches
Ponca::KdTreeBase< Traits > Class Template Reference

[KdTreeSparse type definition] More...

#include <kdTree.h>

+ Inheritance diagram for Ponca::KdTreeBase< Traits >:
+ Collaboration diagram for Ponca::KdTreeBase< Traits >:

Classes

struct  DefaultConverter
 Convert a custom point container to the KdTree PointContainer using DataPoint default constructor. More...
 

Public Types

using DataPoint = typename Traits::DataPoint
 DataPoint given by user via Traits.
 
using IndexType = typename Traits::IndexType
 Type used to index points into the PointContainer.
 
using LeafSizeType = typename Traits::LeafSizeType
 Type used to store the size of leaf nodes.
 
using PointContainer = typename Traits::PointContainer
 Container for DataPoint used inside the KdTree.
 
using IndexContainer = typename Traits::IndexContainer
 Container for indices used inside the KdTree.
 
using NodeIndexType = typename Traits::NodeIndexType
 Type used to index nodes into the NodeContainer.
 
using NodeType = typename Traits::NodeType
 Type of nodes used inside the KdTree.
 
using NodeContainer = typename Traits::NodeContainer
 Container for nodes used inside the KdTree.
 
using Scalar = typename DataPoint::Scalar
 Scalar given by user via DataPoint.
 
using VectorType = typename DataPoint::VectorType
 VectorType given by user via DataPoint.
 
using AabbType = typename NodeType::AabbType
 Bounding box type given by user via NodeType.
 

Public Member Functions

template<typename PointUserContainer , typename Converter >
void build (PointUserContainer &&points, Converter c)
 Generate a tree from a custom contained type converted using the specified converter.
 
template<typename PointUserContainer >
void build (PointUserContainer &&points)
 Generate a tree from a custom contained type converted using DefaultConverter.
 
void clear ()
 Clear tree data.
 
NodeIndexType node_count () const
 
IndexType sample_count () const
 
IndexType pointCount () const
 
NodeIndexType leaf_count () const
 
PointContainerpoints ()
 
const PointContainerpoints () const
 
const NodeContainernodes () const
 
const IndexContainersamples () const
 
LeafSizeType minCellSize () const
 Read leaf min size.
 
void setMinCellSize (LeafSizeType min_cell_size)
 Write leaf min size.
 
IndexType pointFromSample (IndexType sample_index) const
 Return the point index associated with the specified sample index.
 
DataPointpointDataFromSample (IndexType sample_index)
 Return the DataPoint associated with the specified sample index.
 
const DataPointpointDataFromSample (IndexType sample_index) const
 Return the DataPoint associated with the specified sample index.
 
KdTreeKNearestPointQuery< Traits > kNearestNeighbors (const VectorType &point, IndexType k) const
 Computes a Query object to iterate over the k-nearest neighbors of a point. The returned object can be reset and reused with the () operator (using the same argument types as parameters).
 
KdTreeKNearestIndexQuery< Traits > kNearestNeighbors (IndexType index, IndexType k) const
 Computes a Query object to iterate over the k-nearest neighbors of a point. The returned object can be reset and reused with the () operator (using the same argument types as parameters).
 
KdTreeKNearestPointQuery< Traits > kNearestNeighborsQuery () const
 Convenience function that provides an empty k-nearest neighbors Query object.
 
KdTreeKNearestIndexQuery< Traits > kNearestNeighborsIndexQuery () const
 Convenience function that provides an empty k-nearest neighbors Query object.
 
KdTreeNearestPointQuery< Traits > nearestNeighbor (const VectorType &point) const
 Computes a Query object that contains the nearest point. The returned object can be reset and reused with the () operator (using the same argument types as parameters).
 
KdTreeNearestIndexQuery< Traits > nearestNeighbor (IndexType index) const
 Computes a Query object that contains the nearest point. The returned object can be reset and reused with the () operator (using the same argument types as parameters).
 
KdTreeNearestIndexQuery< Traits > nearestNeighborQuery () const
 Convenience function that provides an empty nearest neighbor Query object.
 
KdTreeNearestIndexQuery< Traits > nearestNeighborIndexQuery () const
 Convenience function that provides an empty nearest neighbor Query object.
 
KdTreeRangePointQuery< Traits > rangeNeighbors (const VectorType &point, Scalar r) const
 Computes a Query object to iterate over the neighbors that are inside a given radius. The returned object can be reset and reused with the () operator (using the same argument types as parameters).
 
KdTreeRangeIndexQuery< Traits > rangeNeighbors (IndexType index, Scalar r) const
 Computes a Query object to iterate over the neighbors that are inside a given radius. The returned object can be reset and reused with the () operator (using the same argument types as parameters).
 
KdTreeRangePointQuery< Traits > rangeNeighborsQuery () const
 Convenience function that provides an empty range neighbor Query object.
 
KdTreeRangeIndexQuery< Traits > rangeNeighborsIndexQuery () const
 KdTreeBase::rangeNeighborsQuery.
 
bool valid () const
 
void print (std::ostream &os, bool verbose=false) const
 
template<typename PointUserContainer , typename Converter >
void build (PointUserContainer &&points, Converter c)
 
template<typename PointUserContainer , typename IndexUserContainer , typename Converter >
void buildWithSampling (PointUserContainer &&points, IndexUserContainer sampling, Converter c)
 

Static Public Attributes

static constexpr std::size_t MAX_NODE_COUNT = NodeType::MAX_COUNT
 The maximum number of nodes that the kd-tree can have.
 
static constexpr std::size_t MAX_POINT_COUNT = std::size_t(2) << sizeof(IndexType)*8
 The maximum number of points that can be stored in the kd-tree.
 
static constexpr int MAX_DEPTH = Traits::MAX_DEPTH
 The maximum depth of the kd-tree.
 
static constexpr bool SUPPORTS_SUBSAMPLING = false
 

Protected Member Functions

template<typename PointUserContainer , typename IndexUserContainer , typename Converter >
void buildWithSampling (PointUserContainer &&points, IndexUserContainer sampling, Converter c)
 Generate a tree sampled from a custom contained type converted using a Converter
 
template<typename PointUserContainer , typename IndexUserContainer >
void buildWithSampling (PointUserContainer &&points, IndexUserContainer sampling)
 Generate a tree sampled from a custom contained type converted using a KdTreeBase::DefaultConverter.
 

Protected Attributes

PointContainer m_points
 
NodeContainer m_nodes
 
IndexContainer m_indices
 
LeafSizeType m_min_cell_size {64}
 Minimal number of points per leaf.
 
NodeIndexType m_leaf_count {0}
 Number of leaves in the Kdtree (computed during construction)
 

Detailed Description

template<typename Traits>
class Ponca::KdTreeBase< Traits >

[KdTreeSparse type definition]

Customizable base class for KdTree datastructure implementations

See also
Ponca::KdTreeDense
Ponca::KdTreeSparse
Template Parameters
TraitsTraits type providing the types and constants used by the kd-tree. Must have the same interface as the default traits type.
See also
KdTreeDefaultTraits for the trait interface documentation.

Definition at line 103 of file kdTree.h.

Member Typedef Documentation

◆ AabbType

template<typename Traits >
using Ponca::KdTreeBase< Traits >::AabbType = typename NodeType::AabbType

Bounding box type given by user via NodeType.

Definition at line 117 of file kdTree.h.

◆ DataPoint

template<typename Traits >
using Ponca::KdTreeBase< Traits >::DataPoint = typename Traits::DataPoint

DataPoint given by user via Traits.

Definition at line 106 of file kdTree.h.

◆ IndexContainer

template<typename Traits >
using Ponca::KdTreeBase< Traits >::IndexContainer = typename Traits::IndexContainer

Container for indices used inside the KdTree.

Definition at line 110 of file kdTree.h.

◆ IndexType

template<typename Traits >
using Ponca::KdTreeBase< Traits >::IndexType = typename Traits::IndexType

Type used to index points into the PointContainer.

Definition at line 107 of file kdTree.h.

◆ LeafSizeType

template<typename Traits >
using Ponca::KdTreeBase< Traits >::LeafSizeType = typename Traits::LeafSizeType

Type used to store the size of leaf nodes.

Definition at line 108 of file kdTree.h.

◆ NodeContainer

template<typename Traits >
using Ponca::KdTreeBase< Traits >::NodeContainer = typename Traits::NodeContainer

Container for nodes used inside the KdTree.

Definition at line 113 of file kdTree.h.

◆ NodeIndexType

template<typename Traits >
using Ponca::KdTreeBase< Traits >::NodeIndexType = typename Traits::NodeIndexType

Type used to index nodes into the NodeContainer.

Definition at line 111 of file kdTree.h.

◆ NodeType

template<typename Traits >
using Ponca::KdTreeBase< Traits >::NodeType = typename Traits::NodeType

Type of nodes used inside the KdTree.

Definition at line 112 of file kdTree.h.

◆ PointContainer

template<typename Traits >
using Ponca::KdTreeBase< Traits >::PointContainer = typename Traits::PointContainer

Container for DataPoint used inside the KdTree.

Definition at line 109 of file kdTree.h.

◆ Scalar

template<typename Traits >
using Ponca::KdTreeBase< Traits >::Scalar = typename DataPoint::Scalar

Scalar given by user via DataPoint.

Definition at line 115 of file kdTree.h.

◆ VectorType

template<typename Traits >
using Ponca::KdTreeBase< Traits >::VectorType = typename DataPoint::VectorType

VectorType given by user via DataPoint.

Definition at line 116 of file kdTree.h.

Member Function Documentation

◆ build() [1/3]

template<typename Traits >
template<typename PointUserContainer >
void Ponca::KdTreeBase< Traits >::build ( PointUserContainer &&  points)
inline

Generate a tree from a custom contained type converted using DefaultConverter.

Template Parameters
PointUserContainerInput point container, transformed to PointContainer
Parameters
pointsInput points

Definition at line 169 of file kdTree.h.

◆ build() [2/3]

template<typename Traits >
template<typename PointUserContainer , typename Converter >
void Ponca::KdTreeBase< Traits >::build ( PointUserContainer &&  points,
Converter  c 
)
inline

Generate a tree from a custom contained type converted using the specified converter.

Template Parameters
PointUserContainerInput point container, transformed to PointContainer
IndexUserContainerInput sampling container, transformed to IndexContainer
Parameters
pointsInput points
cCast/Convert input point type to DataType

◆ build() [3/3]

template<typename Traits >
template<typename PointUserContainer , typename Converter >
void Ponca::KdTreeBase< Traits >::build ( PointUserContainer &&  points,
Converter  c 
)
inline

Definition at line 11 of file kdTree.hpp.

◆ buildWithSampling() [1/3]

template<typename Traits >
template<typename PointUserContainer , typename IndexUserContainer >
void Ponca::KdTreeBase< Traits >::buildWithSampling ( PointUserContainer &&  points,
IndexUserContainer  sampling 
)
inlineprotected

Generate a tree sampled from a custom contained type converted using a KdTreeBase::DefaultConverter.

Template Parameters
PointUserContainerInput points, transformed to PointContainer
IndexUserContainerInput sampling, transformed to IndexContainer
Parameters
pointsInput points
samplingSamples used in the tree

Definition at line 446 of file kdTree.h.

◆ buildWithSampling() [2/3]

template<typename Traits >
template<typename PointUserContainer , typename IndexUserContainer , typename Converter >
void Ponca::KdTreeBase< Traits >::buildWithSampling ( PointUserContainer &&  points,
IndexUserContainer  sampling,
Converter  c 
)
inlineprotected

Generate a tree sampled from a custom contained type converted using a Converter

Template Parameters
PointUserContainerInput point, transformed to PointContainer
IndexUserContainerInput sampling, transformed to IndexContainer
Converter
Parameters
pointsInput points
samplingIndices of points used in the tree
cCast/Convert input point type to DataType

◆ buildWithSampling() [3/3]

template<typename Traits >
template<typename PointUserContainer , typename IndexUserContainer , typename Converter >
void Ponca::KdTreeBase< Traits >::buildWithSampling ( PointUserContainer &&  points,
IndexUserContainer  sampling,
Converter  c 
)
inline

Definition at line 121 of file kdTree.hpp.

◆ clear()

template<typename Traits >
void KdTreeBase::clear ( )
inline

Clear tree data.

Definition at line 19 of file kdTree.hpp.

◆ kNearestNeighbors() [1/2]

template<typename Traits >
KdTreeKNearestPointQuery< Traits > Ponca::KdTreeBase< Traits >::kNearestNeighbors ( const VectorType point,
IndexType  k 
) const
inline

Computes a Query object to iterate over the k-nearest neighbors of a point. The returned object can be reset and reused with the () operator (using the same argument types as parameters).

Parameters
pointPoint from where the query is evaluated
kNumber of neighbors returned
Returns
The KdTreeKNearestIndexQuery mutable object to iterate over the search results.
See also
KdTreeKNearestQueryBase

Definition at line 268 of file kdTree.h.

◆ kNearestNeighbors() [2/2]

template<typename Traits >
KdTreeKNearestIndexQuery< Traits > Ponca::KdTreeBase< Traits >::kNearestNeighbors ( IndexType  index,
IndexType  k 
) const
inline

Computes a Query object to iterate over the k-nearest neighbors of a point. The returned object can be reset and reused with the () operator (using the same argument types as parameters).

Parameters
indexIndex of the point from where the query is evaluated
kNumber of neighbors returned
Returns
The KdTreeKNearestIndexQuery mutable object to iterate over the search results.
See also
KdTreeKNearestQueryBase

Definition at line 278 of file kdTree.h.

◆ kNearestNeighborsIndexQuery()

template<typename Traits >
KdTreeKNearestIndexQuery< Traits > Ponca::KdTreeBase< Traits >::kNearestNeighborsIndexQuery ( ) const
inline

Convenience function that provides an empty k-nearest neighbors Query object.

The returned object can call for a k-nearest neighbors search using the operator (), which takes a k and an index as parameters.

Same as KdTreeBase::kNearestNeighbors (0, 0)

Returns
The empty KdTreeKNearestIndexQuery mutable object to iterate over the search results.
See also
KdTreeKNearestQueryBase

Definition at line 304 of file kdTree.h.

◆ kNearestNeighborsQuery()

template<typename Traits >
KdTreeKNearestPointQuery< Traits > Ponca::KdTreeBase< Traits >::kNearestNeighborsQuery ( ) const
inline

Convenience function that provides an empty k-nearest neighbors Query object.

The returned object can call for a k-nearest neighbors search using the operator (), which takes a k and a position as parameters.

Same as KdTreeBase::kNearestNeighbors (0, VectorType::Zero())

Returns
The empty KdTreeKNearestPointQuery mutable object to iterate over the search results.
See also
KdTreeKNearestQueryBase

Definition at line 291 of file kdTree.h.

◆ leaf_count()

template<typename Traits >
NodeIndexType Ponca::KdTreeBase< Traits >::leaf_count ( ) const
inline

Definition at line 194 of file kdTree.h.

◆ minCellSize()

template<typename Traits >
LeafSizeType Ponca::KdTreeBase< Traits >::minCellSize ( ) const
inline

Read leaf min size.

Definition at line 222 of file kdTree.h.

◆ nearestNeighbor() [1/2]

template<typename Traits >
KdTreeNearestPointQuery< Traits > Ponca::KdTreeBase< Traits >::nearestNeighbor ( const VectorType point) const
inline

Computes a Query object that contains the nearest point. The returned object can be reset and reused with the () operator (using the same argument types as parameters).

Parameters
pointPoint from where the query is evaluated
Returns
The KdTreeNearestPointQuery mutable object that contains the search result.
See also
KdTreeNearestQueryBase

Definition at line 316 of file kdTree.h.

◆ nearestNeighbor() [2/2]

template<typename Traits >
KdTreeNearestIndexQuery< Traits > Ponca::KdTreeBase< Traits >::nearestNeighbor ( IndexType  index) const
inline

Computes a Query object that contains the nearest point. The returned object can be reset and reused with the () operator (using the same argument types as parameters).

Parameters
indexIndex of the point from where the query is evaluated
Returns
The KdTreeKNearestIndexQuery mutable object that contains the search result.
See also
KdTreeNearestQueryBase

Definition at line 326 of file kdTree.h.

◆ nearestNeighborIndexQuery()

template<typename Traits >
KdTreeNearestIndexQuery< Traits > Ponca::KdTreeBase< Traits >::nearestNeighborIndexQuery ( ) const
inline

Convenience function that provides an empty nearest neighbor Query object.

The returned object can call for a nearest neighbor search using the operator (), which takes an index as parameter.

Same as KdTreeBase::nearestNeighbor (0)

Returns
The KdTreeKNearestIndexQuery mutable object that contains the search result.
See also
KdTreeNearestQueryBase

Definition at line 354 of file kdTree.h.

◆ nearestNeighborQuery()

template<typename Traits >
KdTreeNearestIndexQuery< Traits > Ponca::KdTreeBase< Traits >::nearestNeighborQuery ( ) const
inline

Convenience function that provides an empty nearest neighbor Query object.

The returned object can call for a nearest neighbor search using the operator (), which takes a position as parameter.

Same as KdTreeBase::nearestNeighbor (VectorType::Zero())

Returns
The empty KdTreeNearestPointQuery mutable object that contains the search result.
See also
KdTreeNearestQueryBase

Definition at line 340 of file kdTree.h.

◆ node_count()

template<typename Traits >
NodeIndexType Ponca::KdTreeBase< Traits >::node_count ( ) const
inline

Definition at line 179 of file kdTree.h.

◆ nodes()

template<typename Traits >
const NodeContainer & Ponca::KdTreeBase< Traits >::nodes ( ) const
inline

Definition at line 209 of file kdTree.h.

◆ pointCount()

template<typename Traits >
IndexType Ponca::KdTreeBase< Traits >::pointCount ( ) const
inline

Definition at line 189 of file kdTree.h.

◆ pointDataFromSample() [1/2]

template<typename Traits >
DataPoint & Ponca::KdTreeBase< Traits >::pointDataFromSample ( IndexType  sample_index)
inline

Return the DataPoint associated with the specified sample index.

Note
Convenience function, equivalent to point_data()[pointFromSample(sample_index)]

Definition at line 245 of file kdTree.h.

◆ pointDataFromSample() [2/2]

template<typename Traits >
const DataPoint & Ponca::KdTreeBase< Traits >::pointDataFromSample ( IndexType  sample_index) const
inline

Return the DataPoint associated with the specified sample index.

Note
Convenience function, equivalent to point_data()[pointFromSample(sample_index)]

Definition at line 253 of file kdTree.h.

◆ pointFromSample()

template<typename Traits >
IndexType Ponca::KdTreeBase< Traits >::pointFromSample ( IndexType  sample_index) const
inline

Return the point index associated with the specified sample index.

Definition at line 237 of file kdTree.h.

◆ points() [1/2]

template<typename Traits >
PointContainer & Ponca::KdTreeBase< Traits >::points ( )
inline

Definition at line 199 of file kdTree.h.

◆ points() [2/2]

template<typename Traits >
const PointContainer & Ponca::KdTreeBase< Traits >::points ( ) const
inline

Definition at line 204 of file kdTree.h.

◆ print()

template<typename Traits >
void KdTreeBase::print ( std::ostream &  os,
bool  verbose = false 
) const
inline

Definition at line 75 of file kdTree.hpp.

◆ rangeNeighbors() [1/2]

template<typename Traits >
KdTreeRangePointQuery< Traits > Ponca::KdTreeBase< Traits >::rangeNeighbors ( const VectorType point,
Scalar  r 
) const
inline

Computes a Query object to iterate over the neighbors that are inside a given radius. The returned object can be reset and reused with the () operator (using the same argument types as parameters).

Parameters
pointPoint from where the query is evaluated
rRadius around where to search the neighbors
Returns
The KdTreeRangePointQuery mutable object to iterate over the search results.
See also
KdTreeRangeQueryBase

Definition at line 367 of file kdTree.h.

◆ rangeNeighbors() [2/2]

template<typename Traits >
KdTreeRangeIndexQuery< Traits > Ponca::KdTreeBase< Traits >::rangeNeighbors ( IndexType  index,
Scalar  r 
) const
inline

Computes a Query object to iterate over the neighbors that are inside a given radius. The returned object can be reset and reused with the () operator (using the same argument types as parameters).

Parameters
indexIndex of the point from where the query is evaluated
rRadius around where to search the neighbors
Returns
The KdTreeRangeIndexQuery mutable object to iterate over the search results.
See also
KdTreeRangeQueryBase

Definition at line 377 of file kdTree.h.

◆ rangeNeighborsIndexQuery()

template<typename Traits >
KdTreeRangeIndexQuery< Traits > Ponca::KdTreeBase< Traits >::rangeNeighborsIndexQuery ( ) const
inline

KdTreeBase::rangeNeighborsQuery.

The returned object can call for a range neighbor search using the operator (), which takes an index as parameter.

Same as KdTreeBase::rangeNeighborsQuery (0, 0)

Returns
The empty KdTreeRangeIndexQuery mutable object to iterate over the search results.
See also
KdTreeRangeQueryBase

Definition at line 405 of file kdTree.h.

◆ rangeNeighborsQuery()

template<typename Traits >
KdTreeRangePointQuery< Traits > Ponca::KdTreeBase< Traits >::rangeNeighborsQuery ( ) const
inline

Convenience function that provides an empty range neighbor Query object.

The returned object can call for a range neighbor search using the operator (), which takes a position as parameter.

Same as KdTreeBase::rangeNeighborsQuery (0, VectorType::Zero())

Returns
The empty KdTreeRangePointQuery mutable object to iterate over the search results.
See also
KdTreeRangeQueryBase

Definition at line 391 of file kdTree.h.

◆ sample_count()

template<typename Traits >
IndexType Ponca::KdTreeBase< Traits >::sample_count ( ) const
inline

Definition at line 184 of file kdTree.h.

◆ samples()

template<typename Traits >
const IndexContainer & Ponca::KdTreeBase< Traits >::samples ( ) const
inline

Definition at line 214 of file kdTree.h.

◆ setMinCellSize()

template<typename Traits >
void Ponca::KdTreeBase< Traits >::setMinCellSize ( LeafSizeType  min_cell_size)
inline

Write leaf min size.

Definition at line 228 of file kdTree.h.

◆ valid()

template<typename Traits >
bool KdTreeBase::valid ( ) const
inline

Definition at line 28 of file kdTree.hpp.

Member Data Documentation

◆ m_indices

template<typename Traits >
IndexContainer Ponca::KdTreeBase< Traits >::m_indices
protected

Definition at line 419 of file kdTree.h.

◆ m_leaf_count

template<typename Traits >
NodeIndexType Ponca::KdTreeBase< Traits >::m_leaf_count {0}
protected

Number of leaves in the Kdtree (computed during construction)

Definition at line 422 of file kdTree.h.

◆ m_min_cell_size

template<typename Traits >
LeafSizeType Ponca::KdTreeBase< Traits >::m_min_cell_size {64}
protected

Minimal number of points per leaf.

Definition at line 421 of file kdTree.h.

◆ m_nodes

template<typename Traits >
NodeContainer Ponca::KdTreeBase< Traits >::m_nodes
protected

Definition at line 418 of file kdTree.h.

◆ m_points

template<typename Traits >
PointContainer Ponca::KdTreeBase< Traits >::m_points
protected

Definition at line 417 of file kdTree.h.

◆ MAX_DEPTH

template<typename Traits >
constexpr int Ponca::KdTreeBase< Traits >::MAX_DEPTH = Traits::MAX_DEPTH
staticconstexpr

The maximum depth of the kd-tree.

Definition at line 125 of file kdTree.h.

◆ MAX_NODE_COUNT

template<typename Traits >
constexpr std::size_t Ponca::KdTreeBase< Traits >::MAX_NODE_COUNT = NodeType::MAX_COUNT
staticconstexpr

The maximum number of nodes that the kd-tree can have.

Definition at line 120 of file kdTree.h.

◆ MAX_POINT_COUNT

template<typename Traits >
constexpr std::size_t Ponca::KdTreeBase< Traits >::MAX_POINT_COUNT = std::size_t(2) << sizeof(IndexType)*8
staticconstexpr

The maximum number of points that can be stored in the kd-tree.

Definition at line 122 of file kdTree.h.

◆ SUPPORTS_SUBSAMPLING

template<typename Traits >
constexpr bool Ponca::KdTreeBase< Traits >::SUPPORTS_SUBSAMPLING = false
staticconstexpr

Definition at line 127 of file kdTree.h.