Skip to content

Commit

Permalink
Add condition option to assign filter
Browse files Browse the repository at this point in the history
Values will only be assigned when the condition (specified as a DimRange) is
met.

Closes #1956
  • Loading branch information
chambbj committed Apr 23, 2018
1 parent 9ea259c commit a2ef644
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 1 deletion.
10 changes: 9 additions & 1 deletion filters/AssignFilter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -123,13 +123,20 @@ void AssignFilter::addArgs(ProgramArgs& args)
{
args.add("assignment", "Values to assign to dimensions based on range.",
m_assignments);
args.add("condition", "Condition for assignment based on range.",
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)
throwError("Invalid dimension name in 'condition' option: '" +
m_condition.m_name + "'.");

for (auto& r : m_assignments)
{
r.m_id = layout->findDim(r.m_name);
Expand All @@ -143,7 +150,8 @@ void AssignFilter::prepared(PointTableRef table)
bool AssignFilter::processOne(PointRef& point)
{
for (AssignRange& r : m_assignments)
if (r.valuePasses(point.getFieldAs<double>(r.m_id)))
if (r.valuePasses(point.getFieldAs<double>(r.m_id)) &&
m_condition.valuePasses(point.getFieldAs<double>(m_condition.m_id)))
point.setField(r.m_id, r.m_value);
return true;
}
Expand Down
3 changes: 3 additions & 0 deletions filters/AssignFilter.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
#include <pdal/Filter.hpp>
#include <pdal/Streamable.hpp>

#include "private/DimRange.hpp"

namespace pdal
{

Expand All @@ -60,6 +62,7 @@ class PDAL_DLL AssignFilter : public Filter, public Streamable
AssignFilter(const AssignFilter&) = delete;

std::vector<AssignRange> m_assignments;
DimRange m_condition;
};

} // namespace pdal

0 comments on commit a2ef644

Please sign in to comment.