38 #include <pcl_cuda/filters/filter.h>
39 #include <pcl_cuda/filters/passthrough.h>
40 #include <thrust/count.h>
41 #include <thrust/remove.h>
42 #include <vector_types.h>
49 template <
typename CloudT>
55 using PointCloud =
typename PCLCUDABase<CloudT>::PointCloud;
72 std::cerr <<
"applyFilter" << std::endl;
95 output.points.resize (input_->points.size ());
97 Device<PointXYZRGB>::type::iterator nr_points = thrust::copy_if (input_->points.begin (), input_->points.end (), output.points.begin (),
isFiniteAOS ());
98 output.points.resize (nr_points - output.points.begin ());
133 output.resize (input_->size ());
135 Device<float>::type::iterator nr_points = thrust::copy_if (input_->points_x.begin (), input_->points_x.end (), output.points_x.begin (),
isFiniteSOA ());
136 nr_points = thrust::copy_if (input_->points_y.begin (), input_->points_y.end (), output.points_y.begin (),
isFiniteSOA ());
137 nr_points = thrust::copy_if (input_->points_z.begin (), input_->points_z.end (), output.points_z.begin (),
isFiniteSOA ());
138 output.resize (nr_points - output.points_z.begin ());
147 PointCloud::zip_iterator result = thrust::remove_if (output.zip_begin (), output.zip_end (),
isFiniteZIPSOA ());
148 PointCloud::iterator_tuple result_tuple = result.get_iterator_tuple ();
149 PointCloud::float_iterator xiter = thrust::get<0> (result_tuple),
150 yiter = thrust::get<1> (result_tuple),
151 ziter = thrust::get<2> (result_tuple);
153 unsigned badpoints =
distance (xiter, output.points_x.end ());
154 unsigned goodpoints =
distance (output.points_x.begin (), xiter);
156 output.resize (goodpoints);