Skip to content

Commit

Permalink
Remove private header from AssignFilter.hpp (#2249)
Browse files Browse the repository at this point in the history
Logic simplification.
Close #2248
  • Loading branch information
abellgithub committed Oct 29, 2018
1 parent 5042080 commit b16a0fc
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 28 deletions.
40 changes: 18 additions & 22 deletions filters/AssignFilter.cpp
Expand Up @@ -57,6 +57,12 @@ struct AssignRange : public DimRange
double m_value;
};

struct AssignArgs
{
std::vector<AssignRange> m_assignments;
DimRange m_condition;
};

void AssignRange::parse(const std::string& r)
{
std::string::size_type pos, count;
Expand Down Expand Up @@ -111,7 +117,7 @@ std::ostream& operator<<(std::ostream& out, const AssignRange& r)
}


AssignFilter::AssignFilter()
AssignFilter::AssignFilter() : m_args(new AssignArgs)
{}


Expand All @@ -122,23 +128,18 @@ AssignFilter::~AssignFilter()
void AssignFilter::addArgs(ProgramArgs& args)
{
args.add("assignment", "Values to assign to dimensions based on range.",
m_assignments);
m_args->m_assignments);
args.add("condition", "Condition for assignment based on range.",
m_condition);
m_args->m_condition);
}


void AssignFilter::prepared(PointTableRef table)
{
PointLayoutPtr layout(table.layout());

m_condition.m_id = layout->findDim(m_condition.m_name);
if (m_condition.m_id == Dimension::Id::Unknown)
m_doCondition = false;
else
m_doCondition = true;

for (auto& r : m_assignments)
m_args->m_condition.m_id = layout->findDim(m_args->m_condition.m_name);
for (auto& r : m_args->m_assignments)
{
r.m_id = layout->findDim(r.m_name);
if (r.m_id == Dimension::Id::Unknown)
Expand All @@ -150,20 +151,15 @@ void AssignFilter::prepared(PointTableRef table)

bool AssignFilter::processOne(PointRef& point)
{
if (m_doCondition)
{
bool condition = m_condition.valuePasses(point.getFieldAs<double>(m_condition.m_id));
for (AssignRange& r : m_assignments)
if (r.valuePasses(point.getFieldAs<double>(r.m_id)) &&
condition)
point.setField(r.m_id, r.m_value);
} else
if (m_args->m_condition.m_id != Dimension::Id::Unknown)
{

for (AssignRange& r : m_assignments)
if (r.valuePasses(point.getFieldAs<double>(r.m_id)) )
point.setField(r.m_id, r.m_value);
double condVal = point.getFieldAs<double>(m_args->m_condition.m_id);
if (!m_args->m_condition.valuePasses(condVal))
return true;
}
for (AssignRange& r : m_args->m_assignments)
if (r.valuePasses(point.getFieldAs<double>(r.m_id)))
point.setField(r.m_id, r.m_value);
return true;
}

Expand Down
8 changes: 2 additions & 6 deletions filters/AssignFilter.hpp
Expand Up @@ -37,12 +37,10 @@
#include <pdal/Filter.hpp>
#include <pdal/Streamable.hpp>

#include "private/DimRange.hpp"

namespace pdal
{

struct AssignRange;
struct AssignArgs;

class PDAL_DLL AssignFilter : public Filter, public Streamable
{
Expand All @@ -61,9 +59,7 @@ class PDAL_DLL AssignFilter : public Filter, public Streamable
AssignFilter& operator=(const AssignFilter&) = delete;
AssignFilter(const AssignFilter&) = delete;

std::vector<AssignRange> m_assignments;
DimRange m_condition;
bool m_doCondition;
std::unique_ptr<AssignArgs> m_args;
};

} // namespace pdal

0 comments on commit b16a0fc

Please sign in to comment.