40 #ifndef PCL_FILTERS_IMPL_PASSTHROUGH_HPP_
41 #define PCL_FILTERS_IMPL_PASSTHROUGH_HPP_
47 template <
typename Po
intT>
void
50 std::vector<int> indices;
53 bool temp = extract_removed_indices_;
54 extract_removed_indices_ =
true;
55 applyFilterIndices (indices);
56 extract_removed_indices_ = temp;
59 for (
int rii = 0; rii < static_cast<int> (removed_indices_->size ()); ++rii)
60 output.
points[(*removed_indices_)[rii]].x = output.
points[(*removed_indices_)[rii]].y = output.
points[(*removed_indices_)[rii]].z = user_filter_value_;
66 applyFilterIndices (indices);
72 template <
typename Po
intT>
void
76 indices.resize (indices_->size ());
77 removed_indices_->resize (indices_->size ());
81 if (filter_field_name_.empty ())
84 for (
int iii = 0; iii < static_cast<int> (indices_->size ()); ++iii)
87 if (!
pcl_isfinite (input_->points[(*indices_)[iii]].x) ||
91 if (extract_removed_indices_)
92 (*removed_indices_)[rii++] = (*indices_)[iii];
95 indices[oii++] = (*indices_)[iii];
101 std::vector<sensor_msgs::PointField> fields;
103 if (distance_idx == -1)
105 PCL_WARN (
"[pcl::%s::applyFilter] Unable to find field name in point type.\n", getClassName ().c_str ());
107 removed_indices_->clear ();
112 for (
int iii = 0; iii < static_cast<int> (indices_->size ()); ++iii)
115 if (!
pcl_isfinite (input_->points[(*indices_)[iii]].x) ||
119 if (extract_removed_indices_)
120 (*removed_indices_)[rii++] = (*indices_)[iii];
125 const uint8_t* pt_data =
reinterpret_cast<const uint8_t*
> (&input_->points[(*indices_)[iii]]);
126 float field_value = 0;
127 memcpy (&field_value, pt_data + fields[distance_idx].offset,
sizeof (
float));
130 if (!negative_ && (field_value < filter_limit_min_ || field_value > filter_limit_max_))
132 if (extract_removed_indices_)
133 (*removed_indices_)[rii++] = (*indices_)[iii];
138 if (negative_ && field_value > filter_limit_min_ && field_value < filter_limit_max_)
140 if (extract_removed_indices_)
141 (*removed_indices_)[rii++] = (*indices_)[iii];
146 indices[oii++] = (*indices_)[iii];
151 indices.resize (oii);
152 removed_indices_->resize (rii);
155 #define PCL_INSTANTIATE_PassThrough(T) template class PCL_EXPORTS pcl::PassThrough<T>;
157 #endif // PCL_FILTERS_IMPL_PASSTHROUGH_HPP_