Program Listing for File SearchTree.hpp
↰ Return to documentation for file (include/lvr2/reconstruction/SearchTree.hpp)
/*
* SearchTree.hpp
*
* Created on: 02.01.2012
* Author: Florian Otte, Thomas Wiemann
*/
#ifndef LVR2_RECONSTRUCTION_SEARCHTREE_H_
#define LVR2_RECONSTRUCTION_SEARCHTREE_H_
#include <vector>
namespace lvr2
{
template< typename BaseVecT>
class SearchTree
{
private:
using CoordT = typename BaseVecT::CoordType;
public:
virtual ~SearchTree() = default;
virtual int kSearch(
const BaseVecT& qp,
int k,
std::vector<size_t>& indices,
std::vector<CoordT>& distances
) const = 0;
virtual int radiusSearch(
const BaseVecT& qp,
int k,
float r,
std::vector<size_t>& indices,
std::vector<CoordT>& distances
) const = 0;
virtual int kSearch(
const BaseVecT& qp,
int k,
std::vector<size_t>& indices
) const;
virtual void kSearchParallel(
const BaseVecT* query,
int n,
int k,
std::vector<size_t>& indices, // TODO size_t or uint?
std::vector<CoordT>& distances
) const
{
for(int i = 0; i < n; i++)
{
std::vector<size_t> indices_vec;
std::vector<CoordT> distances_vec;
this->kSearch(
query[i],
k,
indices_vec,
distances_vec
);
for(int j = 0; j < k; j++)
{
indices[i * k + j] = indices_vec[j];
distances[i * k + j] = distances_vec[j];
}
}
}
// /**
// * @brief Set the number of neighbours used to estimate and interpolate normals.
// */
// virtual void setKi(int ki);
// /**
// * @brief Set the number of neighbours used for normal estimation
// */
// virtual void setKd(int kd);
// /**
// * @brief Get the number of tangent planes used for distance determination
// */
// virtual int getKi();
// /**
// * @brief Get the number of neighbours used to estimate and interpolate normals.
// */
// virtual int getKd();
protected:
int m_ki;
int m_kd;
};
template <typename BaseVecT>
using SearchTreePtr = std::shared_ptr<SearchTree<BaseVecT>>;
} // namespace lvr2
#include "SearchTree.tcc"
#endif // LVR2_RECONSTRUCTION_SEARCHTREE_H_