40 #ifndef PCL_FILTERS_IMPL_EXTRACT_INDICES_HPP_ 41 #define PCL_FILTERS_IMPL_EXTRACT_INDICES_HPP_ 43 #include <pcl/filters/extract_indices.h> 46 template <
typename Po
intT>
void 49 std::vector<int> indices;
50 bool temp = extract_removed_indices_;
51 extract_removed_indices_ =
true;
52 this->setInputCloud (cloud);
53 applyFilterIndices (indices);
54 extract_removed_indices_ = temp;
56 std::vector<pcl::PCLPointField> fields;
58 for (
int rii = 0; rii < static_cast<int> (removed_indices_->size ()); ++rii)
60 std::size_t pt_index = (std::size_t) (*removed_indices_)[rii];
61 if (pt_index >= input_->size ())
63 PCL_ERROR (
"[pcl::%s::filterDirectly] The index exceeds the size of the input. Do nothing.\n",
64 getClassName ().c_str ());
69 for (
const auto &field : fields)
70 memcpy (pt_data + field.offset, &user_filter_value_, sizeof (
float));
72 if (!std::isfinite (user_filter_value_))
73 cloud->is_dense =
false;
77 template <
typename Po
intT>
void 80 std::vector<int> indices;
83 bool temp = extract_removed_indices_;
84 extract_removed_indices_ =
true;
85 applyFilterIndices (indices);
86 extract_removed_indices_ = temp;
89 std::vector<pcl::PCLPointField> fields;
91 for (
const auto ri : *removed_indices_)
93 std::size_t pt_index = (std::size_t)ri;
94 if (pt_index >= input_->size ())
96 PCL_ERROR (
"[pcl::%s::applyFilter] The index exceeds the size of the input. Do nothing.\n",
97 getClassName ().c_str ());
102 for (
const auto &field : fields)
103 memcpy (pt_data + field.offset, &user_filter_value_, sizeof (
float));
105 if (!std::isfinite (user_filter_value_))
110 applyFilterIndices (indices);
116 template <
typename Po
intT>
void 119 if (indices_->size () > input_->size ())
121 PCL_ERROR (
"[pcl::%s::applyFilter] The indices size exceeds the size of the input.\n", getClassName ().c_str ());
123 removed_indices_->clear ();
131 if (extract_removed_indices_)
134 std::vector<int> full_indices (input_->size ());
135 for (
int fii = 0; fii < static_cast<int> (full_indices.size ()); ++fii)
136 full_indices[fii] = fii;
139 std::vector<int> sorted_input_indices = *indices_;
140 std::sort (sorted_input_indices.begin (), sorted_input_indices.end ());
143 removed_indices_->clear ();
144 set_difference (full_indices.begin (), full_indices.end (), sorted_input_indices.begin (), sorted_input_indices.end (), inserter (*removed_indices_, removed_indices_->begin ()));
150 std::vector<int> full_indices (input_->size ());
151 for (
int fii = 0; fii < static_cast<int> (full_indices.size ()); ++fii)
152 full_indices[fii] = fii;
155 std::vector<int> sorted_input_indices = *indices_;
156 std::sort (sorted_input_indices.begin (), sorted_input_indices.end ());
160 set_difference (full_indices.begin (), full_indices.end (), sorted_input_indices.begin (), sorted_input_indices.end (), inserter (indices, indices.begin ()));
162 if (extract_removed_indices_)
163 removed_indices_ = indices_;
167 #define PCL_INSTANTIATE_ExtractIndices(T) template class PCL_EXPORTS pcl::ExtractIndices<T>; 169 #endif // PCL_FILTERS_IMPL_EXTRACT_INDICES_HPP_
void copyPointCloud(const pcl::PointCloud< PointInT > &cloud_in, pcl::PointCloud< PointOutT > &cloud_out)
Copy all the fields from a given point cloud into a new point cloud.
typename PointCloud::Ptr PointCloudPtr
PointCloud represents the base class in PCL for storing collections of 3D points. ...
bool is_dense
True if no points are invalid (e.g., have NaN or Inf values in any of their floating point fields)...