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 <[email protected]> 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 > _______________________________________________ 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
