<div dir="ltr">Hi Utkarsh,<div>thank you for sharing your code, I think the fact that you started work on something similar shows that there is indeed a need for this kind of feature. Would there be an interest in integrating this with ParaView once it has reached a certain maturity? </div><div><br></div><div>Your approach seems to be complementary to what I have implemented, it seems to me you could easily replace vtkPythonAlgo with vtkPythonClassAlgo. I think that having a single string for module.class is indeed the better solution, I went with separate parameters mostly because it was faster to implement. In particular, Py_ImportModule("foo.bar.baz") returns the module object for foo, and we will have to traverse to baz manually if we want to create an instance from a class in baz.</div><div><br></div><div>I also think that a vanilla vtkPythonAlgorithm can not meet all the needs of this feature. In my case I need for example to override processRequest on the C++ level in order to reload the module on a new request (and ideally only when the source code has changed, and only optionally).</div><div><br></div><div>The main issue going forward I can see right now involves passing parameters to Python. Right now I have a C++ method SetStringProperty(name, value) and use a <StringVectorProperty> with 2 elements. Now suppose I want to have a FileName property so that SetStringProperty("filename", value) is called when the FileName property is set to value. Do you know how to achieve this with the existing mechanisms, for example is it possible to have a StringVectorProperty with 2 elements where the first one is hidden and set to a default value? </div><div>If not, do you think it would be possible to pass the value of a StringVectorProperty through sprintf with a custom format string before calling the command? For example, so that</div><StringVectorProperty <div>  name="FileName" </div><div>  command="SetProperty" </div><div>  format="filename=%s" /></div><div>would result in the method call SetProperty("filename=foo.bar") when the FileName property is set to "foo.bar".<br><div><div><br></div></div></div><div>Best,</div><div>Bob</div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, Aug 7, 2017 at 4:36 AM Utkarsh Ayachit <<a href="mailto:utkarsh.ayachit@kitware.com">utkarsh.ayachit@kitware.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Bob,<div><br></div><div>That's pretty cool! I'll take a closer look at it next week. This seems to be in similar vein to a WIP-branch I created a little while ago but never got around to finishing it. If you're interested, here's the commit:</div><div><br></div><div><a href="https://gitlab.kitware.com/utkarsh.ayachit/paraview/commit/bfea05b0d2114f51a581f63c368cdce603932619" target="_blank">https://gitlab.kitware.com/utkarsh.ayachit/paraview/commit/bfea05b0d2114f51a581f63c368cdce603932619</a><br></div><div><br></div><div>It relies on `vtkPythonAlgorithm` (<a href="https://blog.kitware.com/vtkpythonalgorithm-is-great/" target="_blank">https://blog.kitware.com/vtkpythonalgorithm-is-great/</a>) to handle passing algorithm passes to a Python class.  The XML looks like</div><div><br></div><div><div><SourceProxy class="extras.Sphere"</div><div>                 name="PythonAlgorithm"</div><div>                 si_class="vtkSIPythonSourceProxy"></div><div></SourceProxy></div></div><div><br></div><div>Where the "class" is the Python class name indeed with extra being the module to import.</div><div><br></div><div>Utkarsh</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote"></div></div><div class="gmail_extra"><div class="gmail_quote">On Sun, Aug 6, 2017 at 5:04 PM, Bob Pepin <span dir="ltr"><<a href="mailto:bobpepin@gmail.com" target="_blank">bobpepin@gmail.com</a>></span> wrote:<br></div></div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi,<div>I developed a ParaView plugin that is similar to Programmable Filter/Source, except that the Python code is in a Python class in an external file.</div><div><br></div><div>The source code for a first (rough) version can be found on github at</div><div><a href="https://github.com/bobpepin/vtkPythonClassAlgorithm" target="_blank">https://github.com/bobpepin/vtkPythonClassAlgorithm</a><br></div><div><br></div><div>I would be thankful for feedback or suggestions (as well as contributions of course).</div><div><br></div><div>Best,</div><div>Bob</div></div>
<br></blockquote></div></div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">_______________________________________________<br>
Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Search the list archives at: <a href="http://markmail.org/search/?q=Paraview-developers" rel="noreferrer" target="_blank">http://markmail.org/search/?q=Paraview-developers</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/paraview-developers" rel="noreferrer" target="_blank">http://public.kitware.com/mailman/listinfo/paraview-developers</a><br>
<br></blockquote></div><br></div>
</blockquote></div>