<div dir="ltr">Hi Franck,<div><br></div><div>It looks like you've been making progress, so I'll answer your questions from your second email.</div><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Question 1 : how to write myWriter.xml ?<br>
<br>
1.1. seems I must set <InputProperty command="SetInputConnection" name="Input"> in myWriter.xml. Does this means I will also have to implement myWriter::SetInputConnection ?<br></blockquote><div><br></div><div>No. Your writer will inherit from subclass of vtkAlgorithm, the class that defines "SetInputConnection", and you should not need to override it. XdmfWriter inherits from vtkDataObjectAlgorithm, which itself inherits vtkAlgorithm.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
1.2. seems I must set <StringVectorProperty name="FileName" command="SetFileName"> in myWriter.xml. Does this means I will also have to implement myWriter::SetFileName ?<br></blockquote><div><br></div><div>Yes, like vtkXdmfWriter.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Question 2 : how to implement a vtk object ? From here <a href="http://www.vtk.org/Wiki/VTK/Examples/Developers/vtkObject" rel="noreferrer" target="_blank">http://www.vtk.org/Wiki/VTK/Examples/Developers/vtkObject</a>, it seems that<br>
<br>
2.1. in myWriter.cpp, I need to have :<br>
#include "vtkObjectFactory.h" // vtkStandardNewMacro<br>
vtkStandardNewMacro ( myWriter ); // use vtkStandardNewMacro : 1 only allowed constructor, omit the copy constructor and operator=<br>
+ suppress copy constructor and operator=<br></blockquote><div><br></div><div>Yes. </div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
2.2 in myWriter.hpp, I need to derive from a vtkObject this way (like XdmfWriter.cpp does) :<br>
class myWriter : public vtkDataObjectAlgorithm {<br>
  public:<br>
    static myWriter * New (); // Needed to be plugged into paraview<br>
    vtkTypeMacro ( myWriter, vtkDataObjectAlgorithm ); // Needed to be plugged into paraview<br>
+ suppress copy constructor and operator=<br>
<br>
Am I correct ?<br></blockquote><div><br></div><div>Yes.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Question 3 : in myWriter.cpp, on which method I am supposed to be called back (to get focus back) when I click the "save data" button ? Here, how can I get data to be saved (data that I can see in paraview viewer before to click the save button - I guess this data will be a vtk*).<br></blockquote><div><br></div><div>In ParaView, when you choose, File -> Save Data, the data from the selected Pipeline Browser object will be saved. This will have some kind of data type, e.g., vtkImageData, vtkPolyData, etc. What kind of data type would you like your writer to support?</div><div><br></div><div>The data should be available in the member function myWriter::RequestData(). This is where you should write your data. </div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Finally, myWriter.xml seems OK. myWriter.*pp compile OK. Paraview finds myWriter.xml at run time (exporting PV_PLUGIN_PATH) and loads libmywriter.so without problem. I see the writer in the "save data" GUI (drop down list with different save formats). I save with myWriter, I get a (basic) GUI with file name only (no extra parameter) : I crash when I click "OK, save" with this error message :<br>
ERROR: In /.../ParaView-v4.3.1-source/ParaViewCore/ServerImplementation/Core/vtkSIProxy.cxx, line 307<br>
vtkSIWriterProxy (0x30143d0): Failed to create myWriter. Aborting for debugging purposes.<br>
<br>
vtkSIWriterProxy does this at line 303 :<br>
vtkObjectBase* obj = this->Interpreter->NewInstance(className);<br>
but obj is NULL.<br>
<br>
I get obj is NULL because I missed something in myWriter implementation : what did I miss ?<br></blockquote><div><br></div><div>Are you running pvserver separately and connecting to it with the client? If so, make sure PV_PLUGIN_PATH is defined in the environment in which pvserver is run. Have you tried to load your plugin through the Tools -> Manage Plugins... dialog?</div><div><br></div><div>I hope that helps get you further in writing your data files.</div><div><br></div><div>Thanks,</div><div>Cory</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Can somebody help ? Or even get me some clue ?<br>
<br>
FH<br>
<br>
-------- Message original --------<br>
Objet: How to plug into paraview his own writer ?<br>
Date: 2015-06-12 15:54<br>
De: houssen <<a href="mailto:houssen@imap.ipgp.fr" target="_blank">houssen@imap.ipgp.fr</a>><br>
À: <<a href="mailto:paraview@paraview.org" target="_blank">paraview@paraview.org</a>><div class="HOEnZb"><div class="h5"><br>
<br>
I followed 2 tutorials (<a href="http://www.itk.org/Wiki/ParaView/Plugin_HowTo#Writing_Plugins" rel="noreferrer" target="_blank">http://www.itk.org/Wiki/ParaView/Plugin_HowTo#Writing_Plugins</a>, <a href="http://www.kitware.com/media/html/WritingAParaViewReaderPlug-in.html" rel="noreferrer" target="_blank">http://www.kitware.com/media/html/WritingAParaViewReaderPlug-in.html</a>) but I feel like I missed some steps : this is not working.<br>
<br>
I need to "catch" data (I can see in 2D/3D paraview viewer) to write them into a specific file format. I am looking for the minimal (simplest) way to do this : the only writer input is the file name, then I would like to understand how to "get data from" paraview (from inside a vtk object I guess ?), then I just will have to do the easy part which is to write data to a specific format.<br>
<br>
My understanding is that, first I need a CMakeLists.txt like :<br>
~> more CMakeLists.txt<br>
FIND_PACKAGE ( ParaView REQUIRED )<br>
INCLUDE ( ${PARAVIEW_USE_FILE} )<br>
ADD_PARAVIEW_PLUGIN ( myWriter "1.0" SERVER_MANAGER_XML myWriter.xml<br>
SERVER_MANAGER_SOURCES myWriter.cpp )<br>
<br>
In the same directory, I need a (minimal) myWriter.xml file that looks<br>
like :<br>
~> more myWrite.xml<br>
 <ServerManagerConfiguration><br>
 <ProxyGroup name="WRITERS"><br>
 <SourceProxy name="MYWRITER" class="MYWRITER" label="my writer"><br>
 <Documentation short_help="my own writer"/><br>
 <InputProperty><br>
 <StringVectorProperty name="FileName" command="SETFILENAME" number_of_elements="1"/><br>
 </InputProperty><br>
 <Hints><br>
 <WriterFactory extensions="mw" file_description="my written file"/><br>
 </Hints><br>
 </SourceProxy><br>
 </ProxyGroup><br>
</ServerManagerConfiguration><br>
My understanding is that somehow the xml subscribes my for a specific callback I am called back on the "save data" button is cliked in the GUI.<br>
<br>
Still, in this same directory, I have myWriter.cpp and myWriter.hpp :<br>
how to implement them ?<br>
1. The myWriter class must define and implement a SetFileName method because of the <StringVectorProperty> xml tag in myWriter.xml : right ? wrong ?<br>
   This is the file name (including file path) one sets in the GUI : right ? wrong ?<br>
2. myWriter is supposed to derive from another class : which one ? where to find it ?<br>
3. How the myWriter implementation will "catch" data in paraview ? Which method to override / re-implement ?<br>
   When I am called from paraview (triggered by the click on "save data" button), I guess I am called on a specific method "myWriter::cbMethod ( vtkXXX * pDataInParaviewViewer )"<br>
  What is this method ?<br>
<br>
Also, at this step, I export PV_PLUGIN_PATH=/mnt/users/houssen/Documents/solve-rel/paraview. When I run paraview and use the "save data" button I get this :<br>
Generic Warning: In /.../Programs/ParaView/ParaView-v4.3.1-source/ParaViewCore/ServerManager/Core/vtkSMWriterFactory.cxx, line 135<br>
writers : myWriter has no input property.<br>
... But I have an <InputProperty> tag in the xml : what's wrong ?<br>
<br>
Can somebody help me on this ?<br>
<br>
Franck<br>
<br>
Note : I run Ubuntu and paraview-4.3<br>
<br>
_______________________________________________<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>
Please keep messages on-topic and check the ParaView Wiki at: <a href="http://paraview.org/Wiki/ParaView" rel="noreferrer" target="_blank">http://paraview.org/Wiki/ParaView</a><br>
<br>
Search the list archives at: <a href="http://markmail.org/search/?q=ParaView" rel="noreferrer" target="_blank">http://markmail.org/search/?q=ParaView</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/paraview" rel="noreferrer" target="_blank">http://public.kitware.com/mailman/listinfo/paraview</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Cory Quammen<br>R&D Engineer<br>Kitware, Inc.</div>
</div></div>