38 #ifndef PCL_FILTERS_IMPL_RANDOM_SAMPLE_H_
39 #define PCL_FILTERS_IMPL_RANDOM_SAMPLE_H_
41 #include <pcl/filters/random_sample.h>
42 #include <pcl/common/io.h>
43 #include <pcl/point_traits.h>
47 template<
typename Po
intT>
void
50 std::vector<int> indices;
53 bool temp = extract_removed_indices_;
54 extract_removed_indices_ =
true;
55 applyFilter (indices);
56 extract_removed_indices_ = temp;
59 std::vector<pcl::PCLPointField> fields;
61 std::vector<size_t> offsets;
62 for (
size_t i = 0; i < fields.size (); ++i)
64 if (fields[i].name ==
"x" ||
65 fields[i].name ==
"y" ||
66 fields[i].name ==
"z")
67 offsets.push_back (fields[i].offset);
70 const static float user_filter_value = user_filter_value_;
71 for (
size_t rii = 0; rii < removed_indices_->size (); ++rii)
73 uint8_t* pt_data =
reinterpret_cast<uint8_t*
> (&output[(*removed_indices_)[rii]]);
74 for (
size_t i = 0; i < offsets.size (); ++i)
76 memcpy (pt_data + offsets[i], &user_filter_value,
sizeof (
float));
78 if (!pcl_isfinite (user_filter_value_))
85 applyFilter (indices);
91 template<
typename Po
intT>
95 size_t N = indices_->size ();
96 size_t sample_size = negative_ ? N - sample_ : sample_;
102 removed_indices_->clear ();
107 indices.resize (sample_size);
108 if (extract_removed_indices_)
109 removed_indices_->resize (N - sample_size);
117 std::vector<bool> added;
118 if (extract_removed_indices_)
119 added.resize (indices_->size (),
false);
120 size_t n = sample_size;
124 const float U = unifRand ();
129 if (extract_removed_indices_)
131 indices[i++] = (*indices_)[index];
142 if (extract_removed_indices_)
145 for (
size_t i = 0; i < added.size (); i++)
149 (*removed_indices_)[ri++] = (*indices_)[i];
156 #define PCL_INSTANTIATE_RandomSample(T) template class PCL_EXPORTS pcl::RandomSample<T>;
158 #endif // PCL_FILTERS_IMPL_RANDOM_SAMPLE_H_