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_