template <typename PointT> void pcl::ExtractIndices<PointT>::applyFilter (PointCloud &output) { std::vector<int> indices; if (keep_organized_) { bool temp = extract_removed_indices_; extract_removed_indices_ = true; applyFilterIndices (indices); extract_removed_indices_ = temp; output = *input_; std::vector<pcl::PCLPointField> fields; pcl::for_each_type<FieldList> (pcl::detail::FieldAdder<PointT> (fields)); for (int rii = 0; rii < static_cast<int> (removed_indices_->size ()); ++rii) // rii = removed indices iterator { uint8_t* pt_data = reinterpret_cast<uint8_t*> (&output.points[(*removed_indices_)[rii]]); for (int fi = 0; fi < static_cast<int> (fields.size ()); ++fi) // fi = field iterator memcpy (pt_data + fields[fi].offset, &user_filter_value_, sizeof (float)); } if (!pcl_isfinite (user_filter_value_)) output.is_dense = false; } else { applyFilterIndices (indices); copyPointCloud (*input_, indices, output); } }
template <typename PointT> void pcl::RadiusOutlierRemoval<PointT>::applyFilter (PointCloud &output) { std::vector<int> indices; if (keep_organized_) { bool temp = extract_removed_indices_; extract_removed_indices_ = true; applyFilterIndices (indices); extract_removed_indices_ = temp; output = *input_; for (int rii = 0; rii < static_cast<int> (removed_indices_->size ()); ++rii) // rii = removed indices iterator output.points[(*removed_indices_)[rii]].x = output.points[(*removed_indices_)[rii]].y = output.points[(*removed_indices_)[rii]].z = user_filter_value_; if (!pcl_isfinite (user_filter_value_)) output.is_dense = false; } else { applyFilterIndices (indices); copyPointCloud (*input_, indices, output); } }
void PassThrough::applyFilter (pcl::PointCloud<PointXYZSIFT>::Ptr input, pcl::PointCloud<PointXYZSIFT> &output, std::string filter_field_name, float min, float max, bool negative) { CLOG(LTRACE) << "applyFilter() " << filter_field_name; output.header = input->header; output.sensor_origin_ = input->sensor_origin_; output.sensor_orientation_ = input->sensor_orientation_; std::vector<int> indices; output.is_dense = true; applyFilterIndices (indices, input, filter_field_name, min, max, negative); CLOG(LTRACE)<< "Number of indices: "<< indices.size() <<endl; copyPointCloud (*input, indices, output); }
template <typename PointT> void pcl::LocalMaximum<PointT>::applyFilter (PointCloud &output) { // Has the input dataset been set already? if (!input_) { PCL_WARN ("[pcl::%s::applyFilter] No input dataset given!\n", getClassName ().c_str ()); output.width = output.height = 0; output.points.clear (); return; } std::vector<int> indices; output.is_dense = true; applyFilterIndices (indices); pcl::copyPointCloud<PointT> (*input_, indices, output); }
template <typename PointT> void pcl::ExtractIndices<PointT>::filterDirectly (PointCloudPtr &cloud) { std::vector<int> indices; bool temp = extract_removed_indices_; extract_removed_indices_ = true; this->setInputCloud (cloud); applyFilterIndices (indices); extract_removed_indices_ = temp; std::vector<pcl::PCLPointField> fields; pcl::for_each_type<FieldList> (pcl::detail::FieldAdder<PointT> (fields)); for (int rii = 0; rii < static_cast<int> (removed_indices_->size ()); ++rii) // rii = removed indices iterator { uint8_t* pt_data = reinterpret_cast<uint8_t*> (&cloud->points[(*removed_indices_)[rii]]); for (int fi = 0; fi < static_cast<int> (fields.size ()); ++fi) // fi = field iterator memcpy (pt_data + fields[fi].offset, &user_filter_value_, sizeof (float)); } if (!pcl_isfinite (user_filter_value_)) cloud->is_dense = false; }