41 #include <pcl/point_cloud.h>
42 #include <pcl/for_each_type.h>
43 #include <pcl/common/concatenate.h>
44 #include <pcl/common/copy_point.h>
72 template<
typename Po
intT>
87 Search (
const std::string& name =
"",
bool sorted =
false);
97 virtual const std::string&
123 virtual PointCloudConstPtr
146 std::vector<float> &k_sqr_distances)
const = 0;
157 template <
typename Po
intTDiff>
inline int
159 std::vector<int> &k_indices, std::vector<float> &k_sqr_distances)
const
184 std::vector<int> &k_indices,
185 std::vector<float> &k_sqr_distances)
const;
206 std::vector<int> &k_indices,
207 std::vector<float> &k_sqr_distances)
const;
218 int k, std::vector< std::vector<int> >& k_indices,
219 std::vector< std::vector<float> >& k_sqr_distances)
const;
229 template <
typename Po
intTDiff>
void
231 std::vector< std::vector<float> > &k_sqr_distances)
const
239 if (indices.empty ())
242 for (std::size_t i = 0; i < cloud.
size(); i++)
247 nearestKSearch (pc,std::vector<int>(),k,k_indices,k_sqr_distances);
251 pc.
resize (indices.size());
252 for (std::size_t i = 0; i < indices.size(); i++)
255 cloud[indices[i]], pc[i]));
257 nearestKSearch (pc,std::vector<int>(),k,k_indices,k_sqr_distances);
273 std::vector<float>& k_sqr_distances,
unsigned int max_nn = 0)
const = 0;
285 template <
typename Po
intTDiff>
inline int
286 radiusSearchT (
const PointTDiff &point,
double radius, std::vector<int> &k_indices,
287 std::vector<float> &k_sqr_distances,
unsigned int max_nn = 0)
const
291 return (
radiusSearch (p, radius, k_indices, k_sqr_distances, max_nn));
313 std::vector<int> &k_indices, std::vector<float> &k_sqr_distances,
314 unsigned int max_nn = 0)
const;
336 radiusSearch (
int index,
double radius, std::vector<int> &k_indices,
337 std::vector<float> &k_sqr_distances,
unsigned int max_nn = 0)
const;
351 const std::vector<int>& indices,
353 std::vector< std::vector<int> >& k_indices,
354 std::vector< std::vector<float> > &k_sqr_distances,
355 unsigned int max_nn = 0)
const;
368 template <
typename Po
intTDiff>
void
370 const std::vector<int>& indices,
372 std::vector< std::vector<int> > &k_indices,
373 std::vector< std::vector<float> > &k_sqr_distances,
374 unsigned int max_nn = 0)
const
382 if (indices.empty ())
385 for (std::size_t i = 0; i < cloud.
size (); ++i)
387 radiusSearch (pc, std::vector<int> (), radius, k_indices, k_sqr_distances, max_nn);
391 pc.
resize (indices.size ());
392 for (std::size_t i = 0; i < indices.size (); ++i)
394 radiusSearch (pc, std::vector<int>(), radius, k_indices, k_sqr_distances, max_nn);
400 sortResults (std::vector<int>& indices, std::vector<float>& distances)
const;
410 Compare (
const std::vector<float>& distances)
411 : distances_ (distances)
416 operator () (
int first,
int second)
const
418 return (distances_ [first] < distances_[second]);
421 const std::vector<float>& distances_;
427 #ifdef PCL_NO_PRECOMPILE
428 #include <pcl/search/impl/search.hpp>