40 #ifndef PCL_FILTERS_IMPL_PASSTHROUGH_HPP_
41 #define PCL_FILTERS_IMPL_PASSTHROUGH_HPP_
43 #include <pcl/filters/passthrough.h>
46 template <
typename Po
intT>
void
50 indices.resize (indices_->size ());
51 removed_indices_->resize (indices_->size ());
55 if (filter_field_name_.empty ())
58 for (
const auto ii : *indices_)
61 if (!std::isfinite ((*input_)[ii].x) ||
62 !std::isfinite ((*input_)[ii].y) ||
63 !std::isfinite ((*input_)[ii].z))
65 if (extract_removed_indices_)
66 (*removed_indices_)[rii++] = ii;
75 std::vector<pcl::PCLPointField> fields;
76 int distance_idx = pcl::getFieldIndex<PointT> (filter_field_name_, fields);
77 if (distance_idx == -1)
79 PCL_WARN (
"[pcl::%s::applyFilter] Unable to find field name in point type.\n", getClassName ().c_str ());
81 removed_indices_->clear ();
86 for (
const auto ii : *indices_)
89 if (!std::isfinite ((*input_)[ii].x) ||
90 !std::isfinite ((*input_)[ii].y) ||
91 !std::isfinite ((*input_)[ii].z))
93 if (extract_removed_indices_)
94 (*removed_indices_)[rii++] = ii;
99 const std::uint8_t* pt_data =
reinterpret_cast<const std::uint8_t*
> (&(*input_)[ii]);
100 float field_value = 0;
101 memcpy (&field_value, pt_data + fields[distance_idx].offset,
sizeof (
float));
104 if (!std::isfinite (field_value))
106 if (extract_removed_indices_)
107 (*removed_indices_)[rii++] = ii;
112 if (!negative_ && (field_value < filter_limit_min_ || field_value > filter_limit_max_))
114 if (extract_removed_indices_)
115 (*removed_indices_)[rii++] = ii;
120 if (negative_ && field_value >= filter_limit_min_ && field_value <= filter_limit_max_)
122 if (extract_removed_indices_)
123 (*removed_indices_)[rii++] = ii;
133 indices.resize (oii);
134 removed_indices_->resize (rii);
137 #define PCL_INSTANTIATE_PassThrough(T) template class PCL_EXPORTS pcl::PassThrough<T>;
void applyFilterIndices(Indices &indices)
Filtered results are indexed by an indices array.
IndicesAllocator<> Indices
Type used for indices in PCL.