Program Listing for File SearchTreeFlann.hpp
↰ Return to documentation for file (include/lvr2/reconstruction/SearchTreeFlann.hpp)
/*
* SearchTreeFlann.hpp
*
* Created on: Sep 22, 2015
* Author: Thomas Wiemann
*/
#ifndef LVR2_RECONSTRUCTION_SEARCHTREEFLANN_HPP_
#define LVR2_RECONSTRUCTION_SEARCHTREEFLANN_HPP_
#include <vector>
#include <memory>
// Required here since OpenCV leaks the USE_UNORDERED_MAP
// resulting in compiler errors from flann
#undef USE_UNORDERED_MAP
#include <flann/flann.hpp>
#include "lvr2/util/Timestamp.hpp"
#include "lvr2/types/PointBuffer.hpp"
#include "lvr2/reconstruction/SearchTree.hpp"
using std::vector;
using std::unique_ptr;
namespace lvr2
{
template<typename BaseVecT>
class SearchTreeFlann : public SearchTree<BaseVecT>
{
private:
using CoordT = typename BaseVecT::CoordType;
public:
SearchTreeFlann(PointBufferPtr buffer);
virtual int kSearch(
const BaseVecT& qp,
int k,
vector<size_t>& indices,
vector<CoordT>& distances
) const override;
virtual int radiusSearch(
const BaseVecT& qp,
int k,
float r,
vector<size_t>& indices,
vector<CoordT>& distances
) const override;
void kSearchMany(
const BaseVecT* query,
int n,
int k,
size_t* indices,
CoordT* distances
) const;
protected:
unique_ptr<flann::Index<flann::L2_Simple<CoordT>>> m_tree;
boost::shared_array<CoordT> m_data;
};
template <typename BaseVecT>
using SearchTreeFlannPtr = std::shared_ptr<SearchTreeFlann<BaseVecT>>;
} // namespace lvr2
#include "lvr2/reconstruction/SearchTreeFlann.tcc"
#endif /* LVR2_RECONSTRUCTION_SEARCHTREEFLANN_HPP_ */