[Paraview] HOWto create / extend sources?

B.W.H. van Beest bwvb at xs4all.nl
Wed Oct 1 14:16:14 EDT 2014


Bingo! It now works precisely as expected.

Thanks!

Bertwim

On 10/01/2014 03:55 AM, Utkarsh Ayachit wrote:
> 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