<div dir="ltr"><div>Andrew,<br><br></div><div>We have become interested in that second option you mention, "executing code programmatically, you can simply add your writer to the end of a pipeline and call prepare() and execute()". Are there examples of how to do this?<br><br></div><div>We looked at PipelineManager and see<br><span style="color:rgb(36,41,46);font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:pre;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;display:inline;float:none">PointTableRef </span><span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193);font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:pre;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">pointTable</span><span style="color:rgb(36,41,46);font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:pre;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;display:inline;float:none">() </span><span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73);font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:pre;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">const</span><br><br></div><div>Is that what we would consume? If so, how do I get to the point where that has data in it and is ready for me to iterate over<br></div><div><br></div>- Paul<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 11, 2017 at 11:16 AM, Andrew Bell <span dir="ltr"><<a href="mailto:andrew.bell.ia@gmail.com" target="_blank">andrew.bell.ia@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">You need to build your writer (a plugin) into a shared object that can be loaded by the plugin manager. It needs to be called libpdal_plugin_writer_<wbr>PdalVectorMapWriter.<your shared library extension>. The shared library needs to be located somewhere that the plugin manager can find it. By default, PDAL will look in the following directories for plugins:<div><br></div><div>".", "./lib", "../lib", "./bin", "../bin"<br></div><div><br></div><div>If you're using cmake, you can use the PDAL build to generate the shared library for you. Here's an example plugin:</div><div><br></div><div><a href="https://github.com/gadomski/cpd.git" target="_blank">https://github.com/gadomski/<wbr>cpd.git</a><br></div><div><br></div><div>Note that you don't have to do ANY of this if you're not using the pipeline/plugin manager to run your writer from a JSON pipeline. If you're executing code programmatically, you can simply add your writer to the end of a pipeline and call prepare() and execute() on the pipeline that you've created in code.</div><div> </div></div><div class="gmail_extra"><div><div class="h5"><br><div class="gmail_quote">On Tue, Jul 11, 2017 at 10:59 AM, Paul Schrum <span dir="ltr"><<a href="mailto:paul.schrum@gmail.com" target="_blank">paul.schrum@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Thank you Andrew.<br><br></div><div>In the cpp file containing the class, I have the following lines:<br><br><span style="font-family:monospace,monospace"> static PluginInfo const s_info = PluginInfo(<br> "writers.PdalVectorMapWriter",<br> "Custom Writer to write a GRASS Vector Map",<br> "<a href="http://no/documentation/yet" target="_blank">http://no/documentation/yet</a>" );<br><br> CREATE_SHARED_PLUGIN(1, 0, PdalVectorMapWriter, Writer, s_info);<br></span><br></div><div>So would the only other thing I need to do be to tell pdal where to find the class? I don't have to instantiate the class and pass it the instance?<br><br></div><div>The class lives in my GRASS executable, v.in.pdal. How do I tell pdal to append PDAL_DRIVER_PATH with v.in.pdal's path, and is that sufficient?<br><br></div><div>I see in <a href="https://github.com/PDAL/PDAL/tree/master/plugins" target="_blank">https://github.com/PDAL/PDAL/t<wbr>ree/master/plugins</a> that these are built using CMake. But GRASS uses make, so I don't know how to make these work together. Is it not possible for me simply to pass an instance of my class to some kind of pdal->registerPlugIn() function or something similar which happens at runtime?<span class="m_-1805110591558864461HOEnZb"><font color="#888888"><br></font></span></div><span class="m_-1805110591558864461HOEnZb"><font color="#888888"><div><br></div>- Paul<br><br></font></span></div><div class="m_-1805110591558864461HOEnZb"><div class="m_-1805110591558864461h5"><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jul 10, 2017 at 7:56 PM, Andrew Bell <span dir="ltr"><<a href="mailto:andrew.bell.ia@gmail.com" target="_blank">andrew.bell.ia@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">You need to build your writer as a shared plugin and make sure that the dll/so that you create is in a folder where the plugin manager will look for it (or set PDAL_DRIVER_PATH). Take a look at one of the existing plugins in the "plutgins" subdirectory of pdal. Let me know if you need more help.</div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="m_-1805110591558864461m_-2429901598987662413h5">On Mon, Jul 10, 2017 at 5:11 PM, Paul Schrum <span dir="ltr"><<a href="mailto:paul.schrum@gmail.com" target="_blank">paul.schrum@gmail.com</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="m_-1805110591558864461m_-2429901598987662413h5"><div dir="ltr"><div><div><div><div><div><div>I am developing a custom PDAL writer for my GSoC project. (<a href="https://trac.osgeo.org/grass/wiki/GSoC/2017/IntegrationOfPDALintoGRASSGIS" target="_blank">Link</a>) Source Code is on <a href="https://github.com/PaulSchrum/v_in_pdal" target="_blank">github</a>. The module compiles, but it is an intermediate state since I am in the process of developing it.<br><br></div>I have the custom writer, PdalVectorMapWriter, inheriting from writer and it compiles okay. Currently all functions just print out their own name and return.<br><br></div>In main.cpp I create the pipeline json string and create a PipelineExecutor with it. I then call pipeline-> validate. This throws an exception stating <br><br><span style="font-family:monospace,monospace">terminate called after throwing an instance of 'pdal::pdal_error'<br> what(): Couldn't create writer stage of type 'writers.PdalVectorMapWriter'.</span><br><br></div>So I am thinking that I need somehow to inform Pdal about an instance of the class. But as I go over the Pdal documentation, I do not see how to do that. Can someone help me understand what I need to do?<br><br></div>- Paul<br><br></div>Here is a key code snippet:<br><span style="font-family:monospace,monospace">81 std::string pipeline_json =<br>82 pipelineJson::basicVectorMapRe<wbr>aderWriter(inFile,outFile);<br>83<br>84 cout << pipeline_json << endl; //diagnostic only<br>85 cout << endl;<br>86 G_important_message(_("Running the pipeline ..."));<br>87 auto pipeline = new pdal::PipelineExecutor(pipelin<wbr>e_json);<br>88 <br>87 cout << "is valid? " << pipeline->validate() << endl;<br></span><br></div><div>Line 87 throws the exception.<br></div><br><br>Here is the json string being passed to the PipelineExecutor constructor:<br><div><font size="2"><span style="font-family:monospace,monospace"><br>{ "pipeline":[<br><font size="1"> "/home/user/Desktop/ALL/Source<wbr>Modules/cpp/grass7_trunk/vecto<wbr>r/v.in.pdal/testFiles/100-poin<wbr>ts.las",<br></font>{<br> "type":"writers.PdalVectorMapW<wbr>riter",<br> "filename":"100-points"<br>}<br> ]<br>}</span></font><br><br><div><div><br><br></div></div></div></div>
<br></div></div>______________________________<wbr>_________________<br>
pdal mailing list<br>
<a href="mailto:pdal@lists.osgeo.org" target="_blank">pdal@lists.osgeo.org</a><br>
<a href="https://lists.osgeo.org/mailman/listinfo/pdal" rel="noreferrer" target="_blank">https://lists.osgeo.org/mailma<wbr>n/listinfo/pdal</a><span class="m_-1805110591558864461m_-2429901598987662413HOEnZb"><font color="#888888"><br></font></span></blockquote></div><span class="m_-1805110591558864461m_-2429901598987662413HOEnZb"><font color="#888888"><br><br clear="all"><div><br></div>-- <br><div class="m_-1805110591558864461m_-2429901598987662413m_-1955143350056331847gmail_signature" data-smartmail="gmail_signature">Andrew Bell<br><a href="mailto:andrew.bell.ia@gmail.com" target="_blank">andrew.bell.ia@gmail.com</a></div>
</font></span></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br><br clear="all"><div><br></div></div></div><span class="HOEnZb"><font color="#888888">-- <br><div class="m_-1805110591558864461gmail_signature" data-smartmail="gmail_signature">Andrew Bell<br><a href="mailto:andrew.bell.ia@gmail.com" target="_blank">andrew.bell.ia@gmail.com</a></div>
</font></span></div>
</blockquote></div><br></div>