Skip to content

Commit

Permalink
Push logic of possibly empty returns string into segmentReturns
Browse files Browse the repository at this point in the history
  • Loading branch information
chambbj committed May 3, 2019
1 parent 7005c29 commit f96e5cd
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 40 deletions.
11 changes: 2 additions & 9 deletions filters/PMFFilter.cpp
Expand Up @@ -192,15 +192,8 @@ PointViewSet PMFFilter::run(PointViewPtr input)
}
else
{
if (m_args->m_returns.size())
{
Segmentation::segmentReturns(keptView, firstView, secondView,
m_args->m_returns);
}
else
{
firstView->append(*keptView);
}
Segmentation::segmentReturns(keptView, firstView, secondView,
m_args->m_returns);
}

if (!firstView->size())
Expand Down
11 changes: 2 additions & 9 deletions filters/SMRFilter.cpp
Expand Up @@ -224,15 +224,8 @@ PointViewSet SMRFilter::run(PointViewPtr view)
}
else
{
if (m_args->m_returns.size())
{
Segmentation::segmentReturns(keptView, firstView, secondView,
m_args->m_returns);
}
else
{
firstView->append(*keptView);
}
Segmentation::segmentReturns(keptView, firstView, secondView,
m_args->m_returns);
}

if (!firstView->size())
Expand Down
52 changes: 30 additions & 22 deletions filters/private/Segmentation.cpp
Expand Up @@ -36,6 +36,7 @@

#include <pdal/KDIndex.hpp>
#include <pdal/PointView.hpp>
#include <pdal/Stage.hpp>
#include <pdal/pdal_types.hpp>

#include "DimRange.hpp"
Expand Down Expand Up @@ -168,34 +169,41 @@ void segmentReturns(PointViewPtr input, PointViewPtr first,
bool returnLast = false;
bool returnOnly = false;

for (auto& r : returns)
if (!returns.size())
{
Utils::trim(r);
if (r == "first")
returnFirst = true;
else if (r == "intermediate")
returnIntermediate = true;
else if (r == "last")
returnLast = true;
else if (r == "only")
returnOnly = true;
first->append(*input);
}

for (PointId i = 0; i < input->size(); ++i)
else
{
uint8_t rn = input->getFieldAs<uint8_t>(Id::ReturnNumber, i);
uint8_t nr = input->getFieldAs<uint8_t>(Id::NumberOfReturns, i);

if ((((rn == 1) && (nr > 1)) && returnFirst) ||
(((rn > 1) && (rn < nr)) && returnIntermediate) ||
(((rn == nr) && (nr > 1)) && returnLast) ||
((nr == 1) && returnOnly))
for (auto& r : returns)
{
first->appendPoint(*input.get(), i);
Utils::trim(r);
if (r == "first")
returnFirst = true;
else if (r == "intermediate")
returnIntermediate = true;
else if (r == "last")
returnLast = true;
else if (r == "only")
returnOnly = true;
}
else

for (PointId i = 0; i < input->size(); ++i)
{
second->appendPoint(*input.get(), i);
uint8_t rn = input->getFieldAs<uint8_t>(Id::ReturnNumber, i);
uint8_t nr = input->getFieldAs<uint8_t>(Id::NumberOfReturns, i);

if ((((rn == 1) && (nr > 1)) && returnFirst) ||
(((rn > 1) && (rn < nr)) && returnIntermediate) ||
(((rn == nr) && (nr > 1)) && returnLast) ||
((nr == 1) && returnOnly))
{
first->appendPoint(*input.get(), i);
}
else
{
second->appendPoint(*input.get(), i);
}
}
}
}
Expand Down

0 comments on commit f96e5cd

Please sign in to comment.