41 #include <pcl/pcl_base.h>
42 #include <pcl/point_cloud.h>
43 #include <pcl/for_each_type.h>
44 #include <pcl/common/concatenate.h>
45 #include <pcl/common/copy_point.h>
73 template<
typename Po
intT>
81 using Ptr = shared_ptr<pcl::search::Search<PointT> >;
82 using ConstPtr = shared_ptr<const pcl::search::Search<PointT> >;
88 Search (
const std::string& name =
"",
bool sorted =
false);
96 virtual const std::string&
145 std::vector<float> &k_sqr_distances)
const = 0;
156 template <
typename Po
intTDiff>
inline int
158 Indices &k_indices, std::vector<float> &k_sqr_distances)
const
184 std::vector<float> &k_sqr_distances)
const;
206 std::vector<float> &k_sqr_distances)
const;
217 int k, std::vector<Indices>& k_indices,
218 std::vector< std::vector<float> >& k_sqr_distances)
const;
228 template <
typename Po
intTDiff>
void
230 std::vector< std::vector<float> > &k_sqr_distances)
const
233 using FieldListInT =
typename pcl::traits::fieldList<PointT>::type;
234 using FieldListOutT =
typename pcl::traits::fieldList<PointTDiff>::type;
238 if (indices.empty ())
241 for (std::size_t i = 0; i < cloud.
size(); i++)
250 pc.
resize (indices.size());
251 for (std::size_t i = 0; i < indices.size(); i++)
254 cloud[indices[i]], pc[i]));
272 std::vector<float>& k_sqr_distances,
unsigned int max_nn = 0)
const = 0;
284 template <
typename Po
intTDiff>
inline int
286 std::vector<float> &k_sqr_distances,
unsigned int max_nn = 0)
const
290 return (
radiusSearch (p, radius, k_indices, k_sqr_distances, max_nn));
312 Indices &k_indices, std::vector<float> &k_sqr_distances,
313 unsigned int max_nn = 0)
const;
336 std::vector<float> &k_sqr_distances,
unsigned int max_nn = 0)
const;
352 std::vector<Indices>& k_indices,
353 std::vector< std::vector<float> > &k_sqr_distances,
354 unsigned int max_nn = 0)
const;
367 template <
typename Po
intTDiff>
void
371 std::vector<Indices> &k_indices,
372 std::vector< std::vector<float> > &k_sqr_distances,
373 unsigned int max_nn = 0)
const
376 using FieldListInT =
typename pcl::traits::fieldList<PointT>::type;
377 using FieldListOutT =
typename pcl::traits::fieldList<PointTDiff>::type;
381 if (indices.empty ())
384 for (std::size_t i = 0; i < cloud.
size (); ++i)
390 pc.
resize (indices.size ());
391 for (std::size_t i = 0; i < indices.size (); ++i)
409 Compare (
const std::vector<float>& distances)
410 : distances_ (distances)
417 return (distances_ [first] < distances_[second]);
420 const std::vector<float>& distances_;
426 #ifdef PCL_NO_PRECOMPILE
427 #include <pcl/search/impl/search.hpp>
PointCloud represents the base class in PCL for storing collections of 3D points.
void resize(std::size_t count)
Resizes the container to contain count elements.
shared_ptr< PointCloud< PointT > > Ptr
shared_ptr< const PointCloud< PointT > > ConstPtr
shared_ptr< const pcl::search::Search< PointT > > ConstPtr
virtual bool getSortedResults()
Gets whether the results should be sorted (ascending in the distance) or not Otherwise the results ma...
virtual IndicesConstPtr getIndices() const
Get a pointer to the vector of indices used.
PointCloudConstPtr input_
virtual void setInputCloud(const PointCloudConstPtr &cloud, const IndicesConstPtr &indices=IndicesConstPtr())
Pass the input dataset that the search will be performed on.
void sortResults(Indices &indices, std::vector< float > &distances) const
virtual const std::string & getName() const
Returns the search method name.
void nearestKSearchT(const pcl::PointCloud< PointTDiff > &cloud, const Indices &indices, int k, std::vector< Indices > &k_indices, std::vector< std::vector< float > > &k_sqr_distances) const
Search for the k-nearest neighbors for the given query point.
typename PointCloud::ConstPtr PointCloudConstPtr
Search(const std::string &name="", bool sorted=false)
Constructor.
pcl::IndicesConstPtr IndicesConstPtr
pcl::IndicesPtr IndicesPtr
void radiusSearchT(const pcl::PointCloud< PointTDiff > &cloud, const Indices &indices, double radius, std::vector< Indices > &k_indices, std::vector< std::vector< float > > &k_sqr_distances, unsigned int max_nn=0) const
Search for all the nearest neighbors of the query points in a given radius.
shared_ptr< pcl::search::Search< PointT > > Ptr
virtual PointCloudConstPtr getInputCloud() const
Get a pointer to the input point cloud dataset.
int radiusSearchT(const PointTDiff &point, double radius, Indices &k_indices, std::vector< float > &k_sqr_distances, unsigned int max_nn=0) const
Search for all the nearest neighbors of the query point in a given radius.
typename PointCloud::Ptr PointCloudPtr
virtual int nearestKSearch(const PointT &point, int k, Indices &k_indices, std::vector< float > &k_sqr_distances) const =0
Search for the k-nearest neighbors for the given query point.
virtual void setSortedResults(bool sorted)
sets whether the results should be sorted (ascending in the distance) or not
virtual int radiusSearch(const PointT &point, double radius, Indices &k_indices, std::vector< float > &k_sqr_distances, unsigned int max_nn=0) const =0
Search for all the nearest neighbors of the query point in a given radius.
int nearestKSearchT(const PointTDiff &point, int k, Indices &k_indices, std::vector< float > &k_sqr_distances) const
Search for k-nearest neighbors for the given query point.
virtual ~Search()=default
Destructor.
void copyPoint(const PointInT &point_in, PointOutT &point_out)
Copy the fields of a source point into a target point.
shared_ptr< const Indices > IndicesConstPtr
detail::int_type_t< detail::index_type_size, detail::index_type_signed > index_t
Type used for an index in PCL.
IndicesAllocator<> Indices
Type used for indices in PCL.
shared_ptr< Indices > IndicesPtr
Helper functor structure for concatenate.
A point structure representing Euclidean xyz coordinates, and the RGB color.
typename boost::mpl::remove_if< Sequence1, boost::mpl::not_< boost::mpl::contains< Sequence2, boost::mpl::_1 > > >::type type