39 #ifndef PCL_SEARCH_SEARCH_H_
40 #define PCL_SEARCH_SEARCH_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 typedef boost::shared_ptr<pcl::search::Search<PointT> >
Ptr;
82 typedef boost::shared_ptr<const pcl::search::Search<PointT> >
ConstPtr;
88 Search (
const std::string& name =
"",
bool sorted =
false);
98 virtual const std::string&
124 virtual PointCloudConstPtr
147 std::vector<float> &k_sqr_distances)
const = 0;
158 template <
typename Po
intTDiff>
inline int
160 std::vector<int> &k_indices, std::vector<float> &k_sqr_distances)
const
185 std::vector<int> &k_indices,
186 std::vector<float> &k_sqr_distances)
const;
207 std::vector<int> &k_indices,
208 std::vector<float> &k_sqr_distances)
const;
219 int k, std::vector< std::vector<int> >& k_indices,
220 std::vector< std::vector<float> >& k_sqr_distances)
const;
230 template <
typename Po
intTDiff>
void
232 std::vector< std::vector<float> > &k_sqr_distances)
const
240 if (indices.empty ())
243 for (
size_t i = 0; i < cloud.
size(); i++)
248 nearestKSearch (pc,std::vector<int>(),k,k_indices,k_sqr_distances);
252 pc.
resize (indices.size());
253 for (
size_t i = 0; i < indices.size(); i++)
256 cloud[indices[i]], pc[i]));
258 nearestKSearch (pc,std::vector<int>(),k,k_indices,k_sqr_distances);
274 std::vector<float>& k_sqr_distances,
unsigned int max_nn = 0)
const = 0;
286 template <
typename Po
intTDiff>
inline int
287 radiusSearchT (
const PointTDiff &point,
double radius, std::vector<int> &k_indices,
288 std::vector<float> &k_sqr_distances,
unsigned int max_nn = 0)
const
292 return (
radiusSearch (p, radius, k_indices, k_sqr_distances, max_nn));
314 std::vector<int> &k_indices, std::vector<float> &k_sqr_distances,
315 unsigned int max_nn = 0)
const;
337 radiusSearch (
int index,
double radius, std::vector<int> &k_indices,
338 std::vector<float> &k_sqr_distances,
unsigned int max_nn = 0)
const;
352 const std::vector<int>& indices,
354 std::vector< std::vector<int> >& k_indices,
355 std::vector< std::vector<float> > &k_sqr_distances,
356 unsigned int max_nn = 0)
const;
369 template <
typename Po
intTDiff>
void
371 const std::vector<int>& indices,
373 std::vector< std::vector<int> > &k_indices,
374 std::vector< std::vector<float> > &k_sqr_distances,
375 unsigned int max_nn = 0)
const
383 if (indices.empty ())
386 for (
size_t i = 0; i < cloud.
size (); ++i)
388 radiusSearch (pc, std::vector<int> (), radius, k_indices, k_sqr_distances, max_nn);
392 pc.
resize (indices.size ());
393 for (
size_t i = 0; i < indices.size (); ++i)
395 radiusSearch (pc, std::vector<int>(), radius, k_indices, k_sqr_distances, max_nn);
401 sortResults (std::vector<int>& indices, std::vector<float>& distances)
const;
411 Compare (
const std::vector<float>& distances)
412 : distances_ (distances)
417 operator () (
int first,
int second)
const
419 return (distances_ [first] < distances_[second]);
422 const std::vector<float>& distances_;
428 #ifdef PCL_NO_PRECOMPILE
429 #include <pcl/search/impl/search.hpp>
432 #endif //#ifndef _PCL_SEARCH_SEARCH_H_