[Paraview] HOWto create / extend sources?

Utkarsh Ayachit utkarsh.ayachit at kitware.com
Tue Sep 30 21:55:51 EDT 2014


Bert,

The problem is the CMakeLists.txt. The sphBoxSource needs to be added
as SERVER_MANAGER_SOURCES, not SOURCES. A a rule of thumb, if it's a
vtkObject subclass and not a Qt class, you generally want to put that
under SERVER_MANAGER_SOURCES. This ensure that it will get wrapped so
that ParaView can instantiate classes through their names defined in
the XML.

Utkarsh

On Tue, Sep 30, 2014 at 2:09 PM, B.W.H. van Beest <bwvb at xs4all.nl> wrote:
> Utkash,
>
> I followed-up on your suggestions, but apparently I am doing something
> wrong. I hope you or somebody else can point me to the solution.
>
> This is what I did.
>
> 1) new class: sphBoxSource.  I extended class vtkCubeSource with one
> data member, with corresponding get/set method. (Code below)
> 2) I added an xml-file, with the source description taken from
> source.xml (CubeSource). (Below)
> 3) I modified the CMakeList.txt accordingly.  (Below)
>
> Magically, the new source appeared in the menu. But when clicking it,
> the program crashed.
>  The error message I get is:
>
> ERROR: In
> /usr/local/git/ParaView/ParaViewCore/ServerImplementation/Core/vtkSIProxy.cxx,
> line 307
> vtkSISourceProxy (0x30289e0): Failed to create sphBoxSource. Aborting
> for debugging purposes.
>
>
> I noticed that several people running into similar problems, but so far
> I haven't been able to find the clue to the solution.
>
>
> Before showing the code, I give the result of the compilation.
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>
> chopin Plugins/SPHToolbar# make clean
> chopin Plugins/SPHToolbar# make
> [  0%] Generating Documentation HTMLs from xmls
> Processing wiki sources
> Processing wiki filters
> Processing wiki writers
> Processing wiki readers
> [ 10%] Generating qrc_sph_icons.cxx
> [ 10%] Compiling Qt help project SPHToolbar.qhp
> Building up file structure...
> Insert custom filters...
> Insert help data for filter section (1 of 1)...
> Insert files...
> Warning: The file
> /usr/local/git/ParaView/build/Examples/All/Plugins/SPHToolbar/doc/*.css
> does not exist! Skipping it.
> Warning: The file
> /usr/local/git/ParaView/build/Examples/All/Plugins/SPHToolbar/doc/*.png
> does not exist! Skipping it.
> Warning: The file
> /usr/local/git/ParaView/build/Examples/All/Plugins/SPHToolbar/doc/*.jpg
> does not exist! Skipping it.
> Insert contents...
> Insert indices...
> Documentation successfully generated.
> [ 10%] Generating SPHToolbar_doc.h
> -- Generate module: SPHToolbar
> [ 10%] Generating vtkSMXML_SPHToolbar.h
> -- Generate module: sph_sources
> [ 20%] Generating moc_SPHToolbarActions.cpp
> [ 20%] Generating moc_sphBActionCreateSource.cpp
> [ 30%] Generating moc_sphBAction.cpp
> [ 30%] Generating moc_SPHToolbarActionsImplementation.cpp
> [ 40%] Generating moc_SPHToolbar_Plugin.cpp
> Scanning dependencies of target SPHToolbar
> [ 50%] Building CXX object
> Plugins/SPHToolbar/CMakeFiles/SPHToolbar.dir/qrc_sph_icons.o
> [ 50%] Building CXX object
> Plugins/SPHToolbar/CMakeFiles/SPHToolbar.dir/moc_SPHToolbarActions.o
> [ 60%] Building CXX object
> Plugins/SPHToolbar/CMakeFiles/SPHToolbar.dir/moc_sphBActionCreateSource.o
> [ 60%] Building CXX object
> Plugins/SPHToolbar/CMakeFiles/SPHToolbar.dir/moc_sphBAction.o
> [ 60%] Building CXX object
> Plugins/SPHToolbar/CMakeFiles/SPHToolbar.dir/SPHToolbarActionsImplementation.o
> [ 70%] Building CXX object
> Plugins/SPHToolbar/CMakeFiles/SPHToolbar.dir/moc_SPHToolbarActionsImplementation.o
> [ 70%] Building CXX object
> Plugins/SPHToolbar/CMakeFiles/SPHToolbar.dir/SPHToolbarActions.o
> [ 80%] Building CXX object
> Plugins/SPHToolbar/CMakeFiles/SPHToolbar.dir/sphBActionCreateSource.o
> [ 80%] Building CXX object
> Plugins/SPHToolbar/CMakeFiles/SPHToolbar.dir/sphBActionRegionInventory.o
> [ 90%] Building CXX object
> Plugins/SPHToolbar/CMakeFiles/SPHToolbar.dir/sphBoxSource.o
> [ 90%] Building CXX object
> Plugins/SPHToolbar/CMakeFiles/SPHToolbar.dir/sphUndoStack.o
> [ 90%] Building CXX object
> Plugins/SPHToolbar/CMakeFiles/SPHToolbar.dir/sphObjectTracer.o
> [100%] Building CXX object
> Plugins/SPHToolbar/CMakeFiles/SPHToolbar.dir/SPHToolbar_Plugin.o
> [100%] Building CXX object
> Plugins/SPHToolbar/CMakeFiles/SPHToolbar.dir/moc_SPHToolbar_Plugin.o
> Linking CXX shared library
> /usr/local/git/ParaView/build/lib/libSPHToolbar.so
> [100%] Built target SPHToolbar
> chopin Plugins/SPHToolbar#
>
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>
>
>
>
>
>
>
>
>
>
> ======================================================
> Here is the new class:
>
> #include "vtkCubeSource.h"
> class sphBoxSource : public vtkCubeSource
> {
> private:
>    int _type;
>
> public:
>   static sphBoxSource *New();                                 // Monkey
> see, monkey do ??????????????
>    vtkTypeMacro(sphBoxSource,vtkCubeSource);     // Monkey see, monkey
> do ??????????????
>
> public:
>    sphBoxSource( double=1.0, double=1.0, double=1.0 );
>    ~sphBoxSource();
>
> public:
>    void setType( int );
>    int getType() const;
> };
> ============================================================
>
> XML-file "sph_sources.xml": (adapted from sources.xml)
> ============================================================
> <ServerManagerConfiguration>
>   <ProxyGroup name="sources">
>     <SourceProxy class="sphBoxSource"
>                  label="SPHBox"
>                  name="SPHBoxSource">
>       <Documentation long_help="Create a box with specified X, Y, and Z
> lengths."
>                      short_help="3D box with specified X, Y, and Z
> lengths">The
>                      Box source can be used to add a box to the 3D
> scene. The
>                      output of the Box source is polygonal data
> containing both
>                      normals and texture coordinates.</Documentation>
>       <DoubleVectorProperty animateable="1"
>                             command="SetXLength"
>                             default_values="1.0"
>                             name="XLength"
>                             number_of_elements="1"
>                             panel_visibility="default">
>         <DoubleRangeDomain min="0"
>                            name="range" />
>         <Documentation>This property specifies the length of the box in
> the X
>         direction.</Documentation>
>       </DoubleVectorProperty>
>       <DoubleVectorProperty animateable="1"
>                             command="SetYLength"
>                             default_values="1.0"
>                             name="YLength"
>                             number_of_elements="1"
>                             panel_visibility="default">
>         <DoubleRangeDomain min="0"
>                            name="range" />
>         <Documentation>This property specifies the length of the box in
> the Y
>         direction.</Documentation>
>       </DoubleVectorProperty>
>       <DoubleVectorProperty animateable="1"
>                             command="SetZLength"
>                             default_values="1.0"
>                             name="ZLength"
>                             number_of_elements="1"
>                             panel_visibility="default">
>         <DoubleRangeDomain min="0"
>                            name="range" />
>         <Documentation>This property specifies the length of the box in
> the Z
>         direction.</Documentation>
>       </DoubleVectorProperty>
>       <DoubleVectorProperty animateable="1"
>                             command="SetCenter"
>                             default_values="0.0 0.0 0.0"
>                             name="Center"
>                             number_of_elements="3"
>                             panel_visibility="default">
>         <DoubleRangeDomain name="range" />
>         <Documentation>This property specifies the center of the
>         box.</Documentation>
>       </DoubleVectorProperty>
>       <!-- End Box -->
>     </SourceProxy>
>   </ProxyGroup>
> </ServerManagerConfiguration>
> ======================================================================
>
> Finally, the CMakeList.txt reads:
> ======================================================================
>
> CMAKE_MINIMUM_REQUIRED(VERSION 2.4)
>
> IF(NOT ParaView_BINARY_DIR)
>   FIND_PACKAGE(ParaView REQUIRED)
>   INCLUDE(${PARAVIEW_USE_FILE})
> ENDIF(NOT ParaView_BINARY_DIR)
>
> IF(PARAVIEW_BUILD_QT_GUI)
>   # We need to wrap for Qt stuff such as signals/slots etc. to work
> correctly.
>   IF (PARAVIEW_QT_VERSION VERSION_GREATER "4")
>     QT5_WRAP_CPP(MOC_SRCS SPHToolbarActions.h sphBActionCreateSource.h
> sphBAction.h )
>   ELSE ()
>     QT4_WRAP_CPP(MOC_SRCS SPHToolbarActions.h sphBActionCreateSource.h
> sphBAction.h )
>   ENDIF ()
>
>   # This is a macro for adding QActionGroup subclasses automatically as
> toolbars.
>   ADD_PARAVIEW_ACTION_GROUP(IFACES IFACE_SRCS
>                             CLASS_NAME SPHToolbarActions
>                             GROUP_NAME "ToolBar/SPHToolbar")
>
>   # Now create a plugin for the toolbar. Here we pass IFACES and IFACE_SRCS
>   # which are filled up by the above macro with relevant entries
>   ADD_PARAVIEW_PLUGIN(SPHToolbar "1.0"
>                       GUI_INTERFACES ${IFACES}
>                       GUI_RESOURCES sph_icons.qrc
>                       SERVER_MANAGER_XML sph_sources.xml
>                       SOURCES ${MOC_SRCS} ${IFACE_SRCS}
>                                 SPHToolbarActions.cpp
> sphBActionCreateSource.cpp sphBActionRegionInventory.cpp
>                                 sphBoxSource.cpp
>                                 sphUndoStack.cpp sphObjectTracer.cpp )
> ENDIF(PARAVIEW_BUILD_QT_GUI)
>
> ======================================================================
>
> On 09/29/2014 02:46 PM, Utkarsh Ayachit wrote:
>>> a) How to create a new source ("MyNewSource")
>> You define the 'proxy' under the "sources" group, rather than filters.
>> It will automatically show up in the Menu. Look at sources.xml under
>> [1] to see other source proxy definitions.
>>
>>> b) How can I extend an existing source (box, sphere, etc.) with new
>>> properties and methods ("MyBox, "MySphere").
>> Similar to the filters, you basically need to write a new VTK
>> algorithm with these new methods. You can subclass the existing VTK
>> source. Looking at sources.xml, you can find out which proxy using
>> which VTK algorithm, e.g. "SphereSource" (labelled as "Sphere") uses
>> "vtkSphereSource". After adding the methods on the VTK algorithm, next
>> part is exposing those methods as properties using the XML.
>>
>> [1] https://github.com/Kitware/ParaView/tree/master/ParaViewCore/ServerManager/SMApplication/Resources
>>
>>> Any help or suggestions are greatly appreciated.
>>>
>>> Kind Regards,
>>> Bertwim
>>> _______________________________________________
>>> Powered by www.kitware.com
>>>
>>> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>>>
>>> Please keep messages on-topic and check the ParaView Wiki at: http://paraview.org/Wiki/ParaView
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://public.kitware.com/mailman/listinfo/paraview
>


More information about the ParaView mailing list