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;
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);