[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