From 18e00540db0fbb3b117502f2a71a5b334da9beaa Mon Sep 17 00:00:00 2001 From: Howard Butler Date: Tue, 10 Mar 2015 14:19:50 -0500 Subject: [PATCH 1/2] catch up PCL kernels to new plugin changes #774 --- plugins/pcl/kernel/GroundKernel.cpp | 47 ++++++++++++--------------- plugins/pcl/kernel/PCLKernel.cpp | 48 +++++++++++----------------- plugins/pcl/kernel/PCLKernel.hpp | 1 + plugins/pcl/kernel/SmoothKernel.cpp | 49 +++++++++++++---------------- plugins/pcl/kernel/ViewKernel.cpp | 26 ++++++--------- 5 files changed, 70 insertions(+), 101 deletions(-) diff --git a/plugins/pcl/kernel/GroundKernel.cpp b/plugins/pcl/kernel/GroundKernel.cpp index 5189f505ac..a735602d85 100644 --- a/plugins/pcl/kernel/GroundKernel.cpp +++ b/plugins/pcl/kernel/GroundKernel.cpp @@ -108,25 +108,6 @@ void GroundKernel::addSwitches() addPositionalSwitch("output", 1); } -std::shared_ptr GroundKernel::makeReader(Options readerOptions) -{ - if (isDebug()) - { - readerOptions.add("debug", true); - uint32_t verbosity(getVerboseLevel()); - if (!verbosity) - verbosity = 1; - - readerOptions.add("verbose", verbosity); - readerOptions.add("log", "STDERR"); - } - - std::shared_ptr stage = KernelSupport::makeReader(m_inputFile); - stage->setOptions(readerOptions); - - return stage; -} - int GroundKernel::execute() { PointContext ctx; @@ -136,7 +117,19 @@ int GroundKernel::execute() readerOptions.add("debug", isDebug()); readerOptions.add("verbose", getVerboseLevel()); - std::unique_ptr readerStage = makeReader(readerOptions); + if (isDebug()) + { + readerOptions.add("debug", true); + uint32_t verbosity(getVerboseLevel()); + if (!verbosity) + verbosity = 1; + + readerOptions.add("verbose", verbosity); + readerOptions.add("log", "STDERR"); + } + + Stage& readerStage(Kernel::makeReader(m_inputFile)); + readerStage.setOptions(readerOptions); Options groundOptions; groundOptions.add("maxWindowSize", m_maxWindowSize); @@ -150,28 +143,28 @@ int GroundKernel::execute() StageFactory f; std::unique_ptr groundStage(f.createStage("filters.ground")); groundStage->setOptions(groundOptions); - groundStage->setInput(*readerStage); + groundStage->setInput(readerStage); // setup the Writer and write the results Options writerOptions; writerOptions.add("filename", m_outputFile); setCommonOptions(writerOptions); - std::shared_ptr writer(KernelSupport::makeWriter(m_outputFile, groundStage)); - writer->setOptions(writerOptions); + Stage& writer(Kernel::makeWriter(m_outputFile, *groundStage)); + writer.setOptions(writerOptions); std::vector cmd = getProgressShellCommand(); UserCallback *callback = cmd.size() ? (UserCallback *)new ShellScriptCallback(cmd) : (UserCallback *)new HeartbeatCallback(); - writer->setUserCallback(callback); + writer.setUserCallback(callback); for (const auto& pi: getExtraStageOptions()) { std::string name = pi.first; Options options = pi.second; - std::vector > stages = writer->findStage(name); + std::vector stages = writer.findStage(name); for (const auto& s : stages) { Options opts = s->getOptions(); @@ -181,11 +174,11 @@ int GroundKernel::execute() } } - writer->prepare(ctx); + writer.prepare(ctx); // process the data, grabbing the PointBufferSet for visualization of the // resulting PointBuffer - PointBufferSet pbSetOut = writer->execute(ctx); + PointBufferSet pbSetOut = writer.execute(ctx); if (isVisualize()) visualize(*pbSetOut.begin()); diff --git a/plugins/pcl/kernel/PCLKernel.cpp b/plugins/pcl/kernel/PCLKernel.cpp index a2dd4fe217..99a8145d66 100644 --- a/plugins/pcl/kernel/PCLKernel.cpp +++ b/plugins/pcl/kernel/PCLKernel.cpp @@ -96,8 +96,15 @@ void PCLKernel::addSwitches() addPositionalSwitch("pcl", 1); } -std::shared_ptr PCLKernel::makeReader(Options readerOptions) + +int PCLKernel::execute() { + PointContext ctx; + + Options readerOptions; + readerOptions.add("filename", m_inputFile); + readerOptions.add("debug", isDebug()); + readerOptions.add("verbose", getVerboseLevel()); if (isDebug()) { readerOptions.add("debug", true); @@ -108,30 +115,14 @@ std::shared_ptr PCLKernel::makeReader(Options readerOptions) readerOptions.add("verbose", verbosity); readerOptions.add("log", "STDERR"); } - - std::shared_ptr stage = KernelSupport::makeReader(m_inputFile); - stage->setOptions(readerOptions); - - return stage; -} - - -int PCLKernel::execute() -{ - PointContext ctx; - - Options readerOptions; - readerOptions.add("filename", m_inputFile); - readerOptions.add("debug", isDebug()); - readerOptions.add("verbose", getVerboseLevel()); - - std::shared_ptr readerStage = makeReader(readerOptions); + Stage& readerStage(Kernel::makeReader(m_inputFile)); + readerStage.setOptions(readerOptions); // go ahead and prepare/execute on reader stage only to grab input // PointBufferSet, this makes the input PointBuffer available to both the // processing pipeline and the visualizer - readerStage->prepare(ctx); - PointBufferSet pbSetIn = readerStage->execute(ctx); + readerStage.prepare(ctx); + PointBufferSet pbSetIn = readerStage.execute(ctx); // the input PointBufferSet will be used to populate a BufferReader that is // consumed by the processing pipeline @@ -145,7 +136,7 @@ int PCLKernel::execute() pclOptions.add("verbose", getVerboseLevel()); std::shared_ptr pclStage(new PCLBlock()); - pclStage->setInput(bufferReader); + pclStage->setInput(*bufferReader); pclStage->setOptions(pclOptions); // the PCLBlock stage consumes the BufferReader rather than the @@ -165,20 +156,19 @@ int PCLKernel::execute() cmd.size() ? (UserCallback *)new ShellScriptCallback(cmd) : (UserCallback *)new HeartbeatCallback(); - std::shared_ptr - writer(KernelSupport::makeWriter(m_outputFile, pclStage)); + Stage& writer(Kernel::makeWriter(m_outputFile, *pclStage)); // Some options are inferred by makeWriter based on filename // (compression, driver type, etc). - writer->setOptions(writerOptions+writer->getOptions()); + writer.setOptions(writerOptions+writer.getOptions()); - writer->setUserCallback(callback); + writer.setUserCallback(callback); for (const auto& pi : getExtraStageOptions()) { std::string name = pi.first; Options options = pi.second; - std::vector > stages = writer->findStage(name); + std::vector stages = writer.findStage(name); for (const auto& s : stages) { Options opts = s->getOptions(); @@ -188,11 +178,11 @@ int PCLKernel::execute() } } - writer->prepare(ctx); + writer.prepare(ctx); // process the data, grabbing the PointBufferSet for visualization of the // resulting PointBuffer - PointBufferSet pbSetOut = writer->execute(ctx); + PointBufferSet pbSetOut = writer.execute(ctx); if (isVisualize()) visualize(*pbSetOut.begin()); diff --git a/plugins/pcl/kernel/PCLKernel.hpp b/plugins/pcl/kernel/PCLKernel.hpp index 3fa71521c5..bb13f09221 100644 --- a/plugins/pcl/kernel/PCLKernel.hpp +++ b/plugins/pcl/kernel/PCLKernel.hpp @@ -52,6 +52,7 @@ class PDAL_DLL PCLKernel : public Kernel void addSwitches(); void validateSwitches(); + std::unique_ptr m_manager; std::shared_ptr makeReader(Options readerOptions); std::string m_inputFile; diff --git a/plugins/pcl/kernel/SmoothKernel.cpp b/plugins/pcl/kernel/SmoothKernel.cpp index e3e8926ef8..743102c952 100644 --- a/plugins/pcl/kernel/SmoothKernel.cpp +++ b/plugins/pcl/kernel/SmoothKernel.cpp @@ -84,8 +84,16 @@ void SmoothKernel::addSwitches() addPositionalSwitch("output", 1); } -std::shared_ptr SmoothKernel::makeReader(Options readerOptions) + +int SmoothKernel::execute() { + PointContext ctx; + + Options readerOptions; + readerOptions.add("filename", m_inputFile); + readerOptions.add("debug", isDebug()); + readerOptions.add("verbose", getVerboseLevel()); + if (isDebug()) { readerOptions.add("debug", true); @@ -97,29 +105,14 @@ std::shared_ptr SmoothKernel::makeReader(Options readerOptions) readerOptions.add("log", "STDERR"); } - std::shared_ptr stage = KernelSupport::makeReader(m_inputFile); - stage->setOptions(readerOptions); - - return stage; -} - - -int SmoothKernel::execute() -{ - PointContext ctx; - - Options readerOptions; - readerOptions.add("filename", m_inputFile); - readerOptions.add("debug", isDebug()); - readerOptions.add("verbose", getVerboseLevel()); - - std::shared_ptr readerStage = makeReader(readerOptions); + Stage& readerStage(Kernel::makeReader(m_inputFile)); + readerStage.setOptions(readerOptions); // go ahead and prepare/execute on reader stage only to grab input // PointBufferSet, this makes the input PointBuffer available to both the // processing pipeline and the visualizer - readerStage->prepare(ctx); - PointBufferSet pbSetIn = readerStage->execute(ctx); + readerStage.prepare(ctx); + PointBufferSet pbSetIn = readerStage.execute(ctx); // the input PointBufferSet will be used to populate a BufferReader that is // consumed by the processing pipeline @@ -144,21 +137,21 @@ int SmoothKernel::execute() std::shared_ptr smoothStage(new PCLBlock()); smoothStage->setOptions(smoothOptions); - smoothStage->setInput(bufferReader); + smoothStage->setInput(*bufferReader); Options writerOptions; writerOptions.add("filename", m_outputFile); setCommonOptions(writerOptions); - std::shared_ptr writer(KernelSupport::makeWriter(m_outputFile, smoothStage)); - writer->setOptions(writerOptions); + Stage& writer(Kernel::makeWriter(m_outputFile, *smoothStage)); + writer.setOptions(writerOptions); std::vector cmd = getProgressShellCommand(); UserCallback *callback = cmd.size() ? (UserCallback *)new ShellScriptCallback(cmd) : (UserCallback *)new HeartbeatCallback(); - writer->setUserCallback(callback); + writer.setUserCallback(callback); std::map extra_opts = getExtraStageOptions(); std::map::iterator pi; @@ -166,8 +159,8 @@ int SmoothKernel::execute() { std::string name = pi->first; Options options = pi->second; - std::vector > stages = writer->findStage(name); - std::vector >::iterator s; + std::vector stages = writer.findStage(name); + std::vector::iterator s; for (s = stages.begin(); s != stages.end(); ++s) { Options opts = (*s)->getOptions(); @@ -178,11 +171,11 @@ int SmoothKernel::execute() } } - writer->prepare(ctx); + writer.prepare(ctx); // process the data, grabbing the PointBufferSet for visualization of the // resulting PointBuffer - PointBufferSet pbSetOut = writer->execute(ctx); + PointBufferSet pbSetOut = writer.execute(ctx); if (isVisualize()) visualize(*pbSetOut.begin()); diff --git a/plugins/pcl/kernel/ViewKernel.cpp b/plugins/pcl/kernel/ViewKernel.cpp index ae28919cca..5dd0bdc224 100644 --- a/plugins/pcl/kernel/ViewKernel.cpp +++ b/plugins/pcl/kernel/ViewKernel.cpp @@ -154,8 +154,12 @@ void ViewKernel::addSwitches() addPositionalSwitch("input", 1); } -std::shared_ptr ViewKernel::makeReader(Options readerOptions) +int ViewKernel::execute() { + Options readerOptions; + readerOptions.add("filename", m_inputFile); + readerOptions.add("debug", isDebug()); + readerOptions.add("verbose", getVerboseLevel()); if (isDebug()) { readerOptions.add("debug", true); @@ -167,24 +171,12 @@ std::shared_ptr ViewKernel::makeReader(Options readerOptions) readerOptions.add("log", "STDERR"); } - std::shared_ptr stage(KernelSupport::makeReader(m_inputFile)); - stage->setOptions(readerOptions); - - return stage; -} - - -int ViewKernel::execute() -{ - Options readerOptions; - readerOptions.add("filename", m_inputFile); - readerOptions.add("debug", isDebug()); - readerOptions.add("verbose", getVerboseLevel()); + Stage& readerStage(Kernel::makeReader(m_inputFile)); + readerStage.setOptions(readerOptions); - std::shared_ptr readerStage(makeReader(readerOptions)); PointContext ctx; - readerStage->prepare(ctx); - PointBufferSet pbSetIn = readerStage->execute(ctx); + readerStage.prepare(ctx); + PointBufferSet pbSetIn = readerStage.execute(ctx); PointBufferPtr buf = *pbSetIn.begin(); if (m_pointIndexes.size()) From cb1f670a8f688a9fd022ec9ca345d6bdd34d70ac Mon Sep 17 00:00:00 2001 From: Bradley J Chambers Date: Wed, 11 Mar 2015 10:52:38 -0400 Subject: [PATCH 2/2] consolidate the debug, verbosity, and log options as part of setCommonOptions --- plugins/pcl/kernel/GroundKernel.cpp | 14 +------------- plugins/pcl/kernel/PCLKernel.cpp | 12 +----------- plugins/pcl/kernel/SmoothKernel.cpp | 14 +------------- plugins/pcl/kernel/ViewKernel.cpp | 13 +------------ src/Kernel.cpp | 13 +++++++++++-- 5 files changed, 15 insertions(+), 51 deletions(-) diff --git a/plugins/pcl/kernel/GroundKernel.cpp b/plugins/pcl/kernel/GroundKernel.cpp index a735602d85..728721adec 100644 --- a/plugins/pcl/kernel/GroundKernel.cpp +++ b/plugins/pcl/kernel/GroundKernel.cpp @@ -114,19 +114,7 @@ int GroundKernel::execute() Options readerOptions; readerOptions.add("filename", m_inputFile); - readerOptions.add("debug", isDebug()); - readerOptions.add("verbose", getVerboseLevel()); - - if (isDebug()) - { - readerOptions.add("debug", true); - uint32_t verbosity(getVerboseLevel()); - if (!verbosity) - verbosity = 1; - - readerOptions.add("verbose", verbosity); - readerOptions.add("log", "STDERR"); - } + setCommonOptions(readerOptions); Stage& readerStage(Kernel::makeReader(m_inputFile)); readerStage.setOptions(readerOptions); diff --git a/plugins/pcl/kernel/PCLKernel.cpp b/plugins/pcl/kernel/PCLKernel.cpp index 99a8145d66..45bb5e3916 100644 --- a/plugins/pcl/kernel/PCLKernel.cpp +++ b/plugins/pcl/kernel/PCLKernel.cpp @@ -103,18 +103,8 @@ int PCLKernel::execute() Options readerOptions; readerOptions.add("filename", m_inputFile); - readerOptions.add("debug", isDebug()); - readerOptions.add("verbose", getVerboseLevel()); - if (isDebug()) - { - readerOptions.add("debug", true); - uint32_t verbosity(getVerboseLevel()); - if (!verbosity) - verbosity = 1; + setCommonOptions(readerOptions); - readerOptions.add("verbose", verbosity); - readerOptions.add("log", "STDERR"); - } Stage& readerStage(Kernel::makeReader(m_inputFile)); readerStage.setOptions(readerOptions); diff --git a/plugins/pcl/kernel/SmoothKernel.cpp b/plugins/pcl/kernel/SmoothKernel.cpp index 743102c952..4d8a0bcdb6 100644 --- a/plugins/pcl/kernel/SmoothKernel.cpp +++ b/plugins/pcl/kernel/SmoothKernel.cpp @@ -91,19 +91,7 @@ int SmoothKernel::execute() Options readerOptions; readerOptions.add("filename", m_inputFile); - readerOptions.add("debug", isDebug()); - readerOptions.add("verbose", getVerboseLevel()); - - if (isDebug()) - { - readerOptions.add("debug", true); - uint32_t verbosity(getVerboseLevel()); - if (!verbosity) - verbosity = 1; - - readerOptions.add("verbose", verbosity); - readerOptions.add("log", "STDERR"); - } + setCommonOptions(readerOptions); Stage& readerStage(Kernel::makeReader(m_inputFile)); readerStage.setOptions(readerOptions); diff --git a/plugins/pcl/kernel/ViewKernel.cpp b/plugins/pcl/kernel/ViewKernel.cpp index 5dd0bdc224..1c11c5bb17 100644 --- a/plugins/pcl/kernel/ViewKernel.cpp +++ b/plugins/pcl/kernel/ViewKernel.cpp @@ -158,18 +158,7 @@ int ViewKernel::execute() { Options readerOptions; readerOptions.add("filename", m_inputFile); - readerOptions.add("debug", isDebug()); - readerOptions.add("verbose", getVerboseLevel()); - if (isDebug()) - { - readerOptions.add("debug", true); - uint32_t verbosity(getVerboseLevel()); - if (!verbosity) - verbosity = 1; - - readerOptions.add("verbose", verbosity); - readerOptions.add("log", "STDERR"); - } + setCommonOptions(readerOptions); Stage& readerStage(Kernel::makeReader(m_inputFile)); readerStage.setOptions(readerOptions); diff --git a/src/Kernel.cpp b/src/Kernel.cpp index 6c4848c9bd..9ca3ad007f 100644 --- a/src/Kernel.cpp +++ b/src/Kernel.cpp @@ -419,10 +419,19 @@ void Kernel::addSwitchSet(po::options_description* options) void Kernel::setCommonOptions(Options &options) { - options.add("debug", m_isDebug); - options.add("verbose", m_verboseLevel); options.add("visualize", m_visualize); + if (m_isDebug) + { + options.add("debug", true); + uint32_t verbosity(m_verboseLevel); + if (!verbosity) + verbosity = 1; + + options.add("verbose", verbosity); + options.add("log", "STDERR"); + } + boost::char_separator sep(",| "); if (m_variablesMap.count("scale"))