MCPcopy Create free account
hub / github.com/PDAL/PDAL / filterPoints

Method filterPoints

filters/M3C2Filter.cpp:305–337  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

303}
304
305std::vector<double> M3C2Filter::filterPoints(Eigen::Vector3d cylCenter, Eigen::Vector3d cylNormal,
306 const PointView& view, const PointIdList& neighbors)
307{
308 std::vector<double> dists;
309
310 if (!neighbors.size())
311 return dists;
312 dists.reserve(neighbors.size());
313
314 Eigen::Vector3d point(view.getFieldAs<double>(Dimension::Id::X, 0),
315 view.getFieldAs<double>(Dimension::Id::Y, 0),
316 view.getFieldAs<double>(Dimension::Id::Z, 0));
317
318 size_t start = 0;
319 // If the first point is the test point, ignore it.
320 if (Comparison::closeEnough(cylCenter(0), point(0)) &&
321 Comparison::closeEnough(cylCenter(1), point(1)) &&
322 Comparison::closeEnough(cylCenter(2), point(2)))
323 start++;
324
325 for (size_t i = start; i < neighbors.size(); i++)
326 {
327 PointId id = neighbors[i];
328 Eigen::Vector3d point(view.getFieldAs<double>(Dimension::Id::X, id),
329 view.getFieldAs<double>(Dimension::Id::Y, id),
330 view.getFieldAs<double>(Dimension::Id::Z, id));
331
332 double dist = pointPasses(point, cylCenter, cylNormal);
333 if (!std::isnan(dist))
334 dists.push_back(dist);
335 }
336 return dists;
337}
338
339double M3C2Filter::pointPasses(Eigen::Vector3d point, Eigen::Vector3d cylCenter,
340 Eigen::Vector3d cylNormal)

Callers

nothing calls this directly

Calls 3

closeEnoughFunction · 0.85
pointFunction · 0.50
sizeMethod · 0.45

Tested by

no test coverage detected