40 #ifndef PCL_FILTERS_IMPL_PASSTHROUGH_HPP_
41 #define PCL_FILTERS_IMPL_PASSTHROUGH_HPP_
43 #include <pcl/filters/passthrough.h>
44 #include <pcl/common/io.h>
47 template <
typename Po
intT>
void
51 indices.resize (indices_->size ());
52 removed_indices_->resize (indices_->size ());
56 if (filter_field_name_.empty ())
59 for (
const auto ii : *indices_)
62 if (!std::isfinite (input_->points[ii].x) ||
63 !std::isfinite (input_->points[ii].y) ||
64 !std::isfinite (input_->points[ii].z))
66 if (extract_removed_indices_)
67 (*removed_indices_)[rii++] = ii;
76 std::vector<pcl::PCLPointField> fields;
77 int distance_idx = pcl::getFieldIndex<PointT> (filter_field_name_, fields);
78 if (distance_idx == -1)
80 PCL_WARN (
"[pcl::%s::applyFilter] Unable to find field name in point type.\n", getClassName ().c_str ());
82 removed_indices_->clear ();
87 for (
const auto ii : *indices_)
90 if (!std::isfinite (input_->points[ii].x) ||
91 !std::isfinite (input_->points[ii].y) ||
92 !std::isfinite (input_->points[ii].z))
94 if (extract_removed_indices_)
95 (*removed_indices_)[rii++] = ii;
101 float field_value = 0;
102 memcpy (&field_value, pt_data + fields[distance_idx].offset,
sizeof (
float));
105 if (!std::isfinite (field_value))
107 if (extract_removed_indices_)
108 (*removed_indices_)[rii++] = ii;
113 if (!negative_ && (field_value < filter_limit_min_ || field_value > filter_limit_max_))
115 if (extract_removed_indices_)
116 (*removed_indices_)[rii++] = ii;
121 if (negative_ && field_value >= filter_limit_min_ && field_value <= filter_limit_max_)
123 if (extract_removed_indices_)
124 (*removed_indices_)[rii++] = ii;
134 indices.resize (oii);
135 removed_indices_->resize (rii);
138 #define PCL_INSTANTIATE_PassThrough(T) template class PCL_EXPORTS pcl::PassThrough<T>;
void applyFilterIndices(std::vector< int > &indices)
Filtered results are indexed by an indices array.