https://public.kitware.com/Wiki/api.php?action=feedcontributions&user=Aashish.chaudhary&feedformat=atomKitwarePublic - User contributions [en]2024-03-28T16:58:26ZUser contributionsMediaWiki 1.38.6https://public.kitware.com/Wiki/index.php?title=VTK/GSoC_2015&diff=57523VTK/GSoC 20152015-02-12T17:21:15Z<p>Aashish.chaudhary: /* Project Ideas */</p>
<hr />
<div>Project ideas for the Google Summer of Code 2015<br />
<br />
== Guidelines ==<br />
<br />
=== Students ===<br />
<br />
These ideas were contributed by developers and users of [http://www.vtk.org/ VTK] and [http://www.paraview.org/ ParaView]. If you wish to submit a proposal based on these ideas you should contact the community members identified below to find out more about the idea, get to know the community member that will review your proposal, and receive feedback on your ideas.<br />
<br />
The Google Summer of Code program is competitive, and accepted students will usually have thoroughly researched the technologies of their proposed project, been in frequent contact with potential mentors, and ideally have submitted a patch or two to fix bugs in their project (through Gerrit), [[VTK/Git/Develop|instructions are here]]. Kitware makes extensive use of mailing lists, and this would be your best point of initial contact to apply for any of the proposed projects. The mailing lists can be found on the project pages linked in the preceding paragraph. Please see [[GSoC proposal guidelines]] for further guidelines on writing your proposal.<br />
<br />
=== Adding Ideas ===<br />
<br />
When adding a new idea to this page, please try to include the following information:<br />
<br />
* A brief explanation of the idea<br />
* Expected results/feature additions<br />
* Any prerequisites for working on the project<br />
* Links to any further information, discussions, bug reports etc<br />
* Any special mailing lists if not the standard mailing list for VTK<br />
* Your name and email address for contact (if willing to mentor, or nominated mentor)<br />
<br />
If you are not a developer for the project concerned, please contact a developer about the idea before adding it here.<br />
<br />
== Project Ideas ==<br />
<br />
[http://www.vtk.org/ Project page], [http://www.vtk.org/VTK/help/mailing.html mailing lists], [http://open.cdash.org/index.php?project=VTK dashboard].<br />
<br />
=== Project: Templated Input Generator for VTK ===<br />
<br />
'''Brief explanation''':<br />
Build up an infrastructure that makes it trivial to bring new scientific data formats into VTK and ParaView. The infrastructure will handle the complexities of temporal support, parallel processing, composite data structures, ghost levels and the like, and provide easy to use entry points that bring data from the file or other source and populate VTK arrays.<br />
<br />
'''Expected Results:'''<br />
Code that can take an input specification and produce vtk data objects correctly and relatively efficiently.<br />
The input specification should be sufficiently abstracted from VTKs data types that users who understand the input format well won't have to understand VTK's complexities in order to use it.<br />
<br />
'''Prerequisites:'''<br />
C++, Python, or maybe Lua.<br />
<br />
'''References:'''<br />
http://www.paraview.org/Wiki/Writing_ParaView_Readers<br />
<br />
'''Mentor(s):''' dave.demarle and/or Robert Maynard and/or Andy Bauer<br />
<br />
=== Improvements to Earth and Space Science Visualization ===<br />
<br />
'''Brief explanation''': Add new capabilities to the existing VTK GeoVIS framework. Last year we have built vtkMap that can support <br />
2D visualization using OpenStreetMap and other data sources. This time we plan on adding 3D support for it. Also, we need to add support<br />
for overlay and clipping using shapefiles or other geographically references data, improved support for data types such as LAS, improve support rendering points, lines and polygons for Geovisualizations, and filters to performs clustering and classification etc are amongst few of them. <br />
<br />
'''Expected results:''': New VTK filters and mappers, few demos to showcase the new features. <br />
<br />
'''Prerequisites:''' C/C++ experience, knowledge of earth science / GIS and preferably some experience with VTK<br />
<br />
'''Mentor(s):''' Aashish Chaudhary (aashish dot chaudhary ta kitware dot com)<br />
<br />
=== CAD Model and Simulation Spline Visualization ===<br />
<br />
'''Brief explanation''': While spline curves and surfaces have been used for many years to describe CAD models, these flexible representations have often been discarded during the meshing and simulation process that is used to estimate the behavior of CAD-modeled parts in a particular environment or during a particular event. Recently, a group of techniques called IsoGeometric Analysis (IGA) has evolved in order to reduce the amount of work required to prepare simulations and to improve their accuracy. This project would develop support for arbitrary-dimensional, rational spline patches in VTK so that these simulations can be visualized properly. This may involve conversion to handle the variety of spline formats (T-Splines, NURBS, Catmull-Clark surfaces, etc.).<br />
<br />
'''Expected results:''' The result would be a new mesh representation class, a reader, and a suite of 2-3 filters for contouring, cutting, and rendering these meshes.<br />
<br />
'''Prerequisites:''' C/C++ experience, knowledge of rational splines and techniques for processing them (degree elevation, knot insertion/removal), and preferably some experience with VTK<br />
<br />
'''Mentor(s):''' David Thompson (david dot thompson ta kitware dot com) and/or Bob O'Bara (bob dot obara ta kitware dot com)<br />
<br />
=== Shared Memory Parallelism in VTK ===<br />
<br />
'''Brief explanation''': Development of multi-threaded algorithms in VTK. Multiple R&D efforts are leading the creation of an infrastructure to support next generation multi-threaded parallel algorithm development in VTK. These efforts are based on modern parallel libraries such as Intel TBB and Inria KAAPI. The main goal of this project will be the development of algorithms that leverage this infrastructure. The focus will be on upgrading existing core algorithms such as iso-surfacing, clipping, cutting, warping etc. to be parallel.<br />
<br />
'''Expected results''': A number of algorithms that execute in parallel using shared memory. Scalability of new algorithms will have to be measured and documented. Development of regression tests and examples will be also expected.<br />
<br />
'''Prerequisites''': Experience in C++ and multi-threaded code development. Understanding of core visualization algorithms and data structures. Some experience in VTK ideally but not necessary.<br />
<br />
'''Mentor''': Berk Geveci (berk dot geveci at kitware dot com)<br />
<br />
=== Project: Supporting Solid Model Geometry in VTK ===<br />
<br />
'''Brief explanation:''' Traditionally VTK has addressed the visualization needs of post-processed simulation information. Typically in these cases a tessellated mesh represents the geometric domain. This project will extend VTK's role in the simulation lifecycle by investigating approaches that will enable VTK to visualize the parametric boundary representation information used in solid modeling kernels such as CGM and OpenCASCADE, which is typical pre-processing description of the geometric domain.<br />
<br />
'''Expected results:''' A VTK module that interfaces with one or more solid modeling kernels.<br />
<br />
'''Prerequisites:''' Experience in C++, and data structures. Some experience in VTK, parametric surfaces and solid modeling kernels ideal but not necessary.<br />
<br />
'''Mentor:''' Bob O'Bara (bob dot obara at kitware dot com).<br />
<br />
=== CAD Model and Simulation Spline Visualization ===<br />
<br />
'''Brief explanation''': While spline curves and surfaces have been used for many years to describe CAD models, these flexible representations have often been discarded during the meshing and simulation process that is used to estimate the behavior of CAD-modeled parts in a particular environment or during a particular event. Recently, a group of techniques called IsoGeometric Analysis (IGA) has evolved in order to reduce the amount of work required to prepare simulations and to improve their accuracy. This project would develop support for arbitrary-dimensional, rational spline patches in VTK so that these simulations can be visualized properly. This may involve conversion to handle the variety of spline formats (T-Splines, NURBS, Catmull-Clark surfaces, etc.).<br />
<br />
'''Expected results:''' The result would be a new mesh representation class, a reader, and a suite of 2-3 filters for contouring, cutting, and rendering these meshes.<br />
<br />
'''Prerequisites:''' C/C++ experience, knowledge of rational splines and techniques for processing them (degree elevation, knot insertion/removal), and preferably some experience with VTK<br />
<br />
'''Mentor(s):''' David Thompson (david dot thompson ta kitware dot com) and/or Bob O'Bara (bob dot obara ta kitware dot com)<br />
<br />
== Half Baked Ideas ==<br />
<br />
* make concave polydata "just work" (i.e. render correctly) with minimal impact on common case speed<br />
<br />
* add on framework for keeping track of units<br />
<br />
* anything from vtk user voice http://vtk.uservoice.com/forums/31508-general, except documentation (unfortunately) since docs effort is explicitly ruled out of GSoC<br />
<br />
* anything from paraview user voice http://paraview.uservoice.com/forums/11350-general<br />
<br />
* lua wrapping, lua programmable filters<br />
<br />
* Switch android version of KiwiViewer from VES rendering to VTK rendering - Brad Davis<br />
<br />
* advanced rendering algorithms with OpenGL2 back end - Ambient occlusion, Shadows, Reflection, etc etc.<br />
<br />
* interface to high quality rendering engines</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/GSoC_2015&diff=57522VTK/GSoC 20152015-02-12T17:20:51Z<p>Aashish.chaudhary: /* Project Ideas */</p>
<hr />
<div>Project ideas for the Google Summer of Code 2015<br />
<br />
== Guidelines ==<br />
<br />
=== Students ===<br />
<br />
These ideas were contributed by developers and users of [http://www.vtk.org/ VTK] and [http://www.paraview.org/ ParaView]. If you wish to submit a proposal based on these ideas you should contact the community members identified below to find out more about the idea, get to know the community member that will review your proposal, and receive feedback on your ideas.<br />
<br />
The Google Summer of Code program is competitive, and accepted students will usually have thoroughly researched the technologies of their proposed project, been in frequent contact with potential mentors, and ideally have submitted a patch or two to fix bugs in their project (through Gerrit), [[VTK/Git/Develop|instructions are here]]. Kitware makes extensive use of mailing lists, and this would be your best point of initial contact to apply for any of the proposed projects. The mailing lists can be found on the project pages linked in the preceding paragraph. Please see [[GSoC proposal guidelines]] for further guidelines on writing your proposal.<br />
<br />
=== Adding Ideas ===<br />
<br />
When adding a new idea to this page, please try to include the following information:<br />
<br />
* A brief explanation of the idea<br />
* Expected results/feature additions<br />
* Any prerequisites for working on the project<br />
* Links to any further information, discussions, bug reports etc<br />
* Any special mailing lists if not the standard mailing list for VTK<br />
* Your name and email address for contact (if willing to mentor, or nominated mentor)<br />
<br />
If you are not a developer for the project concerned, please contact a developer about the idea before adding it here.<br />
<br />
== Project Ideas ==<br />
<br />
[http://www.vtk.org/ Project page], [http://www.vtk.org/VTK/help/mailing.html mailing lists], [http://open.cdash.org/index.php?project=VTK dashboard].<br />
<br />
=== Project: Templated Input Generator for VTK ===<br />
<br />
'''Brief explanation''':<br />
Build up an infrastructure that makes it trivial to bring new scientific data formats into VTK and ParaView. The infrastructure will handle the complexities of temporal support, parallel processing, composite data structures, ghost levels and the like, and provide easy to use entry points that bring data from the file or other source and populate VTK arrays.<br />
<br />
'''Expected Results:'''<br />
Code that can take an input specification and produce vtk data objects correctly and relatively efficiently.<br />
The input specification should be sufficiently abstracted from VTKs data types that users who understand the input format well won't have to understand VTK's complexities in order to use it.<br />
<br />
'''Prerequisites:'''<br />
C++, Python, or maybe Lua.<br />
<br />
'''References:'''<br />
http://www.paraview.org/Wiki/Writing_ParaView_Readers<br />
<br />
'''Mentor(s):''' dave.demarle and/or Robert Maynard and/or Andy Bauer<br />
<br />
=== Improvements to Earth and Space Science Visualization ===<br />
<br />
'''Brief explanation''': Add new capabilities to the existing VTK GeoVIS framework. Last year we have built vtkMap that can support <br />
2D visualization using OpenStreetMap and other data sources. This time we plan on adding 3D support for it. Also, we need to add support<br />
for overlay and clipping using shapefiles or other geographically references data, improved support for data types such as LAS, improve support rendering points, lines and polygons for Geovisualizations, and filters to performs clustering and classification etc are amongst few of them. <br />
<br />
<br />
'''Expected results:''': New VTK filters and mappers, few demos to showcase the new features. <br />
<br />
'''Prerequisites:''' C/C++ experience, knowledge of earth science / GIS and preferably some experience with VTK<br />
<br />
'''Mentor(s):''' Aashish Chaudhary (aashish dot chaudhary ta kitware dot com)<br />
<br />
<br />
=== CAD Model and Simulation Spline Visualization ===<br />
<br />
'''Brief explanation''': While spline curves and surfaces have been used for many years to describe CAD models, these flexible representations have often been discarded during the meshing and simulation process that is used to estimate the behavior of CAD-modeled parts in a particular environment or during a particular event. Recently, a group of techniques called IsoGeometric Analysis (IGA) has evolved in order to reduce the amount of work required to prepare simulations and to improve their accuracy. This project would develop support for arbitrary-dimensional, rational spline patches in VTK so that these simulations can be visualized properly. This may involve conversion to handle the variety of spline formats (T-Splines, NURBS, Catmull-Clark surfaces, etc.).<br />
<br />
'''Expected results:''' The result would be a new mesh representation class, a reader, and a suite of 2-3 filters for contouring, cutting, and rendering these meshes.<br />
<br />
'''Prerequisites:''' C/C++ experience, knowledge of rational splines and techniques for processing them (degree elevation, knot insertion/removal), and preferably some experience with VTK<br />
<br />
'''Mentor(s):''' David Thompson (david dot thompson ta kitware dot com) and/or Bob O'Bara (bob dot obara ta kitware dot com)<br />
<br />
=== Shared Memory Parallelism in VTK ===<br />
<br />
'''Brief explanation''': Development of multi-threaded algorithms in VTK. Multiple R&D efforts are leading the creation of an infrastructure to support next generation multi-threaded parallel algorithm development in VTK. These efforts are based on modern parallel libraries such as Intel TBB and Inria KAAPI. The main goal of this project will be the development of algorithms that leverage this infrastructure. The focus will be on upgrading existing core algorithms such as iso-surfacing, clipping, cutting, warping etc. to be parallel.<br />
<br />
'''Expected results''': A number of algorithms that execute in parallel using shared memory. Scalability of new algorithms will have to be measured and documented. Development of regression tests and examples will be also expected.<br />
<br />
'''Prerequisites''': Experience in C++ and multi-threaded code development. Understanding of core visualization algorithms and data structures. Some experience in VTK ideally but not necessary.<br />
<br />
'''Mentor''': Berk Geveci (berk dot geveci at kitware dot com)<br />
<br />
=== Project: Supporting Solid Model Geometry in VTK ===<br />
<br />
'''Brief explanation:''' Traditionally VTK has addressed the visualization needs of post-processed simulation information. Typically in these cases a tessellated mesh represents the geometric domain. This project will extend VTK's role in the simulation lifecycle by investigating approaches that will enable VTK to visualize the parametric boundary representation information used in solid modeling kernels such as CGM and OpenCASCADE, which is typical pre-processing description of the geometric domain.<br />
<br />
'''Expected results:''' A VTK module that interfaces with one or more solid modeling kernels.<br />
<br />
'''Prerequisites:''' Experience in C++, and data structures. Some experience in VTK, parametric surfaces and solid modeling kernels ideal but not necessary.<br />
<br />
'''Mentor:''' Bob O'Bara (bob dot obara at kitware dot com).<br />
<br />
=== CAD Model and Simulation Spline Visualization ===<br />
<br />
'''Brief explanation''': While spline curves and surfaces have been used for many years to describe CAD models, these flexible representations have often been discarded during the meshing and simulation process that is used to estimate the behavior of CAD-modeled parts in a particular environment or during a particular event. Recently, a group of techniques called IsoGeometric Analysis (IGA) has evolved in order to reduce the amount of work required to prepare simulations and to improve their accuracy. This project would develop support for arbitrary-dimensional, rational spline patches in VTK so that these simulations can be visualized properly. This may involve conversion to handle the variety of spline formats (T-Splines, NURBS, Catmull-Clark surfaces, etc.).<br />
<br />
'''Expected results:''' The result would be a new mesh representation class, a reader, and a suite of 2-3 filters for contouring, cutting, and rendering these meshes.<br />
<br />
'''Prerequisites:''' C/C++ experience, knowledge of rational splines and techniques for processing them (degree elevation, knot insertion/removal), and preferably some experience with VTK<br />
<br />
'''Mentor(s):''' David Thompson (david dot thompson ta kitware dot com) and/or Bob O'Bara (bob dot obara ta kitware dot com)<br />
<br />
== Half Baked Ideas ==<br />
<br />
* make concave polydata "just work" (i.e. render correctly) with minimal impact on common case speed<br />
<br />
* add on framework for keeping track of units<br />
<br />
* anything from vtk user voice http://vtk.uservoice.com/forums/31508-general, except documentation (unfortunately) since docs effort is explicitly ruled out of GSoC<br />
<br />
* anything from paraview user voice http://paraview.uservoice.com/forums/11350-general<br />
<br />
* lua wrapping, lua programmable filters<br />
<br />
* Switch android version of KiwiViewer from VES rendering to VTK rendering - Brad Davis<br />
<br />
* advanced rendering algorithms with OpenGL2 back end - Ambient occlusion, Shadows, Reflection, etc etc.<br />
<br />
* interface to high quality rendering engines</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=Immersive_ParaView&diff=53782Immersive ParaView2013-08-06T07:15:26Z<p>Aashish.chaudhary: </p>
<hr />
<div>=== Overview ===<br />
<br />
# Configure and build ParaView with the VR plugin enabled.<br />
# Configuring the server display specification (.pvx file).<br />
# Setup connections to input event streams.<br />
# Launch pvserver.<br />
<br />
For further reading, the following articles in [http://www.kitware.com/media/thesource.html The Kitware Source] detail the VR plugin:<br />
<br />
* [http://www.kitware.com/source/home/post/66 ParaView in Immersive Environments]<br />
* [http://www.kitware.com/source/home/post/85 Immersive ParaView Experiences at Idaho National Laboratory]<br />
<br />
== Build ParaView ==<br />
<br />
''Note: For distributed Windows environments, alternate instructions are available for building with VRPN and Microsoft MPI here: [[ParaView/VRPN with MS-MPI]]''<br />
<br />
Follow regular build instructions from http://paraview.org/Wiki/ParaView:Build_And_Install. In addition following steps needs to be performed:<br />
<br />
* Install Qt (client) and MPI (client and server) as they are ParaView dependencies. If using VRPN to generate VR input events, make sure that it is built and installed as well. <br />
* When configuring cmake enable <code> BUILD_SHARED_LIB, PARAVIEW_BUILD_QT_GUI, PARAVIEW_USE_MPI</code> and <code> PARAVIEW_BUILD_PLUGIN_VRPlugin </code>. <br />
* Enable <code> PARAVIEW_USE_VRPN </code> or <code> PARAVIEW_USE_VRUI </code> (Apple/Linux only) depending on input event source you wish to use.<br />
** If VRPN support is enabled and the library is not installed in the default paths then <code> VRPN_INCLUDE_DIR </code> and <code> VRPN_LIBRARY </code> may also need be set.<br />
<br />
== Configuring Displays ==<br />
<br />
The ParaView server is responsible for configuring displays. The display configuration is stored on a ".pvx" file.<br />
<br />
''' ParaView has no concept of units and therefore user have to make sure that the configuration values are in the same measurements units as what tracker has producing. So for example if tracker data is in meters, then everything is considered in meters, if feet then feet becomes the unit for configuration.'''<br />
<br />
=== Structure of PVX Config File ===<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" ?><br />
<pvx><br />
<Process Type="server|dataserver|renderserver"><br />
<!-- <br />
The only supported Type values are "server", "dataserver" or "renderserver".<br />
This controls which executable this configuration is applicable to.<br />
There can be multiple <Process /> elements in the same pvx file.<br />
------------------------------------------------------<br />
| Executable | Applicable Process Type |<br />
| pvserver | server, dataserver, renderserver |<br />
| pvrenderserver | server, renderserver |<br />
| pvdataserver | server, dataserver |<br />
------------------------------------------------------<br />
--><br />
<EyeSeparation Value="0.065"/> <!-- Should be specified in the configuration file--><br />
<Machine Name="hostname"<br />
Environment="DISPLAY=:0"<br />
Geometry="1920x1080+0+0"<br />
FullScreen="0"<br />
ShowBorders="0"<br />
LowerLeft="-1.0 -1.0 -1.0"<br />
LowerRight="1.0 -1.0 -1.0"<br />
UpperRight="1.0 1.0 -1.0"><br />
<!--<br />
There can be multiple <Machine> elements in a <Process> element, <br />
each one identifying the configuration for a process. <br />
All attributes are optional.<br />
Name: Hostname of the machine on which the process will run.<br />
Environment: Environment variables for the process.<br />
Geometry: Geometry of the render window for this process.<br />
Specified as "<width>x<height>+<xoffset>+<yoffset>".<br />
FullScreen: Ignore Geometry and render fullscreen.<br />
ShowBorders: Show/hide window decorations.<br />
LowerLeft|LowerRight|UpperRight: Define corners of the display in<br />
data coordinates.<br />
--><br />
</Machine><br />
</Process><br />
</pvx><br />
</source><br />
<br />
=== Example Config.pvx ===<br />
<br />
* The following example is for a six sided cave with origin at (0,0,0):<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" ?><br />
<pvx><br />
<Process Type="client" /><br />
<Process Type="server"><br />
<EyeSeparation Value="0.065"/><br />
<Machine Name="Front"<br />
Environment="DISPLAY=:0"<br />
FullScreen="1"<br />
ShowBorders="0"<br />
LowerLeft=" -1 -1 -1"<br />
LowerRight=" 1 -1 -1"<br />
UpperRight=" 1 1 -1" /><br />
<Machine Name="Right"<br />
Environment="DISPLAY=:0"<br />
FullScreen="1"<br />
ShowBorders="0"<br />
LowerLeft=" 1 -1 -1"<br />
LowerRight=" 1 -1 1"<br />
UpperRight=" 1 1 1" /><br />
<Machine Name="Left"<br />
Environment="DISPLAY=:0"<br />
FullScreen="1"<br />
ShowBorders="0"<br />
LowerLeft=" -1 -1 1"<br />
LowerRight="-1 -1 -1"<br />
UpperRight="-1 1 -1"/><br />
<Machine Name="Top"<br />
Environment="DISPLAY=:0"<br />
FullScreen="1"<br />
ShowBorders="0"<br />
LowerLeft=" -1 1 -1"<br />
LowerRight=" 1 1 -1"<br />
UpperRight=" 1 1 1"/><br />
<Machine Name="Bottom"<br />
Environment="DISPLAY=:0"<br />
FullScreen="1"<br />
ShowBorders="0"<br />
LowerLeft=" -1 -1 1"<br />
LowerRight=" 1 -1 1"<br />
UpperRight=" 1 -1 -1"/><br />
<Machine Name="Back"<br />
Environment="DISPLAY=:0"<br />
FullScreen="1"<br />
ShowBorders="0"<br />
LowerLeft=" 1 -1 1"<br />
LowerRight="-1 -1 1"<br />
UpperRight="-1 1 1"/><br />
</Process><br />
</pvx><br />
</source><br />
<br />
* A sample PVX is provided in ParaView/Documentation/cave.pvx. This can be used to play with different display configurations.<br />
<br />
=== Notes on PVX file usage ===<br />
<br />
* PVX file should be specified as the last command line argument of the server processes. <br />
* The PVX file is typically specified for all the executables configured in it. In case of data-server/render-server configuration, if you are setting up the environment for the two processes groups, then the PVX file must be passed as a command line option to both the executables: pvdataserver and pvrenderserver.<br />
* When running in parallel the file is read on all nodes; hence it must be present on all nodes.<br />
* ParaView has no concept of units.<br />
** Use tracker units as default unit for corner points values, eye separation and anything else that requires real world units.<br />
<br />
== Configure Input Connections ==<br />
<br />
This section details the specification of VRPN or VRUI connections using the ParaView VR plugin's user interface.<br />
<br />
=== Loading the VR plugin in ParaView ===<br />
# Start the ParaView application.<br />
# Load the VR plugin:<br />
## Tools >> Manage Plugins...<br />
## Select "VRPlugin", click "Load Selected".<br />
## If the "VR Panel" shown below does not appear, show it by checking View >> VR Panel. [[File:VRPanel.png|center]]<br />
<br />
<br />
=== Add a New Connection ===<br />
# Click "Add" under "VR Connections".<br />
# VRPN: [[File:VRAddVRPN.png|center]]<br />
## Select "VRPN" as the connection type.<br />
## Enter a name for the connection.<br />
## Specify the address of the VRPN server in the form "<device>@<hostname/IP>".<br />
## Add inputs by specifying their type (tracker, button, or analog), id #, and a unique identifier, then clicking the "+" icon. The identifier should be descriptive as it will be used when configuring interactions later.<br />
# VRUI: [[File:VRAddVRUI.png|center]]<br />
## Select "VRUI" as the connection type.<br />
## Enter a name for the connection.<br />
## Specify the hostname or IP address of the VRUI server.<br />
## Specify the port that the VRUI server is using.<br />
## Add inputs by specifying their type (tracker, button, or analog), id #, and a unique identifier, then clicking the "+" icon. The identifier should be descriptive as it will be used when configuring interactions later.<br />
# Click OK<br />
<br />
=== Configure Interactions ===<br />
<br />
# In the "Interactions" section of the VR Panel, configure the interation you would like to add by selecting values from the drop-down boxes. These boxes allow selection of an object, a property of that object, and an interaction style. Common combinations are:<br />
## Track styles use a RenderView object and Eye Transform Matrix property.<br />
## Grab styles use a RenderView object and Model Transform Matrix property.<br />
## Slice Position styles use a Slice object filter and "Slice Type - Origin" property.<br />
## Slice Orientation styles use a Slice filter object and "Slice Type - Normal" property.<br />
# Click "Add" once the desired style, object, and property are displayed.<br />
# A window will appear, displaying the various inputs needed by the interaction style. Select the input corresponding to each action using the connection and input name defined earlier.<br />
## Example -- Grab Style: [[File:VRStyleConfig.png|center]]<br />
# Click Ok<br />
<br />
=== Saving/Restoring VR Plugin Configurations ===<br />
<br />
The Save/Resume buttons at the bottom of the VR configuration panel can be used to write the current plugin state to a file, which can later be applied to an existing session. The file is of the format:<br />
<br />
<source lang="xml"><br />
<VRPluginState><br />
<VRConnectionManager><br />
<VRPNConnection name="vrpnConnection" address="Tracker0@localhost"><br />
<Button id="0" name="b0"/><br />
<Button id="1" name="b1"/><br />
<Button id="2" name="b2"/><br />
<Tracker id="0" name="head"/><br />
<Tracker id="1" name="wand"/><br />
<TrackerTransform value="<br />
1 0 0 0<br />
0 0 -1 1.524<br />
0 1 0 0<br />
0 0 0 1"/><br />
</VRPNConnection><br />
</VRConnectionManager><br />
<VRInteractorStyles><br />
<Style class="vtkVRTrackStyle" proxyName="RenderView1" proxy="2300" property="EyeTransformMatrix"><br />
<Tracker role="Tracker" name="vrpnConnection.head"/><br />
</Style><br />
<Style class="vtkVRGrabWorldStyle" proxyName="RenderView1" proxy="2300" property="ModelTransformMatrix"><br />
<Button role="Reset world" name="vrpnConnection.b0"/><br />
<Button role="Rotate world" name="vrpnConnection.b1"/><br />
<Button role="Translate world" name="vrpnConnection.b2"/><br />
<Tracker role="Tracker" name="vrpnConnection.wand"/><br />
</Style><br />
</VRInteractorStyles><br />
</VRPluginState><br />
</source><br />
<br />
''Note: the TrackerTransform entry is used to apply a transformation to all incoming tracker data for a given connection. It is not currently configurable through the GUI, and must be added manually if needed.''<br />
<br />
== Start monitoring events ==<br />
<br />
Ensure that the VRPN/VRUI server is running, and click "Start" to begin listening for events. The configured objects should respond to input events as specified.<br />
<br />
== Saving/Restoring Configurations ==<br />
<br />
VR configurations is written into the ParaView state file. It is recommended that the VR connections and interactions are initially configured in a clean ParaView instances, and then the state is saved. To use the configuration, load the state file with the VR configuration and setup the visualization as usual.<br />
<br />
== Example System Specific Configurations ==</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=ParaView_VR_in_4.0&diff=53781ParaView VR in 4.02013-08-06T07:14:07Z<p>Aashish.chaudhary: moved ParaView VR in 4.0 to Immersive ParaView: Clear and most common name</p>
<hr />
<div>#REDIRECT [[Immersive ParaView]]</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=Immersive_ParaView&diff=53780Immersive ParaView2013-08-06T07:14:07Z<p>Aashish.chaudhary: moved ParaView VR in 4.0 to Immersive ParaView: Clear and most common name</p>
<hr />
<div>=== Overview ===<br />
<br />
# Configure and build ParaView with the VR plugin enabled.<br />
# Configuring the server display specification (.pvx file).<br />
# Setup connections to input event streams.<br />
# Launch pvserver.<br />
<br />
For further reading, the following articles in [http://www.kitware.com/media/thesource.html The Kitware Source] detail the VR plugin:<br />
<br />
* [http://www.kitware.com/source/home/post/66 ParaView in Immersive Environments]<br />
* [http://www.kitware.com/source/home/post/85 Immersive ParaView Experiences at Idaho National Laboratory]<br />
<br />
== Build ParaView ==<br />
<br />
''Note: For distributed Windows environments, alternate instructions are available for building with VRPN and Microsoft MPI here: [[ParaView/VRPN with MS-MPI]]''<br />
<br />
Follow regular build instructions from http://paraview.org/Wiki/ParaView:Build_And_Install. In addition following steps needs to be performed:<br />
<br />
* Install Qt (client) and MPI (client and server) as they are ParaView dependencies. If using VRPN to generate VR input events, make sure that it is built and installed as well. <br />
* When configuring cmake enable <code> BUILD_SHARED_LIB, PARAVIEW_BUILD_QT_GUI, PARAVIEW_USE_MPI</code> and <code> PARAVIEW_BUILD_PLUGIN_VRPlugin </code>. <br />
* Enable <code> PARAVIEW_USE_VRPN </code> or <code> PARAVIEW_USE_VRUI </code> (Apple/Linux only) depending on input event source you wish to use.<br />
** If VRPN support is enabled and the library is not installed in the default paths then <code> VRPN_INCLUDE_DIR </code> and <code> VRPN_LIBRARY </code> may also need be set.<br />
<br />
== Configuring Displays ==<br />
<br />
The ParaView server is responsible for configuring displays. The display configuration is stored on a ".pvx" file.<br />
<br />
''' ParaView has no concept of units and therefore user have to make sure that the configuration values are in the same measurements units as what tracker has producing. So for example if tracker data is in meters, then everything is considered in meters, if feet then feet becomes the unit for configuration.'''<br />
<br />
=== Structure of PVX Config File ===<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" ?><br />
<pvx><br />
<Process Type="server|dataserver|renderserver"><br />
<!-- <br />
The only supported Type values are "server", "dataserver" or "renderserver".<br />
This controls which executable this configuration is applicable to.<br />
There can be multiple <Process /> elements in the same pvx file.<br />
------------------------------------------------------<br />
| Executable | Applicable Process Type |<br />
| pvserver | server, dataserver, renderserver |<br />
| pvrenderserver | server, renderserver |<br />
| pvdataserver | server, dataserver |<br />
------------------------------------------------------<br />
--><br />
<EyeSeparation Value="0.065"/> <!-- Should be specified in the configuration file--><br />
<Machine Name="hostname"<br />
Environment="DISPLAY=:0"<br />
Geometry="1920x1080+0+0"<br />
FullScreen="0"<br />
ShowBorders="0"<br />
LowerLeft="-1.0 -1.0 -1.0"<br />
LowerRight="1.0 -1.0 -1.0"<br />
UpperRight="1.0 1.0 -1.0"><br />
<!--<br />
There can be multiple <Machine> elements in a <Process> element, <br />
each one identifying the configuration for a process. <br />
All attributes are optional.<br />
Name: Hostname of the machine on which the process will run.<br />
Environment: Environment variables for the process.<br />
Geometry: Geometry of the render window for this process.<br />
Specified as "<width>x<height>+<xoffset>+<yoffset>".<br />
FullScreen: Ignore Geometry and render fullscreen.<br />
ShowBorders: Show/hide window decorations.<br />
LowerLeft|LowerRight|UpperRight: Define corners of the display in<br />
data coordinates.<br />
--><br />
</Machine><br />
</Process><br />
</pvx><br />
</source><br />
<br />
=== Example Config.pvx ===<br />
<br />
* The following example is for a six sided cave with origin at (0,0,0):<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" ?><br />
<pvx><br />
<Process Type="client" /><br />
<Process Type="server"><br />
<EyeSeparation Value="0.065"/><br />
<Machine Name="Front"<br />
Environment="DISPLAY=:0"<br />
FullScreen="1"<br />
ShowBorders="0"<br />
LowerLeft=" -1 -1 -1"<br />
LowerRight=" 1 -1 -1"<br />
UpperRight=" 1 1 -1" /><br />
<Machine Name="Right"<br />
Environment="DISPLAY=:0"<br />
FullScreen="1"<br />
ShowBorders="0"<br />
LowerLeft=" 1 -1 -1"<br />
LowerRight=" 1 -1 1"<br />
UpperRight=" 1 1 1" /><br />
<Machine Name="Left"<br />
Environment="DISPLAY=:0"<br />
FullScreen="1"<br />
ShowBorders="0"<br />
LowerLeft=" -1 -1 1"<br />
LowerRight="-1 -1 -1"<br />
UpperRight="-1 1 -1"/><br />
<Machine Name="Top"<br />
Environment="DISPLAY=:0"<br />
FullScreen="1"<br />
ShowBorders="0"<br />
LowerLeft=" -1 1 -1"<br />
LowerRight=" 1 1 -1"<br />
UpperRight=" 1 1 1"/><br />
<Machine Name="Bottom"<br />
Environment="DISPLAY=:0"<br />
FullScreen="1"<br />
ShowBorders="0"<br />
LowerLeft=" -1 -1 1"<br />
LowerRight=" 1 -1 1"<br />
UpperRight=" 1 -1 -1"/><br />
<Machine Name="Back"<br />
Environment="DISPLAY=:0"<br />
FullScreen="1"<br />
ShowBorders="0"<br />
LowerLeft=" 1 -1 1"<br />
LowerRight="-1 -1 1"<br />
UpperRight="-1 1 1"/><br />
</Process><br />
</pvx><br />
</source><br />
<br />
* A sample PVX is provided in ParaView/Documentation/cave.pvx. This can be used to play with different display configurations.<br />
<br />
=== Notes on PVX file usage ===<br />
<br />
* PVX file should be specified as the last command line argument of the server processes. <br />
* The PVX file is typically specified for all the executables configured in it. In case of data-server/render-server configuration, if you are setting up the environment for the two processes groups, then the PVX file must be passed as a command line option to both the executables: pvdataserver and pvrenderserver.<br />
* When running in parallel the file is read on all nodes; hence it must be present on all nodes.<br />
* ParaView has no concept of units.<br />
** Use tracker units as default unit for corner points values, eye separation and anything else that requires real world units.<br />
<br />
== Configure Input Connections ==<br />
<br />
This section details the specification of VRPN or VRUI connections using the ParaView VR plugin's user interface.<br />
<br />
=== Loading the VR plugin in ParaView ===<br />
# Start the ParaView application.<br />
# Load the VR plugin:<br />
## Tools >> Manage Plugins...<br />
## Select "VRPlugin", click "Load Selected".<br />
## If the "VR Panel" shown below does not appear, show it by checking View >> VR Panel. [[File:VRPanel.png|center]]<br />
<br />
<br />
=== Add a New Connection ===<br />
# Click "Add" under "VR Connections".<br />
# VRPN: [[File:VRAddVRPN.png|center]]<br />
## Select "VRPN" as the connection type.<br />
## Enter a name for the connection.<br />
## Specify the address of the VRPN server in the form "<device>@<hostname/IP>".<br />
## Add inputs by specifying their type (tracker, button, or analog), id #, and a unique identifier, then clicking the "+" icon. The identifier should be descriptive as it will be used when configuring interactions later.<br />
# VRUI: [[File:VRAddVRUI.png|center]]<br />
## Select "VRUI" as the connection type.<br />
## Enter a name for the connection.<br />
## Specify the hostname or IP address of the VRUI server.<br />
## Specify the port that the VRUI server is using.<br />
## Add inputs by specifying their type (tracker, button, or analog), id #, and a unique identifier, then clicking the "+" icon. The identifier should be descriptive as it will be used when configuring interactions later.<br />
# Click OK<br />
<br />
=== Configure Interactions ===<br />
<br />
# In the "Interactions" section of the VR Panel, configure the interation you would like to add by selecting values from the drop-down boxes. These boxes allow selection of an object, a property of that object, and an interaction style. Common combinations are:<br />
## Track styles use a RenderView object and Eye Transform Matrix property.<br />
## Grab styles use a RenderView object and Model Transform Matrix property.<br />
## Slice Position styles use a Slice object filter and "Slice Type - Origin" property.<br />
## Slice Orientation styles use a Slice filter object and "Slice Type - Normal" property.<br />
# Click "Add" once the desired style, object, and property are displayed.<br />
# A window will appear, displaying the various inputs needed by the interaction style. Select the input corresponding to each action using the connection and input name defined earlier.<br />
## Example -- Grab Style: [[File:VRStyleConfig.png|center]]<br />
# Click Ok<br />
<br />
=== Saving/Restoring VR Plugin Configurations ===<br />
<br />
The Save/Resume buttons at the bottom of the VR configuration panel can be used to write the current plugin state to a file, which can later be applied to an existing session. The file is of the format:<br />
<br />
<source lang="xml"><br />
<VRPluginState><br />
<VRConnectionManager><br />
<VRPNConnection name="vrpnConnection" address="Tracker0@localhost"><br />
<Button id="0" name="b0"/><br />
<Button id="1" name="b1"/><br />
<Button id="2" name="b2"/><br />
<Tracker id="0" name="head"/><br />
<Tracker id="1" name="wand"/><br />
<TrackerTransform value="<br />
1 0 0 0<br />
0 0 -1 1.524<br />
0 1 0 0<br />
0 0 0 1"/><br />
</VRPNConnection><br />
</VRConnectionManager><br />
<VRInteractorStyles><br />
<Style class="vtkVRTrackStyle" proxyName="RenderView1" proxy="2300" property="EyeTransformMatrix"><br />
<Tracker role="Tracker" name="vrpnConnection.head"/><br />
</Style><br />
<Style class="vtkVRGrabWorldStyle" proxyName="RenderView1" proxy="2300" property="ModelTransformMatrix"><br />
<Button role="Reset world" name="vrpnConnection.b0"/><br />
<Button role="Rotate world" name="vrpnConnection.b1"/><br />
<Button role="Translate world" name="vrpnConnection.b2"/><br />
<Tracker role="Tracker" name="vrpnConnection.wand"/><br />
</Style><br />
</VRInteractorStyles><br />
</VRPluginState><br />
</source><br />
<br />
''Note: the TrackerTransform entry is used to apply a transformation to all incoming tracker data for a given connection. It is not currently configurable through the GUI, and must be added manually if needed.''<br />
<br />
== Start monitoring events ==<br />
<br />
Ensure that the VRPN/VRUI server is running, and click "Start" to begin listening for events. The configured objects should respond to input events as specified.<br />
<br />
== Saving/Restoring Configurations ==<br />
<br />
VR configurations is written into the ParaView state file. It is recommended that the VR connections and interactions are initially configured in a clean ParaView instances, and then the state is saved. To use the configuration, load the state file with the VR configuration and setup the visualization as usual.</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VES/Download_And_Build_Instructions&diff=52714VES/Download And Build Instructions2013-05-15T23:25:44Z<p>Aashish.chaudhary: /* iOS instructions */</p>
<hr />
<div>== Introduction ==<br />
<br />
This page details the minimum commands required to download and build VES and the example applications. For more detailed information see the [[VES/Developers Guide|Developer's Guide]].<br />
<br />
==Checkout the source from Git==<br />
<br />
Use [http://www.git-scm.com/ Git] to checkout the VES source code with the command:<br />
<br />
$ git clone git://vtk.org/VES.git<br />
<br />
See the [[VES/Git/Download|Download Instructions]] for details.<br />
<br />
==Build with CMake==<br />
<br />
[http://cmake.org/cmake/resources/software.html CMake] is used to configure Makefiles for the build. Before building, ensure that Android and/or iOS SDKs are installed. See the [[VES/Developers Guide|Developer's Guide]] for more information.<br />
<br />
====Android instructions====<br />
<br />
The following commands will compile vtk and ves libraries for the Android. Android NDK r8b is currently supported, see [[VES/Developers Guide|Developer's Guide]].<br />
<br />
$ export ANDROID_NDK=/path/to/installed/android-ndk<br />
$ cd Apps/Android/CMakeBuild<br />
$ cmake -P configure.cmake<br />
$ cd build<br />
$ make -j4<br />
<br />
Next, build and run the KiwiViewer application. Ant version 1.8 or higher is required.<br />
<br />
$ cd Apps/Android/Kiwi<br />
$<br />
$ # if android, adb, ant, or cmake are not in your PATH, edit tools.sh to enter the correct paths<br />
$<br />
$ ./configure_cmake.sh<br />
$ ./configure_ant.sh<br />
$ ./compile.sh<br />
<br />
Use adb to confirm that your device is listed:<br />
<br />
$ adb devices<br />
<br />
Run KiwiViewer on the device:<br />
<br />
$ ./run.sh<br />
<br />
====iOS instructions====<br />
<br />
To build for iOS, read Apps/iOS/README.txt</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/GSoC_2013&diff=52047VTK/GSoC 20132013-03-29T13:51:49Z<p>Aashish.chaudhary: /* Climate and Geo-spatial data visualization in VTK */</p>
<hr />
<div>Project ideas for the Google Summer of Code 2013<br />
<br />
== Guidelines ==<br />
<br />
=== Students ===<br />
<br />
These ideas were contributed by developers and users of [http://www.vtk.org/ VTK] and [http://www.paraview.org/ ParaView]. If you wish to submit a proposal based on these ideas you should contact the community members identified below to find out more about the idea, get to know the community member that will review your proposal, and receive feedback on your ideas.<br />
<br />
The Google Summer of Code program is competitive, and accepted students will usually have thoroughly researched the technologies of their proposed project, been in frequent contact with potential mentors, and ideally have submitted a patch or two to fix bugs in their project (through Gerrit). Kitware makes extensive use of mailing lists, and this would be your best point of initial contact to apply for any of the proposed projects. The mailing lists can be found on the project pages linked in the preceding paragraph. Please see [[GSoC proposal guidelines]] for further guidelines on writing your proposal.<br />
<br />
=== Adding Ideas ===<br />
<br />
When adding a new idea to this page, please try to include the following information:<br />
<br />
* A brief explanation of the idea<br />
* Expected results/feature additions<br />
* Any prerequisites for working on the project<br />
* Links to any further information, discussions, bug reports etc<br />
* Any special mailing lists if not the standard mailing list for VTK<br />
* Your name and email address for contact (if willing to mentor, or nominated mentor)<br />
<br />
If you are not a developer for the project concerned, please contact a developer about the idea before adding it here.<br />
<br />
== Project Ideas ==<br />
<br />
[http://www.vtk.org/ Project page], [http://www.vtk.org/vtk/help/mailing.html mailing lists], [http://www.cdash.org/CDash/index.php?project=VTK dashboard].<br />
<br />
=== Project: Biochemistry Visualization ===<br />
<br />
'''Brief explanation:''' Addition of new data types, mappers and visualizations for biochemistry visualization. VTK has already been used in several open source biochemistry applications, but only has limited support for protein ribbons. This would build on previous work done in chemistry. Features such as marching cubes, GPU accelerated volume rendering and glyph mappers could be leveraged here. This could also make use of existing work in infovis and 2D charting to display numerical data associated with biochemistry and bioinformatics applications. Looking at the boundary between quantum calculations and molecular dynamics, with QMMM data and other output ideally. <br />
<br />
'''Expected results:''' Support for standard biochemical representations, advanced visualization techniques of electronic structure using volume rendering, surfaces, contours etc. <br />
<br />
'''Prerequisites:''' Experience in C++, some experience with VTK and/or OpenGL ideally, but not necessary.<br />
<br />
'''Mentor:''' Marcus Hanwell (marcus dot hanwell at kitware dot com).<br />
<br />
=== Project: Supporting a Visualization Grammar ===<br />
<br />
'''Brief explanation:''' Visualization grammars like [http://protovis.org Protovis] and the upcoming [http://trifacta.github.com/vega Vega] are new declarative techniques for rendering arbitrary visualizations by mapping data attributes to visual properties. This project would provide a baseline implementation of a visualization grammar in VTK, combining rapid prototyping of visualizations with the graphical power and OpenGL performance of VTK.<br />
<br />
'''Expected results:''' The result would be VTK classes to support a grammar such as Vega that for example supports that JSON specification completely or a significant subset. Features would include grammar mark implementations in VTK/OpenGL, data specification and mapping to VTK data objects like vtkTable, and infrastructure for custom interaction binding.<br />
<br />
'''Prerequisites:''' C++ experience required, Javascript experience a plus.<br />
<br />
'''Mentor:''' Jeff Baumes (jeff dot baumes at kitware dot com).<br />
<br />
=== Biocomputing In Situ Visualization ===<br />
<br />
'''Brief explanation:''' Biocomputing involves using computer simulations to study biological problems. Of particular interest is [[http://www.gromacs.org/ GROMACS]], a versatile package to perform molecular dynamics, i.e. simulate the Newtonian equations of motion for systems with hundreds to millions of particles. It is primarily designed for biochemical molecules like proteins, lipids and nucleic acids that have a lot of complicated bonded interactions. GROMACS is optimized to run on distributed memory clusters with recent support for GPU and SSE optimization. These GROMACS supercomputing simulations produce enormous (terabytes) file output to be analyzed post process by tools that only read the trajectory (position, velocity, and forces) or coordinate (molecular structure) information, and simply guess at the topology rather than using the simulations topology defined in GROMACS.<br />
<br />
This project would provide a baseline implementation of ParaView Catalyst for molecular in situ visualization and data analysis embedded in GROMACS based on GROMACS' computed topology and trajectory information.<br />
<br />
'''Expected results:''' The result would be ParaView Catalyst adaptors, example python scripts, and new advanced visualization techniques for GROMACS in order to enhance the biocomputing workflow.<br />
<br />
'''Prerequisites:''' C++ and python experience required, some experience with VTK and ParaView ideally, but not required.<br />
<br />
'''Mentor:''' Patrick O'Leary (patrick dot oleary at kitware dot com).<br />
<br />
=== CAD Model and Simulation Spline Visualization ===<br />
<br />
'''Brief explanation''': While spline curves and surfaces have been used for many years to describe CAD models, these flexible representations have often been discarded during the meshing and simulation process that is used to estimate the behavior of CAD-modeled parts in a particular environment or during a particular event. Recently, a group of techniques called IsoGeometric Analysis (IGA) has evolved in order to reduce the amount of work required to prepare simulations and to improve their accuracy. This project would develop support for arbitrary-dimensional, rational spline patches in VTK so that these simulations can be visualized properly. This may involve conversion to handle the variety of spline formats (T-Splines, NURBS, Catmull-Clark surfaces, etc.).<br />
<br />
'''Expected results:''' The result would be a new mesh representation class, a reader, and a suite of 2-3 filters for contouring, cutting, and rendering these meshes.<br />
<br />
'''Prerequisites:''' C/C++ experience, knowledge of rational splines and techniques for processing them (degree elevation, knot insertion/removal), and preferably some experience with VTK<br />
<br />
'''Mentor(s):''' David Thompson (david dot thompson ta kitware dot com) and/or Bob O'Bara (bob dot obara ta kitware dot com)<br />
<br />
=== Shared Memory Parallelism in VTK ===<br />
<br />
'''Brief explanation''': Development of multi-threaded algorithms in VTK. Multiple R&D efforts are leading the creation of an infrastructure to support next generation multi-threaded parallel algorithm development in VTK. These efforts are based on modern parallel libraries such as Intel TBB and Inria KAAPI. The main goal of this project will be the development of algorithms that leverage this infrastructure. The focus will be on upgrading existing core algorithms such as iso-surfacing, clipping, cutting, warping etc. to be parallel.<br />
<br />
'''Expected results''': A number of algorithms that execute in parallel using shared memory. Scalability of new algorithms will have to be measured and documented. Development of regression tests and examples will be also expected.<br />
<br />
'''Prerequisites''': Experience in C++ and multi-threaded code development. Understanding of core visualization algorithms and data structures. Some experience in VTK ideally but not necessary.<br />
<br />
'''Mentor''': Berk Geveci (berk dot geveci at kitware dot com)<br />
<br />
=== Climate and Geo-spatial data visualization in VTK ===<br />
'''Brief explanation''': Observations show that global climate is changing and poses a serious challenge for cities around the world. The goal of this project to enhance VTK to support climate and other geospatial data visualizations which will enable the visualization community to create effective and powerful geo-informatics for urban-planners, policy-makers, farmers, and all other stakeholders to assess climate change and its impact on future environmental conditions for their region. <br />
<br />
'''Expected results''': The result would be VTK classes to support interactive climate and geo-spatial data visualizations, combining data from various geospatial and climate data sources such as from NASA, NOAA, and DOE, and exporting data in convenient formats such as CSV, Shapefile, GeoTIFF, PNG, Or JPEG. Development of a prototype using new functionality will also be expected. <br />
<br />
'''Prerequisites''': C++ experience required<br />
<br />
'''Mentor''': Aashish Chaudhary (aashish dot chaudhary at kitware dot com).</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/GSoC_2013&diff=52046VTK/GSoC 20132013-03-29T13:39:43Z<p>Aashish.chaudhary: /* Shared Memory Parallelism in VTK */</p>
<hr />
<div>Project ideas for the Google Summer of Code 2013<br />
<br />
== Guidelines ==<br />
<br />
=== Students ===<br />
<br />
These ideas were contributed by developers and users of [http://www.vtk.org/ VTK] and [http://www.paraview.org/ ParaView]. If you wish to submit a proposal based on these ideas you should contact the community members identified below to find out more about the idea, get to know the community member that will review your proposal, and receive feedback on your ideas.<br />
<br />
The Google Summer of Code program is competitive, and accepted students will usually have thoroughly researched the technologies of their proposed project, been in frequent contact with potential mentors, and ideally have submitted a patch or two to fix bugs in their project (through Gerrit). Kitware makes extensive use of mailing lists, and this would be your best point of initial contact to apply for any of the proposed projects. The mailing lists can be found on the project pages linked in the preceding paragraph. Please see [[GSoC proposal guidelines]] for further guidelines on writing your proposal.<br />
<br />
=== Adding Ideas ===<br />
<br />
When adding a new idea to this page, please try to include the following information:<br />
<br />
* A brief explanation of the idea<br />
* Expected results/feature additions<br />
* Any prerequisites for working on the project<br />
* Links to any further information, discussions, bug reports etc<br />
* Any special mailing lists if not the standard mailing list for VTK<br />
* Your name and email address for contact (if willing to mentor, or nominated mentor)<br />
<br />
If you are not a developer for the project concerned, please contact a developer about the idea before adding it here.<br />
<br />
== Project Ideas ==<br />
<br />
[http://www.vtk.org/ Project page], [http://www.vtk.org/vtk/help/mailing.html mailing lists], [http://www.cdash.org/CDash/index.php?project=VTK dashboard].<br />
<br />
=== Project: Biochemistry Visualization ===<br />
<br />
'''Brief explanation:''' Addition of new data types, mappers and visualizations for biochemistry visualization. VTK has already been used in several open source biochemistry applications, but only has limited support for protein ribbons. This would build on previous work done in chemistry. Features such as marching cubes, GPU accelerated volume rendering and glyph mappers could be leveraged here. This could also make use of existing work in infovis and 2D charting to display numerical data associated with biochemistry and bioinformatics applications. Looking at the boundary between quantum calculations and molecular dynamics, with QMMM data and other output ideally. <br />
<br />
'''Expected results:''' Support for standard biochemical representations, advanced visualization techniques of electronic structure using volume rendering, surfaces, contours etc. <br />
<br />
'''Prerequisites:''' Experience in C++, some experience with VTK and/or OpenGL ideally, but not necessary.<br />
<br />
'''Mentor:''' Marcus Hanwell (marcus dot hanwell at kitware dot com).<br />
<br />
=== Project: Supporting a Visualization Grammar ===<br />
<br />
'''Brief explanation:''' Visualization grammars like [http://protovis.org Protovis] and the upcoming [http://trifacta.github.com/vega Vega] are new declarative techniques for rendering arbitrary visualizations by mapping data attributes to visual properties. This project would provide a baseline implementation of a visualization grammar in VTK, combining rapid prototyping of visualizations with the graphical power and OpenGL performance of VTK.<br />
<br />
'''Expected results:''' The result would be VTK classes to support a grammar such as Vega that for example supports that JSON specification completely or a significant subset. Features would include grammar mark implementations in VTK/OpenGL, data specification and mapping to VTK data objects like vtkTable, and infrastructure for custom interaction binding.<br />
<br />
'''Prerequisites:''' C++ experience required, Javascript experience a plus.<br />
<br />
'''Mentor:''' Jeff Baumes (jeff dot baumes at kitware dot com).<br />
<br />
=== Biocomputing In Situ Visualization ===<br />
<br />
'''Brief explanation:''' Biocomputing involves using computer simulations to study biological problems. Of particular interest is [[http://www.gromacs.org/ GROMACS]], a versatile package to perform molecular dynamics, i.e. simulate the Newtonian equations of motion for systems with hundreds to millions of particles. It is primarily designed for biochemical molecules like proteins, lipids and nucleic acids that have a lot of complicated bonded interactions. GROMACS is optimized to run on distributed memory clusters with recent support for GPU and SSE optimization. These GROMACS supercomputing simulations produce enormous (terabytes) file output to be analyzed post process by tools that only read the trajectory (position, velocity, and forces) or coordinate (molecular structure) information, and simply guess at the topology rather than using the simulations topology defined in GROMACS.<br />
<br />
This project would provide a baseline implementation of ParaView Catalyst for molecular in situ visualization and data analysis embedded in GROMACS based on GROMACS' computed topology and trajectory information.<br />
<br />
'''Expected results:''' The result would be ParaView Catalyst adaptors, example python scripts, and new advanced visualization techniques for GROMACS in order to enhance the biocomputing workflow.<br />
<br />
'''Prerequisites:''' C++ and python experience required, some experience with VTK and ParaView ideally, but not required.<br />
<br />
'''Mentor:''' Patrick O'Leary (patrick dot oleary at kitware dot com).<br />
<br />
=== CAD Model and Simulation Spline Visualization ===<br />
<br />
'''Brief explanation''': While spline curves and surfaces have been used for many years to describe CAD models, these flexible representations have often been discarded during the meshing and simulation process that is used to estimate the behavior of CAD-modeled parts in a particular environment or during a particular event. Recently, a group of techniques called IsoGeometric Analysis (IGA) has evolved in order to reduce the amount of work required to prepare simulations and to improve their accuracy. This project would develop support for arbitrary-dimensional, rational spline patches in VTK so that these simulations can be visualized properly. This may involve conversion to handle the variety of spline formats (T-Splines, NURBS, Catmull-Clark surfaces, etc.).<br />
<br />
'''Expected results:''' The result would be a new mesh representation class, a reader, and a suite of 2-3 filters for contouring, cutting, and rendering these meshes.<br />
<br />
'''Prerequisites:''' C/C++ experience, knowledge of rational splines and techniques for processing them (degree elevation, knot insertion/removal), and preferably some experience with VTK<br />
<br />
'''Mentor(s):''' David Thompson (david dot thompson ta kitware dot com) and/or Bob O'Bara (bob dot obara ta kitware dot com)<br />
<br />
=== Shared Memory Parallelism in VTK ===<br />
<br />
'''Brief explanation''': Development of multi-threaded algorithms in VTK. Multiple R&D efforts are leading the creation of an infrastructure to support next generation multi-threaded parallel algorithm development in VTK. These efforts are based on modern parallel libraries such as Intel TBB and Inria KAAPI. The main goal of this project will be the development of algorithms that leverage this infrastructure. The focus will be on upgrading existing core algorithms such as iso-surfacing, clipping, cutting, warping etc. to be parallel.<br />
<br />
'''Expected results''': A number of algorithms that execute in parallel using shared memory. Scalability of new algorithms will have to be measured and documented. Development of regression tests and examples will be also expected.<br />
<br />
'''Prerequisites''': Experience in C++ and multi-threaded code development. Understanding of core visualization algorithms and data structures. Some experience in VTK ideally but not necessary.<br />
<br />
'''Mentor''': Berk Geveci (berk dot geveci at kitware dot com)<br />
<br />
=== Climate and Geo-spatial data visualization in VTK ===<br />
'''Brief explanation''': Observations show that global climate is changing and poses serious challenge for cities around the world. The goal of this project to enhance VTK to support climate and other geospatial data visualizations which will enable community to create effective and powerful geo-informatics for urban-planners, policy-makers, farmers, and all other stakeholders to assess climate change and its impact on future environmental conditions for their region. <br />
<br />
'''Expected results''': The result would be VTK classes to support interactive climate and geo-spatial data visualizations, combining data from various geospatial and climate data sources such as from NASA, NOAA, and DOE, and exporting data in convenient formats such as CSV, Shapefile, GeoTIFF, PNG, Or JPEG. Development of a prototype using new functionality will also be expected. <br />
<br />
'''Prerequisites''': C++ experience required<br />
<br />
'''Mentor''': Aashish Chaudhary (aashish dot chaudhary at kitware dot com).</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=ParaView/Users_Guide/CAVE_Display&diff=48845ParaView/Users Guide/CAVE Display2012-09-24T14:34:08Z<p>Aashish.chaudhary: /* Process to Build, Configure and Run ParaView in VE (For ParaView 4.0 or lower) */</p>
<hr />
<div>== Introduction ==<br />
* ParaView has basic support for visualization in CAVE-like/VR or Virtual Environments (VE). <br />
<br />
* Like typical computing systems, VE's consists of peripheral displays (output) and input devices. However, unlike regular systems, VE's keep track of the physical location of their IO devices with respect to an assumed base coordinates in the physical room (room coordinates). <br />
<br />
* Typically VE's consists of multiple stereoscopic displays that are configured based on the room coordinates. These base coordinates also typically serve as the reference coordinate for tracked inputs commonly found in VE's.<br />
<br />
* VR support in ParaView includes the ability to <br />
:# Configure displays (CAVE/Tiled Walls etc) and <br />
:# The ability to configure inputs using VRPN/VRUI.<br />
<br />
* ParaView can operate in a Client / Server fashion. The VR/CAVE module leverage this by assigning different processes on the server to manage different displays. Displays are thus configured on the server side by passing a *.pvx configuration XML file during start-up.<br />
<br />
* The client acts as a central point of control. It can initiate the scene (visualization pipeline) and also relay tracked interactions to each server process managing the displays. The VR plugin on the client side enables this. Device and interaction style configurations are brought in through the ParaView state file (This will also have a GUI component in the near future).<br />
<br />
== Architecture and Design Overview ==<br />
<br />
The picture describes the data flow, control flow, synchronization and configuration aspects of ParaView designed for VE's. The 4 compartments in the picture depicts the following ideas. <br />
<br />
# We leverage the Render Server mechanism to drive the various displays in a CAVE/VE.<br />
# Devices and control signals are relayed through the client using a plugin (VRPlugin)<br />
# Rendering and inputs are synchronized using synchronous proxy mechanism inherent in Paraview (PV).<br />
# Inputs are configured at the client end and displays are configured at the server end.<br />
<br />
[[File:VRArch.png]]<br />
<br />
== Process to Build, Configure and Run ParaView in VE (For ParaView 4.0 or lower) ==<br />
[[ ParaView VR in 4.0 ]]<br />
<br />
== Process to Build, Configure and Run ParaView in VE (For ParaView 3.10 or lower) ==<br />
<br />
Enabling ParaView for VR is a five stage process.<br />
<br />
# Building ParaView with the required parameters.<br />
# Preparing the display configuration file.<br />
# Preparing the input configuration file.<br />
# Starting the server (with display config.pvx)<br />
# Starting the client (with input config.pvsm)<br />
<br />
=== Building ===<br />
<br />
Follow regular build instructions from http://paraview.org/Wiki/ParaView:Build_And_Install. In addition following steps needs to be performed<br />
<br />
* Make sure Qt and MPI are installed cause they are required for building. If using VRPN make sure it is build and installed as well. <br />
* When configuring cmake enable <code> BUILD_SHARED_LIB, PARAVIEW_BUILD_QT_GUI, PARAVIEW_USE_MPI</code> and <code> PARAVIEW_BUILD_PLUGIN_VRPlugin </code>. <br />
* On Apple and Linux platforms the Plugin uses VRUI device daemon client as its default and on Windows VRPN is the default.<br />
* If you want to enable the other simply enable <code> PARAVIEW_USE_VRPN </code> or <code> PARAVIEW_USE_VRUI </code>.<br />
* If VRPN is not found in the default paths then <code> VRPN_INCLUDE_DIR </code> and <code> VRPN_LIBRARY</code> may also need be set.<br />
<br />
=== Configuring Displays ===<br />
<br />
The PV server is responsible for configuring displays. The display configuration is stored on a *.pvx file.<br />
<br />
''' ParaView has no concept of units and therefore user have to make sure that the configuration values are in the same measurements units as what tracker has producing. So for example if tracker data is in meters, then everything is considered in meters, if feet then feet becomes the unit for configuration.'''<br />
<br />
==== Structure of PVX Config File ====<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" ?><br />
<pvx><br />
<Process Type="server|dataserver|renderserver"><br />
<!-- <br />
The only supported Type values are "server", "dataserver" or "renderserver".<br />
This controls which executable this configuration is applicable to.<br />
There can be multiple <Process /> elements in the same pvx file.<br />
------------------------------------------------------<br />
| Executable | Applicable Process Type |<br />
| pvserver | server, dataserver, renderserver |<br />
| pvrenderserver | server, renderserver |<br />
| pvdataserver | server, dataserver |<br />
------------------------------------------------------<br />
--><br />
<EyeSeparation Value="0.065"/> <!-- Should be specified in the configuration file--><br />
<Machine Name="hostname"<br />
Environment="DISPLAY=m1:0"<br />
LowerLeft="-1.0 -1.0 -1.0"<br />
LowerRight="1.0 -1.0 -1.0"<br />
UpperRight="1.0 1.0 -1.0"><br />
<!--<br />
There can be multiple <Machine> elements in a <Process> element, <br />
each one identifying the configuration for a process. <br />
All attributes are optional.<br />
name="hostname"<br />
Environment: the environment for the process.<br />
LowerLeft|LowerRight|UpperRight <br />
--><br />
</Machine><br />
</Process><br />
</pvx><br />
</source><br />
<br />
==== Example Config.pvx ====<br />
<br />
* The following example is for a six sided cave with origin at (0,0,0):<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" ?><br />
<pvx><br />
<Process Type="client" /><br />
<Process Type="server"><br />
<EyeSeparation Value="0.065"/><br />
<Machine Name="Front"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 -1 -1"<br />
LowerRight=" 1 -1 -1"<br />
UpperRight=" 1 1 -1" /><br />
<Machine Name="Right"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" 1 -1 -1"<br />
LowerRight=" 1 -1 1"<br />
UpperRight=" 1 1 1" /><br />
<Machine Name="Left"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 -1 1"<br />
LowerRight="-1 -1 -1"<br />
UpperRight="-1 1 -1"/><br />
<Machine Name="Top"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 1 -1"<br />
LowerRight=" 1 1 -1"<br />
UpperRight=" 1 1 1"/><br />
<Machine Name="Bottom"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 -1 1"<br />
LowerRight=" 1 -1 1"<br />
UpperRight=" 1 -1 -1"/><br />
<Machine Name="Back"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" 1 -1 1"<br />
LowerRight="-1 -1 1"<br />
UpperRight="-1 1 1"/><br />
</Process><br />
</pvx><br />
</source><br />
<br />
* A sample PVX is provided in ParaView/Documentation/cave.pvx. This can be used to play with different display configurations.<br />
<br />
==== Notes on PVX file usage ====<br />
<br />
* PVX file should be specified as the last command line argument for any of the server processes. <br />
* The PVX file is typically specified for all the executables whose environment is being changed using the PVX file. In case of data-server/render-server configuration, if you are setting up the environment for the two processes groups, then the PVX file must be passed as a command line option to both the executables: pvdataserver and pvrenderserver.<br />
* When running in parallel the file is read on all nodes, hence it must be present on all nodes.<br />
* ParaView has no concept of units.<br />
** Use tracker units as default unit for corner points values, eye separation and anything else that requires real world units.<br />
<br />
=== Configure Inputs ===<br />
<br />
* Configuring inputs is a two step process<br />
:# Define connections to one or more VRPN/VRUI servers.<br />
:# Mapping data coming in from the server to ParaView interactor styles.<br />
<br />
==== Device Connections ====<br />
* Connections are clients to VRPN servers and or VRUI device daemons. <br />
* Connection are defined using XML as follows.<br />
<br />
<source lang="xml"><br />
<VRConnectionManager><br />
<VRUIConnection name="travel" address="localhost" port = "8555"><br />
<Button id="0" name="1"/><br />
<Button id="1" name="2"/><br />
<Button id="2" name="3"/><br />
<Tracker id="0" name="head"/><br />
<Tracker id="1" name="wand"/><br />
</VRUIConnection><br />
<VRPNConnection name="spaceNav" address="device0@localhost"><br />
<Analog id="0" name="channels"/><br />
</VRPNConnection><br />
</VRConnectionManager><br />
</source><br />
<br />
* VRConnectionManager can define multiple connection. Each connection can of of type VRUIConnection or VRPNConnection.<br />
* Each connection has a name associated with it. Also data coming in from these connection can be given specific names.<br />
* In our example above a VRUI connection is defined and named '''''travel'''''. We also define a name to the tracking data on this connection calling it '''''head'''''. We can henceforth refer to this data using a dotted notation as follows<br />
travel.head<br />
* Like all data being read into the system can be assigned some virtual names which will be used down the line.<br />
* Following is a pictorial representation of the process.<br />
<br />
[[File:ConnectionConfiguration (1).png]]<br />
<br />
==== Interaction Styles ====<br />
* Interactor styles define certain fixed sets of interaction that we usually perform in VE's.<br />
* There are fixed number of hand-coded interaction styles.<br />
** '''vtkVRStyleTracking''' maps tracking data to a certain paraview proxy object.<br />
** '''vtkVRStyleGrabNUpdateMatrix''' takes button press and updates some transformation based on incoming tracking data.<br />
** '''vtkVRStyleGrabNTranslateSliceOrigin''' takes a button press and updates a position based on the position of the tracked input.<br />
** '''vtkVRStyleGrabNRotateSliceNormal''' takes a button press and updates a vector based on the orientation of the tracked input.<br />
* Interactor styles are specified using the following XML format.<br />
<source lang="xml"> <br />
<VRInteractorStyles><br />
<Style class="vtkVRStyleTracking" set_property="RenderView1.HeadPose"><br />
<Tracker name="travel.head"/><br />
</Style><br />
<Style class="vtkVRStyleGrabNUpdateMatrix" set_property="RenderView1.WandPose"><br />
<Tracker name="travel.wand"/><br />
<Button name="travel.1"/><br />
<MatrixProperty name="RenderView1.WandPose"/><br />
</Style><br />
<Style class="vtkVRStyleGrabNTranslateSliceOrigin" origin="CutFunction.Origin"><br />
<Button name="travel.2"/><br />
<Tracker name="travel.wand"/><br />
</Style><br />
<Style class="vtkVRStyleGrabNRotateSliceNormal" normal="CutFunction.Normal"><br />
<Button name="travel.3"/><br />
<Tracker name="travel.wand"/><br />
</Style><br />
</VRInteractorStyles><br />
</source><br />
<br />
* The following is a pictorial representation of the entire process.<br />
<br />
[[File:ParaviewVRPluginWorkflow.png]]<br />
<br />
==== Piggy-Backing the state file ====<br />
<br />
* The VRPlugin uses the state loading mechanism to read its configuration. This was just a quick and dirty way and will most probably be replaced with different method (perhaps a GUI even).<br />
* More about the state file can be found [http://paraview.org/Wiki/Advanced_State_Management here].<br />
* A state file is a representation of the visualization pipeline in PV.<br />
* So the first step before configuring the inputs is to load and create a scene in PV.<br />
* Export the corresponding state into a state file (config.pvsm). A state file has an extention *.pvsm with content as follows<br />
<br />
<source lang="xml"><br />
<ParaView><br />
<ServerManagerState version="3.11.1"><br />
.....<br />
.....<br />
</ServerManagerState><br />
<ViewManager><br />
.....<br />
</ViewManager><br />
</ParaView><br />
</source> <br />
<br />
* We extend the state file to introduce the VRConnectionManager and VRInteractorStyles tags as follows<br />
<br />
<source lang="xml"><br />
<ParaView><br />
<ServerManagerState version="3.11.1"><br />
.....<br />
.....<br />
</ServerManagerState><br />
<br />
<!-- Start Append state file ----- --><br />
<VRConnectionManager><br />
<VRUIConnection ...<br />
</VRConnectionManager><br />
<br />
<VRInteractorStyles><br />
<Style ...<br />
</VRInteractorStyles><br />
<!-- End Append state file -------- --><br />
<br />
<ViewManager><br />
.....<br />
</ViewManager><br />
</ParaView><br />
</source> <br />
<br />
* Now our state file not only contains the scene but also the device interaction configuration (config.pvsm).<br />
<br />
=== Start Server ===<br />
<br />
* On a terminal run the server (For example we want to run 6 processes each driving one display in the cave. Change the number of process according to the number of displays). <br />
# PV_ICET_WINDOW_BORDERS=1 mpiexec -np 6 ./pvserver /path/to/ConfigFile.pvx<br />
<br />
Note: PV_ICET_WINDOW_BORDERS=1 disables the full-screen mode and instead opens up a 400x400 window. Remove this environment variable to work in full-screen mode.<br />
<br />
=== Start Client ===<br />
<br />
* Open another terminal to run the client. (note: this client connects to the server which open up 6 windows according to the config given in cave.pvx). Change the stereo-type according to preference (see # ./paraview --help).<br />
# ./paraview --stereo --stereo-type=Anaglyph --server=localhost<br />
<br />
* --server=localhost connects the client to the server.<br />
<br />
* Enable the VRPlugin on the client.<br />
<br />
* Load the updated state file (config.pvsm) specifying VRPN or VRUI client connection and interaction styles.</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=ParaView/Users_Guide/CAVE_Display&diff=48844ParaView/Users Guide/CAVE Display2012-09-24T14:31:58Z<p>Aashish.chaudhary: </p>
<hr />
<div>== Introduction ==<br />
* ParaView has basic support for visualization in CAVE-like/VR or Virtual Environments (VE). <br />
<br />
* Like typical computing systems, VE's consists of peripheral displays (output) and input devices. However, unlike regular systems, VE's keep track of the physical location of their IO devices with respect to an assumed base coordinates in the physical room (room coordinates). <br />
<br />
* Typically VE's consists of multiple stereoscopic displays that are configured based on the room coordinates. These base coordinates also typically serve as the reference coordinate for tracked inputs commonly found in VE's.<br />
<br />
* VR support in ParaView includes the ability to <br />
:# Configure displays (CAVE/Tiled Walls etc) and <br />
:# The ability to configure inputs using VRPN/VRUI.<br />
<br />
* ParaView can operate in a Client / Server fashion. The VR/CAVE module leverage this by assigning different processes on the server to manage different displays. Displays are thus configured on the server side by passing a *.pvx configuration XML file during start-up.<br />
<br />
* The client acts as a central point of control. It can initiate the scene (visualization pipeline) and also relay tracked interactions to each server process managing the displays. The VR plugin on the client side enables this. Device and interaction style configurations are brought in through the ParaView state file (This will also have a GUI component in the near future).<br />
<br />
== Architecture and Design Overview ==<br />
<br />
The picture describes the data flow, control flow, synchronization and configuration aspects of ParaView designed for VE's. The 4 compartments in the picture depicts the following ideas. <br />
<br />
# We leverage the Render Server mechanism to drive the various displays in a CAVE/VE.<br />
# Devices and control signals are relayed through the client using a plugin (VRPlugin)<br />
# Rendering and inputs are synchronized using synchronous proxy mechanism inherent in Paraview (PV).<br />
# Inputs are configured at the client end and displays are configured at the server end.<br />
<br />
[[File:VRArch.png]]<br />
<br />
== Process to Build, Configure and Run ParaView in VE (For ParaView 4.0 or lower) ==<br />
<br />
<br />
== Process to Build, Configure and Run ParaView in VE (For ParaView 3.10 or lower) ==<br />
<br />
Enabling ParaView for VR is a five stage process.<br />
<br />
# Building ParaView with the required parameters.<br />
# Preparing the display configuration file.<br />
# Preparing the input configuration file.<br />
# Starting the server (with display config.pvx)<br />
# Starting the client (with input config.pvsm)<br />
<br />
=== Building ===<br />
<br />
Follow regular build instructions from http://paraview.org/Wiki/ParaView:Build_And_Install. In addition following steps needs to be performed<br />
<br />
* Make sure Qt and MPI are installed cause they are required for building. If using VRPN make sure it is build and installed as well. <br />
* When configuring cmake enable <code> BUILD_SHARED_LIB, PARAVIEW_BUILD_QT_GUI, PARAVIEW_USE_MPI</code> and <code> PARAVIEW_BUILD_PLUGIN_VRPlugin </code>. <br />
* On Apple and Linux platforms the Plugin uses VRUI device daemon client as its default and on Windows VRPN is the default.<br />
* If you want to enable the other simply enable <code> PARAVIEW_USE_VRPN </code> or <code> PARAVIEW_USE_VRUI </code>.<br />
* If VRPN is not found in the default paths then <code> VRPN_INCLUDE_DIR </code> and <code> VRPN_LIBRARY</code> may also need be set.<br />
<br />
=== Configuring Displays ===<br />
<br />
The PV server is responsible for configuring displays. The display configuration is stored on a *.pvx file.<br />
<br />
''' ParaView has no concept of units and therefore user have to make sure that the configuration values are in the same measurements units as what tracker has producing. So for example if tracker data is in meters, then everything is considered in meters, if feet then feet becomes the unit for configuration.'''<br />
<br />
==== Structure of PVX Config File ====<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" ?><br />
<pvx><br />
<Process Type="server|dataserver|renderserver"><br />
<!-- <br />
The only supported Type values are "server", "dataserver" or "renderserver".<br />
This controls which executable this configuration is applicable to.<br />
There can be multiple <Process /> elements in the same pvx file.<br />
------------------------------------------------------<br />
| Executable | Applicable Process Type |<br />
| pvserver | server, dataserver, renderserver |<br />
| pvrenderserver | server, renderserver |<br />
| pvdataserver | server, dataserver |<br />
------------------------------------------------------<br />
--><br />
<EyeSeparation Value="0.065"/> <!-- Should be specified in the configuration file--><br />
<Machine Name="hostname"<br />
Environment="DISPLAY=m1:0"<br />
LowerLeft="-1.0 -1.0 -1.0"<br />
LowerRight="1.0 -1.0 -1.0"<br />
UpperRight="1.0 1.0 -1.0"><br />
<!--<br />
There can be multiple <Machine> elements in a <Process> element, <br />
each one identifying the configuration for a process. <br />
All attributes are optional.<br />
name="hostname"<br />
Environment: the environment for the process.<br />
LowerLeft|LowerRight|UpperRight <br />
--><br />
</Machine><br />
</Process><br />
</pvx><br />
</source><br />
<br />
==== Example Config.pvx ====<br />
<br />
* The following example is for a six sided cave with origin at (0,0,0):<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" ?><br />
<pvx><br />
<Process Type="client" /><br />
<Process Type="server"><br />
<EyeSeparation Value="0.065"/><br />
<Machine Name="Front"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 -1 -1"<br />
LowerRight=" 1 -1 -1"<br />
UpperRight=" 1 1 -1" /><br />
<Machine Name="Right"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" 1 -1 -1"<br />
LowerRight=" 1 -1 1"<br />
UpperRight=" 1 1 1" /><br />
<Machine Name="Left"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 -1 1"<br />
LowerRight="-1 -1 -1"<br />
UpperRight="-1 1 -1"/><br />
<Machine Name="Top"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 1 -1"<br />
LowerRight=" 1 1 -1"<br />
UpperRight=" 1 1 1"/><br />
<Machine Name="Bottom"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 -1 1"<br />
LowerRight=" 1 -1 1"<br />
UpperRight=" 1 -1 -1"/><br />
<Machine Name="Back"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" 1 -1 1"<br />
LowerRight="-1 -1 1"<br />
UpperRight="-1 1 1"/><br />
</Process><br />
</pvx><br />
</source><br />
<br />
* A sample PVX is provided in ParaView/Documentation/cave.pvx. This can be used to play with different display configurations.<br />
<br />
==== Notes on PVX file usage ====<br />
<br />
* PVX file should be specified as the last command line argument for any of the server processes. <br />
* The PVX file is typically specified for all the executables whose environment is being changed using the PVX file. In case of data-server/render-server configuration, if you are setting up the environment for the two processes groups, then the PVX file must be passed as a command line option to both the executables: pvdataserver and pvrenderserver.<br />
* When running in parallel the file is read on all nodes, hence it must be present on all nodes.<br />
* ParaView has no concept of units.<br />
** Use tracker units as default unit for corner points values, eye separation and anything else that requires real world units.<br />
<br />
=== Configure Inputs ===<br />
<br />
* Configuring inputs is a two step process<br />
:# Define connections to one or more VRPN/VRUI servers.<br />
:# Mapping data coming in from the server to ParaView interactor styles.<br />
<br />
==== Device Connections ====<br />
* Connections are clients to VRPN servers and or VRUI device daemons. <br />
* Connection are defined using XML as follows.<br />
<br />
<source lang="xml"><br />
<VRConnectionManager><br />
<VRUIConnection name="travel" address="localhost" port = "8555"><br />
<Button id="0" name="1"/><br />
<Button id="1" name="2"/><br />
<Button id="2" name="3"/><br />
<Tracker id="0" name="head"/><br />
<Tracker id="1" name="wand"/><br />
</VRUIConnection><br />
<VRPNConnection name="spaceNav" address="device0@localhost"><br />
<Analog id="0" name="channels"/><br />
</VRPNConnection><br />
</VRConnectionManager><br />
</source><br />
<br />
* VRConnectionManager can define multiple connection. Each connection can of of type VRUIConnection or VRPNConnection.<br />
* Each connection has a name associated with it. Also data coming in from these connection can be given specific names.<br />
* In our example above a VRUI connection is defined and named '''''travel'''''. We also define a name to the tracking data on this connection calling it '''''head'''''. We can henceforth refer to this data using a dotted notation as follows<br />
travel.head<br />
* Like all data being read into the system can be assigned some virtual names which will be used down the line.<br />
* Following is a pictorial representation of the process.<br />
<br />
[[File:ConnectionConfiguration (1).png]]<br />
<br />
==== Interaction Styles ====<br />
* Interactor styles define certain fixed sets of interaction that we usually perform in VE's.<br />
* There are fixed number of hand-coded interaction styles.<br />
** '''vtkVRStyleTracking''' maps tracking data to a certain paraview proxy object.<br />
** '''vtkVRStyleGrabNUpdateMatrix''' takes button press and updates some transformation based on incoming tracking data.<br />
** '''vtkVRStyleGrabNTranslateSliceOrigin''' takes a button press and updates a position based on the position of the tracked input.<br />
** '''vtkVRStyleGrabNRotateSliceNormal''' takes a button press and updates a vector based on the orientation of the tracked input.<br />
* Interactor styles are specified using the following XML format.<br />
<source lang="xml"> <br />
<VRInteractorStyles><br />
<Style class="vtkVRStyleTracking" set_property="RenderView1.HeadPose"><br />
<Tracker name="travel.head"/><br />
</Style><br />
<Style class="vtkVRStyleGrabNUpdateMatrix" set_property="RenderView1.WandPose"><br />
<Tracker name="travel.wand"/><br />
<Button name="travel.1"/><br />
<MatrixProperty name="RenderView1.WandPose"/><br />
</Style><br />
<Style class="vtkVRStyleGrabNTranslateSliceOrigin" origin="CutFunction.Origin"><br />
<Button name="travel.2"/><br />
<Tracker name="travel.wand"/><br />
</Style><br />
<Style class="vtkVRStyleGrabNRotateSliceNormal" normal="CutFunction.Normal"><br />
<Button name="travel.3"/><br />
<Tracker name="travel.wand"/><br />
</Style><br />
</VRInteractorStyles><br />
</source><br />
<br />
* The following is a pictorial representation of the entire process.<br />
<br />
[[File:ParaviewVRPluginWorkflow.png]]<br />
<br />
==== Piggy-Backing the state file ====<br />
<br />
* The VRPlugin uses the state loading mechanism to read its configuration. This was just a quick and dirty way and will most probably be replaced with different method (perhaps a GUI even).<br />
* More about the state file can be found [http://paraview.org/Wiki/Advanced_State_Management here].<br />
* A state file is a representation of the visualization pipeline in PV.<br />
* So the first step before configuring the inputs is to load and create a scene in PV.<br />
* Export the corresponding state into a state file (config.pvsm). A state file has an extention *.pvsm with content as follows<br />
<br />
<source lang="xml"><br />
<ParaView><br />
<ServerManagerState version="3.11.1"><br />
.....<br />
.....<br />
</ServerManagerState><br />
<ViewManager><br />
.....<br />
</ViewManager><br />
</ParaView><br />
</source> <br />
<br />
* We extend the state file to introduce the VRConnectionManager and VRInteractorStyles tags as follows<br />
<br />
<source lang="xml"><br />
<ParaView><br />
<ServerManagerState version="3.11.1"><br />
.....<br />
.....<br />
</ServerManagerState><br />
<br />
<!-- Start Append state file ----- --><br />
<VRConnectionManager><br />
<VRUIConnection ...<br />
</VRConnectionManager><br />
<br />
<VRInteractorStyles><br />
<Style ...<br />
</VRInteractorStyles><br />
<!-- End Append state file -------- --><br />
<br />
<ViewManager><br />
.....<br />
</ViewManager><br />
</ParaView><br />
</source> <br />
<br />
* Now our state file not only contains the scene but also the device interaction configuration (config.pvsm).<br />
<br />
=== Start Server ===<br />
<br />
* On a terminal run the server (For example we want to run 6 processes each driving one display in the cave. Change the number of process according to the number of displays). <br />
# PV_ICET_WINDOW_BORDERS=1 mpiexec -np 6 ./pvserver /path/to/ConfigFile.pvx<br />
<br />
Note: PV_ICET_WINDOW_BORDERS=1 disables the full-screen mode and instead opens up a 400x400 window. Remove this environment variable to work in full-screen mode.<br />
<br />
=== Start Client ===<br />
<br />
* Open another terminal to run the client. (note: this client connects to the server which open up 6 windows according to the config given in cave.pvx). Change the stereo-type according to preference (see # ./paraview --help).<br />
# ./paraview --stereo --stereo-type=Anaglyph --server=localhost<br />
<br />
* --server=localhost connects the client to the server.<br />
<br />
* Enable the VRPlugin on the client.<br />
<br />
* Load the updated state file (config.pvsm) specifying VRPN or VRUI client connection and interaction styles.</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=ParaViewWeb&diff=46500ParaViewWeb2012-04-07T17:16:08Z<p>Aashish.chaudhary: </p>
<hr />
<div>ParaViewWeb visualization aims to provide a collaborative, remote web interface for 3D visualization with ParaView as a server. Moreover, this also provide a JavaScript API based on the ParaView scripting features and capabilities. Some of the web samples are rich operational clients that allow you to create remote web visualization, join sessions on existing visualizations, and provide rich, interactive user interface for building complex data processing and visualization. A demonstration server is available under the following url http://paraviewweb.kitware.com.<br />
<br />
== Documentation ==<br />
{| border="0" align="center" width="98%" valign="top" cellspacing="7" cellpadding="2"<br />
|-<br />
! width="33%"|<br />
! |<br />
! width="33%"|<br />
! |<br />
! width="33%"|<br />
|- <br />
|valign="top"|<br />
<br />
===Compile/Install===<br />
----<br />
* [[ParaViewWeb SuperBuild]]<br />
: This section explain how to install ParaViewWeb from its super build. (easy to install)<br />
<br />
* [[ParaViewWeb Building]]<br />
: This section explain each step to build the ParaViewWeb framework.<br />
<br />
* [[ParaViewWeb with Apache as front-end]]<br />
: This section explain how to setup an Apache as front end to Tomcat to use ParaViewWeb inside any Web application based on PHP, Python, Java...<br />
<br />
* [[ParaViewWeb with system tomcat package]]<br />
: This section explain how to use a system tomcat package with ParaViewWeb on headless server. (Offscreen rendering + system security setting)<br />
<br />
===Server Setup===<br />
----<br />
* [[ParaViewWeb Server setting]]<br />
: This section explain how to tune and configure your server.<br />
<br />
* [[ParaViewWeb Manta setting]]<br />
: This section explain how to configure ParaViewWeb to make it work with the ParaView Manta plugin for Ray Tracer rendering.<br />
<br />
===Plugins===<br />
----<br />
* [[ParaViewWeb Plugins]]<br />
: This section explain how to extend the available features on the client side by building Python script on the server side.<br />
<br />
|bgcolor="#CCCCCC"|<br />
|valign="top"|<br />
<br />
===JavaScript===<br />
----<br />
* [[ParaViewWeb JavaScript Introduction]]<br />
: This section explain the first step in developing a web application based on ParaViewWeb.<br />
<br />
* [[ParaViewWeb JavaScript Code sample]]<br />
: This section provides some advanced JavaScript scenari which could be used as a tutorial on how to use the JavaScript API with some advanced features.<br />
<br />
* [[ParaViewWeb JavaScript API]]<br />
: This section provides the API of the Paraview and the Renderers objects used in ParaViewWeb.<br />
<br />
* [[What is the full JavaScript API]]<br />
: The JavaScript API is not a subset of the ParaView API, it is the Python API which is accessed through JavaScript.<br />
<br />
===Tutorial===<br />
----<br />
* [[ParaViewWeb PWApp]]<br />
: Short tutorial explaining how to use the PWApp sample application.<br />
<br />
<br />
<br />
|bgcolor="#CCCCCC"|<br />
|valign="top"|<br />
<br />
===Design & Implementation===<br />
----<br />
* [[ParaViewWeb Design]]<br />
: This section explain all the components involved and provide some sequential diagram on how each component is related to each other.<br />
<br />
* [[ParaViewWeb Features]]<br />
: This section try to list all the features that have been addressed with ParaViewWeb<br />
<br />
* [[JSON-RPC Protocol]]<br />
: Describes the JSON-RPC protocol used to communicate with the WebServer and ParaViewAdapter.<br />
<br />
===Miscellaneous===<br />
----<br />
* [[ParaViewWeb image gallery]]<br />
: Set of screenshots showing ParaViewWeb in action.<br />
<br />
* [[ParaViewWeb misc JavaScript script]]<br />
<br />
* [[ParaViewWeb documents and links]]<br />
: Set of presentations made on ParaViewWeb and document talking about it.<br />
<br />
* [[ParaViewWeb/FAQ|FAQ]]<br />
: Set of common questions/answer on ParaViewWeb goal and possibility<br />
|}</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=ParaView/Users_Guide/CAVE_Display&diff=46117ParaView/Users Guide/CAVE Display2012-02-22T17:36:50Z<p>Aashish.chaudhary: /* Configuring Displays */</p>
<hr />
<div>== Introduction ==<br />
* ParaView has basic support for visualization in CAVE-like/VR or Virtual Environments (VE). <br />
<br />
* Like typical computing systems, VE's consists of peripheral displays (output) and input devices. However, unlike regular systems, VE's keep track of the physical location of their IO devices with respect to an assumed base coordinates in the physical room (room coordinates). <br />
<br />
* Typically VE's consists of multiple stereoscopic displays that are configured based on the room coordinates. These base coordinates also typically serve as the reference coordinate for tracked inputs commonly found in VE's.<br />
<br />
* VR support in ParaView includes the ability to <br />
:# Configure displays (CAVE/Tiled Walls etc) and <br />
:# The ability to configure inputs using VRPN/VRUI.<br />
<br />
* ParaView can operate in a Client / Server fashion. The VR/CAVE module leverage this by assigning different processes on the server to manage different displays. Displays are thus configured on the server side by passing a *.pvx configuration XML file during start-up.<br />
<br />
* The client acts as a central point of control. It can initiate the scene (visualization pipeline) and also relay tracked interactions to each server process managing the displays. The VR plugin on the client side enables this. Device and interaction style configurations are brought in through the ParaView state file (This will also have a GUI component in the near future).<br />
<br />
== Architecture and Design Overview ==<br />
<br />
The picture describes the data flow, control flow, synchronization and configuration aspects of ParaView designed for VE's. The 4 compartments in the picture depicts the following ideas. <br />
<br />
# We leverage the Render Server mechanism to drive the various displays in a CAVE/VE.<br />
# Devices and control signals are relayed through the client using a plugin (VRPlugin)<br />
# Rendering and inputs are synchronized using synchronous proxy mechanism inherent in Paraview (PV).<br />
# Inputs are configured at the client end and displays are configured at the server end.<br />
<br />
[[File:VRArch.png]]<br />
<br />
== Process to Build, Configure and Run ParaView in VE ==<br />
<br />
Enabling ParaView for VR is a five stage process.<br />
<br />
# Building ParaView with the required parameters.<br />
# Preparing the display configuration file.<br />
# Preparing the input configuration file.<br />
# Starting the server (with display config.pvx)<br />
# Starting the client (with input config.pvsm)<br />
<br />
=== Building ===<br />
<br />
Follow regular build instructions from http://paraview.org/Wiki/ParaView:Build_And_Install. In addition following steps needs to be performed<br />
<br />
* Make sure Qt and MPI are installed cause they are required for building. If using VRPN make sure it is build and installed as well. <br />
* When configuring cmake enable <code> BUILD_SHARED_LIB, PARAVIEW_BUILD_QT_GUI, PARAVIEW_USE_MPI</code> and <code> PARAVIEW_BUILD_PLUGIN_VRPlugin </code>. <br />
* On Apple and Linux platforms the Plugin uses VRUI device daemon client as its default and on Windows VRPN is the default.<br />
* If you want to enable the other simply enable <code> PARAVIEW_USE_VRPN </code> or <code> PARAVIEW_USE_VRUI </code>.<br />
* If VRPN is not found in the default paths then <code> VRPN_INCLUDE_DIR </code> and <code> VRPN_LIBRARY</code> may also need be set.<br />
<br />
=== Configuring Displays ===<br />
<br />
The PV server is responsible for configuring displays. The display configuration is stored on a *.pvx file.<br />
<br />
''' ParaView has no concept of units and therefore user have to make sure that the configuration values are in the same measurements units as what tracker has producing. So for example if tracker data is in meters, then everything is considered in meters, if feet then feet becomes the unit for configuration.'''<br />
<br />
==== Structure of PVX Config File ====<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" ?><br />
<pvx><br />
<Process Type="server|dataserver|renderserver"><br />
<!-- <br />
The only supported Type values are "server", "dataserver" or "renderserver".<br />
This controls which executable this configuration is applicable to.<br />
There can be multiple <Process /> elements in the same pvx file.<br />
------------------------------------------------------<br />
| Executable | Applicable Process Type |<br />
| pvserver | server, dataserver, renderserver |<br />
| pvrenderserver | server, renderserver |<br />
| pvdataserver | server, dataserver |<br />
------------------------------------------------------<br />
--><br />
<EyeSeparation Value="0.065"/> <!-- Should be specified in the configuration file--><br />
<Machine name="hostname"<br />
Environment="DISPLAY=m1:0"<br />
LowerLeft="-1.0 -1.0 -1.0"<br />
LowerRight="1.0 -1.0 -1.0"<br />
UpperRight="1.0 1.0 -1.0"><br />
<!--<br />
There can be multiple <Machine> elements in a <Process> element, <br />
each one identifying the configuration for a process. <br />
All attributes are optional.<br />
name="hostname"<br />
Environment: the environment for the process.<br />
LowerLeft|LowerRight|UpperRight <br />
--><br />
</Machine><br />
</Process><br />
</pvx><br />
</source><br />
<br />
==== Example Config.pvx ====<br />
<br />
* The following example is for a six sided cave with origin at (0,0,0):<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" ?><br />
<pvx><br />
<Process Type="client" /><br />
<Process Type="server"><br />
<EyeSeparation Value="0.065"/><br />
<Machine Name="Front"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 -1 -1"<br />
LowerRight=" 1 -1 -1"<br />
UpperRight=" 1 1 -1" /><br />
<Machine Name="Right"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" 1 -1 -1"<br />
LowerRight=" 1 -1 1"<br />
UpperRight=" 1 1 1" /><br />
<Machine Name="Left"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 -1 1"<br />
LowerRight="-1 -1 -1"<br />
UpperRight="-1 1 -1"/><br />
<Machine Name="Top"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 1 -1"<br />
LowerRight=" 1 1 -1"<br />
UpperRight=" 1 1 1"/><br />
<Machine Name="Bottom"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 -1 1"<br />
LowerRight=" 1 -1 1"<br />
UpperRight=" 1 -1 -1"/><br />
<Machine Name="Back"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" 1 -1 1"<br />
LowerRight="-1 -1 1"<br />
UpperRight="-1 1 1"/><br />
</Process><br />
</pvx><br />
</source><br />
<br />
* A sample PVX is provided in ParaView/Documentation/cave.pvx. This can be used to play with different display configurations.<br />
<br />
==== Notes on PVX file usage ====<br />
<br />
* PVX file should be specified as the last command line argument for any of the server processes. <br />
* The PVX file is typically specified for all the executables whose environment is being changed using the PVX file. In case of data-server/render-server configuration, if you are setting up the environment for the two processes groups, then the PVX file must be passed as a command line option to both the executables: pvdataserver and pvrenderserver.<br />
* When running in parallel the file is read on all nodes, hence it must be present on all nodes.<br />
* ParaView has no concept of units.<br />
** Use tracker units as default unit for corner points values, eye separation and anything else that requires real world units.<br />
<br />
=== Configure Inputs ===<br />
<br />
* Configuring inputs is a two step process<br />
:# Define connections to one or more VRPN/VRUI servers.<br />
:# Mapping data coming in from the server to ParaView interactor styles.<br />
<br />
==== Device Connections ====<br />
* Connections are clients to VRPN servers and or VRUI device daemons. <br />
* Connection are defined using XML as follows.<br />
<br />
<source lang="xml"><br />
<VRConnectionManager><br />
<VRUIConnection name="travel" address="localhost" port = "8555"><br />
<Button id="0" name="1"/><br />
<Button id="1" name="2"/><br />
<Button id="2" name="3"/><br />
<Tracker id="0" name="head"/><br />
<Tracker id="1" name="wand"/><br />
</VRUIConnection><br />
<VRPNConnection name="spaceNav" address="device0@localhost"><br />
<Analog id="0" name="channels"/><br />
</VRPNConnection><br />
</VRConnectionManager><br />
</source><br />
<br />
* VRConnectionManager can define multiple connection. Each connection can of of type VRUIConnection or VRPNConnection.<br />
* Each connection has a name associated with it. Also data coming in from these connection can be given specific names.<br />
* In our example above a VRUI connection is defined and named '''''travel'''''. We also define a name to the tracking data on this connection calling it '''''head'''''. We can henceforth refer to this data using a dotted notation as follows<br />
travel.head<br />
* Like all data being read into the system can be assigned some virtual names which will be used down the line.<br />
* Following is a pictorial representation of the process.<br />
<br />
[[File:ConnectionConfiguration (1).png]]<br />
<br />
==== Interaction Styles ====<br />
* Interactor styles define certain fixed sets of interaction that we usually perform in VE's.<br />
* There are fixed number of hand-coded interaction styles.<br />
** '''vtkVRStyleTracking''' maps tracking data to a certain paraview proxy object.<br />
** '''vtkVRStyleGrabNUpdateMatrix''' takes button press and updates some transformation based on incoming tracking data.<br />
** '''vtkVRStyleGrabNTranslateSliceOrigin''' takes a button press and updates a position based on the position of the tracked input.<br />
** '''vtkVRStyleGrabNRotateSliceNormal''' takes a button press and updates a vector based on the orientation of the tracked input.<br />
* Interactor styles are specified using the following XML format.<br />
<source lang="xml"> <br />
<VRInteractorStyles><br />
<Style class="vtkVRStyleTracking" set_property="RenderView1.HeadPose"><br />
<Tracker name="travel.head"/><br />
</Style><br />
<Style class="vtkVRStyleGrabNUpdateMatrix" set_property="RenderView1.WandPose"><br />
<Tracker name="travel.wand"/><br />
<Button name="travel.1"/><br />
<MatrixProperty name="RenderView1.WandPose"/><br />
</Style><br />
<Style class="vtkVRStyleGrabNTranslateSliceOrigin" origin="CutFunction.Origin"><br />
<Button name="travel.2"/><br />
<Tracker name="travel.wand"/><br />
</Style><br />
<Style class="vtkVRStyleGrabNRotateSliceNormal" normal="CutFunction.Normal"><br />
<Button name="travel.3"/><br />
<Tracker name="travel.wand"/><br />
</Style><br />
</VRInteractorStyles><br />
</source><br />
<br />
* The following is a pictorial representation of the entire process.<br />
<br />
[[File:ParaviewVRPluginWorkflow.png]]<br />
<br />
==== Piggy-Backing the state file ====<br />
<br />
* The VRPlugin uses the state loading mechanism to read its configuration. This was just a quick and dirty way and will most probably be replaced with different method (perhaps a GUI even).<br />
* More about the state file can be found [http://paraview.org/Wiki/Advanced_State_Management here].<br />
* A state file is a representation of the visualization pipeline in PV.<br />
* So the first step before configuring the inputs is to load and create a scene in PV.<br />
* Export the corresponding state into a state file (config.pvsm). A state file has an extention *.pvsm with content as follows<br />
<br />
<source lang="xml"><br />
<ParaView><br />
<ServerManagerState version="3.11.1"><br />
.....<br />
.....<br />
</ServerManagerState><br />
<ViewManager><br />
.....<br />
</ViewManager><br />
</ParaView><br />
</source> <br />
<br />
* We extend the state file to introduce the VRConnectionManager and VRInteractorStyles tags as follows<br />
<br />
<source lang="xml"><br />
<ParaView><br />
<ServerManagerState version="3.11.1"><br />
.....<br />
.....<br />
</ServerManagerState><br />
<br />
<!-- Start Append state file ----- --><br />
<VRConnectionManager><br />
<VRUIConnection ...<br />
</VRConnectionManager><br />
<br />
<VRInteractorStyles><br />
<Style ...<br />
</VRInteractorStyles><br />
<!-- End Append state file -------- --><br />
<br />
<ViewManager><br />
.....<br />
</ViewManager><br />
</ParaView><br />
</source> <br />
<br />
* Now our state file not only contains the scene but also the device interaction configuration (config.pvsm).<br />
<br />
=== Start Server ===<br />
<br />
* On a terminal run the server (For example we want to run 6 processes each driving one display in the cave. Change the number of process according to the number of displays). <br />
# PV_ICET_WINDOW_BORDERS=1 mpiexec -np 6 ./pvserver /path/to/ConfigFile.pvx<br />
<br />
Note: PV_ICET_WINDOW_BORDERS=1 disables the full-screen mode and instead opens up a 400x400 window. Remove this environment variable to work in full-screen mode.<br />
<br />
=== Start Client ===<br />
<br />
* Open another terminal to run the client. (note: this client connects to the server which open up 6 windows according to the config given in cave.pvx). Change the stereo-type according to preference (see # ./paraview --help).<br />
# ./paraview --stereo --stereo-type=Anaglyph --server=localhost<br />
<br />
* --server=localhost connects the client to the server.<br />
<br />
* Enable the VRPlugin on the client.<br />
<br />
* Load the updated state file (config.pvsm) specifying VRPN or VRUI client connection and interaction styles.</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=ParaView/Users_Guide/CAVE_Display&diff=46116ParaView/Users Guide/CAVE Display2012-02-22T17:33:44Z<p>Aashish.chaudhary: /* Configuring Displays */</p>
<hr />
<div>== Introduction ==<br />
* ParaView has basic support for visualization in CAVE-like/VR or Virtual Environments (VE). <br />
<br />
* Like typical computing systems, VE's consists of peripheral displays (output) and input devices. However, unlike regular systems, VE's keep track of the physical location of their IO devices with respect to an assumed base coordinates in the physical room (room coordinates). <br />
<br />
* Typically VE's consists of multiple stereoscopic displays that are configured based on the room coordinates. These base coordinates also typically serve as the reference coordinate for tracked inputs commonly found in VE's.<br />
<br />
* VR support in ParaView includes the ability to <br />
:# Configure displays (CAVE/Tiled Walls etc) and <br />
:# The ability to configure inputs using VRPN/VRUI.<br />
<br />
* ParaView can operate in a Client / Server fashion. The VR/CAVE module leverage this by assigning different processes on the server to manage different displays. Displays are thus configured on the server side by passing a *.pvx configuration XML file during start-up.<br />
<br />
* The client acts as a central point of control. It can initiate the scene (visualization pipeline) and also relay tracked interactions to each server process managing the displays. The VR plugin on the client side enables this. Device and interaction style configurations are brought in through the ParaView state file (This will also have a GUI component in the near future).<br />
<br />
== Architecture and Design Overview ==<br />
<br />
The picture describes the data flow, control flow, synchronization and configuration aspects of ParaView designed for VE's. The 4 compartments in the picture depicts the following ideas. <br />
<br />
# We leverage the Render Server mechanism to drive the various displays in a CAVE/VE.<br />
# Devices and control signals are relayed through the client using a plugin (VRPlugin)<br />
# Rendering and inputs are synchronized using synchronous proxy mechanism inherent in Paraview (PV).<br />
# Inputs are configured at the client end and displays are configured at the server end.<br />
<br />
[[File:VRArch.png]]<br />
<br />
== Process to Build, Configure and Run ParaView in VE ==<br />
<br />
Enabling ParaView for VR is a five stage process.<br />
<br />
# Building ParaView with the required parameters.<br />
# Preparing the display configuration file.<br />
# Preparing the input configuration file.<br />
# Starting the server (with display config.pvx)<br />
# Starting the client (with input config.pvsm)<br />
<br />
=== Building ===<br />
<br />
Follow regular build instructions from http://paraview.org/Wiki/ParaView:Build_And_Install. In addition following steps needs to be performed<br />
<br />
* Make sure Qt and MPI are installed cause they are required for building. If using VRPN make sure it is build and installed as well. <br />
* When configuring cmake enable <code> BUILD_SHARED_LIB, PARAVIEW_BUILD_QT_GUI, PARAVIEW_USE_MPI</code> and <code> PARAVIEW_BUILD_PLUGIN_VRPlugin </code>. <br />
* On Apple and Linux platforms the Plugin uses VRUI device daemon client as its default and on Windows VRPN is the default.<br />
* If you want to enable the other simply enable <code> PARAVIEW_USE_VRPN </code> or <code> PARAVIEW_USE_VRUI </code>.<br />
* If VRPN is not found in the default paths then <code> VRPN_INCLUDE_DIR </code> and <code> VRPN_LIBRARY</code> may also need be set.<br />
<br />
=== Configuring Displays ===<br />
<br />
The PV server is responsible for configuring displays. The display configuration is stored on a *.pvx file.<br />
<br />
''' ParaView has no concept of units and therefore user have to make sure that the configuration values are in the same measurements units as what tracker has producing. So for example if tracker data is in meters, then everything is considered in meters, if feet then feet becomes the unit for configuration.'''<br />
<br />
==== Structure of PVX Config File ====<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" ?><br />
<pvx><br />
<Process Type="server|dataserver|renderserver"><br />
<!-- <br />
The only supported Type values are "server", "dataserver" or "renderserver".<br />
This controls which executable this configuration is applicable to.<br />
There can be multiple <Process /> elements in the same pvx file.<br />
------------------------------------------------------<br />
| Executable | Applicable Process Type |<br />
| pvserver | server, dataserver, renderserver |<br />
| pvrenderserver | server, renderserver |<br />
| pvdataserver | server, dataserver |<br />
------------------------------------------------------<br />
--><br />
<EyeSeparation Value="0.065"/> <!-- Should be specified in the configuration file--><br />
<Machine name="hostname"<br />
Environment="DISPLAY=m1:0"<br />
LowerLeft="-1.0 -1.0 -1.0"<br />
LowerRight="1.0 -1.0 -1.0"<br />
UpperRight="1.0 1.0 -1.0"><br />
<!--<br />
There can be multiple <Machine> elements in a <Process> element, <br />
each one identifying the configuration for a process. <br />
All attributes are optional.<br />
name="hostname"<br />
Environment: the environment for the process.<br />
LowerLeft|LowerRight|UpperRight <br />
--><br />
</Machine><br />
</Process><br />
</pvx><br />
</source><br />
<br />
==== Example Config.pvx ====<br />
<br />
* The following example is for a six sided cave with origin at (0,0,0):<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" ?><br />
<pvx><br />
<Process Type="client" /><br />
<Process Type="server"><br />
<EyeSeparation Value="0.065"/><br />
<Machine Name="Front"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 -1 -1"<br />
LowerRight=" 1 -1 -1"<br />
UpperRight=" 1 1 -1" /><br />
<Machine Name="Right"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" 1 -1 -1"<br />
LowerRight=" 1 -1 1"<br />
UpperRight=" 1 1 1" /><br />
<Machine Name="Left"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 -1 1"<br />
LowerRight="-1 -1 -1"<br />
UpperRight="-1 1 -1"/><br />
<Machine Name="Top"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 1 -1"<br />
LowerRight=" 1 1 -1"<br />
UpperRight=" 1 1 1"/><br />
<Machine Name="Bottom"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 -1 1"<br />
LowerRight=" 1 -1 1"<br />
UpperRight=" 1 -1 -1"/><br />
<Machine Name="Back"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" 1 -1 1"<br />
LowerRight="-1 -1 1"<br />
UpperRight="-1 1 1"/><br />
</Process><br />
</pvx><br />
</source><br />
<br />
* A sample PVX is provided in ParaView/Documentation/cave.pvx. This can be used to play with different display configurations.<br />
<br />
==== Notes on PVX file usage ====<br />
<br />
* PVX file should be specified as the last command line argument for any of the server processes. <br />
* The PVX file is typically specified for all the executables whose environment is being changed using the PVX file. In case of data-server/render-server configuration, if you are setting up the environment for the two processes groups, then the PVX file must be passed as a command line option to both the executables: pvdataserver and pvrenderserver.<br />
* When running in parallel the file is read on all nodes, hence it must be present on all nodes.<br />
<br />
=== Configure Inputs ===<br />
<br />
* Configuring inputs is a two step process<br />
:# Define connections to one or more VRPN/VRUI servers.<br />
:# Mapping data coming in from the server to ParaView interactor styles.<br />
<br />
==== Device Connections ====<br />
* Connections are clients to VRPN servers and or VRUI device daemons. <br />
* Connection are defined using XML as follows.<br />
<br />
<source lang="xml"><br />
<VRConnectionManager><br />
<VRUIConnection name="travel" address="localhost" port = "8555"><br />
<Button id="0" name="1"/><br />
<Button id="1" name="2"/><br />
<Button id="2" name="3"/><br />
<Tracker id="0" name="head"/><br />
<Tracker id="1" name="wand"/><br />
</VRUIConnection><br />
<VRPNConnection name="spaceNav" address="device0@localhost"><br />
<Analog id="0" name="channels"/><br />
</VRPNConnection><br />
</VRConnectionManager><br />
</source><br />
<br />
* VRConnectionManager can define multiple connection. Each connection can of of type VRUIConnection or VRPNConnection.<br />
* Each connection has a name associated with it. Also data coming in from these connection can be given specific names.<br />
* In our example above a VRUI connection is defined and named '''''travel'''''. We also define a name to the tracking data on this connection calling it '''''head'''''. We can henceforth refer to this data using a dotted notation as follows<br />
travel.head<br />
* Like all data being read into the system can be assigned some virtual names which will be used down the line.<br />
* Following is a pictorial representation of the process.<br />
<br />
[[File:ConnectionConfiguration (1).png]]<br />
<br />
==== Interaction Styles ====<br />
* Interactor styles define certain fixed sets of interaction that we usually perform in VE's.<br />
* There are fixed number of hand-coded interaction styles.<br />
** '''vtkVRStyleTracking''' maps tracking data to a certain paraview proxy object.<br />
** '''vtkVRStyleGrabNUpdateMatrix''' takes button press and updates some transformation based on incoming tracking data.<br />
** '''vtkVRStyleGrabNTranslateSliceOrigin''' takes a button press and updates a position based on the position of the tracked input.<br />
** '''vtkVRStyleGrabNRotateSliceNormal''' takes a button press and updates a vector based on the orientation of the tracked input.<br />
* Interactor styles are specified using the following XML format.<br />
<source lang="xml"> <br />
<VRInteractorStyles><br />
<Style class="vtkVRStyleTracking" set_property="RenderView1.HeadPose"><br />
<Tracker name="travel.head"/><br />
</Style><br />
<Style class="vtkVRStyleGrabNUpdateMatrix" set_property="RenderView1.WandPose"><br />
<Tracker name="travel.wand"/><br />
<Button name="travel.1"/><br />
<MatrixProperty name="RenderView1.WandPose"/><br />
</Style><br />
<Style class="vtkVRStyleGrabNTranslateSliceOrigin" origin="CutFunction.Origin"><br />
<Button name="travel.2"/><br />
<Tracker name="travel.wand"/><br />
</Style><br />
<Style class="vtkVRStyleGrabNRotateSliceNormal" normal="CutFunction.Normal"><br />
<Button name="travel.3"/><br />
<Tracker name="travel.wand"/><br />
</Style><br />
</VRInteractorStyles><br />
</source><br />
<br />
* The following is a pictorial representation of the entire process.<br />
<br />
[[File:ParaviewVRPluginWorkflow.png]]<br />
<br />
==== Piggy-Backing the state file ====<br />
<br />
* The VRPlugin uses the state loading mechanism to read its configuration. This was just a quick and dirty way and will most probably be replaced with different method (perhaps a GUI even).<br />
* More about the state file can be found [http://paraview.org/Wiki/Advanced_State_Management here].<br />
* A state file is a representation of the visualization pipeline in PV.<br />
* So the first step before configuring the inputs is to load and create a scene in PV.<br />
* Export the corresponding state into a state file (config.pvsm). A state file has an extention *.pvsm with content as follows<br />
<br />
<source lang="xml"><br />
<ParaView><br />
<ServerManagerState version="3.11.1"><br />
.....<br />
.....<br />
</ServerManagerState><br />
<ViewManager><br />
.....<br />
</ViewManager><br />
</ParaView><br />
</source> <br />
<br />
* We extend the state file to introduce the VRConnectionManager and VRInteractorStyles tags as follows<br />
<br />
<source lang="xml"><br />
<ParaView><br />
<ServerManagerState version="3.11.1"><br />
.....<br />
.....<br />
</ServerManagerState><br />
<br />
<!-- Start Append state file ----- --><br />
<VRConnectionManager><br />
<VRUIConnection ...<br />
</VRConnectionManager><br />
<br />
<VRInteractorStyles><br />
<Style ...<br />
</VRInteractorStyles><br />
<!-- End Append state file -------- --><br />
<br />
<ViewManager><br />
.....<br />
</ViewManager><br />
</ParaView><br />
</source> <br />
<br />
* Now our state file not only contains the scene but also the device interaction configuration (config.pvsm).<br />
<br />
=== Start Server ===<br />
<br />
* On a terminal run the server (For example we want to run 6 processes each driving one display in the cave. Change the number of process according to the number of displays). <br />
# PV_ICET_WINDOW_BORDERS=1 mpiexec -np 6 ./pvserver /path/to/ConfigFile.pvx<br />
<br />
Note: PV_ICET_WINDOW_BORDERS=1 disables the full-screen mode and instead opens up a 400x400 window. Remove this environment variable to work in full-screen mode.<br />
<br />
=== Start Client ===<br />
<br />
* Open another terminal to run the client. (note: this client connects to the server which open up 6 windows according to the config given in cave.pvx). Change the stereo-type according to preference (see # ./paraview --help).<br />
# ./paraview --stereo --stereo-type=Anaglyph --server=localhost<br />
<br />
* --server=localhost connects the client to the server.<br />
<br />
* Enable the VRPlugin on the client.<br />
<br />
* Load the updated state file (config.pvsm) specifying VRPN or VRUI client connection and interaction styles.</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VES/Screenshots&diff=45608VES/Screenshots2012-02-10T16:29:37Z<p>Aashish.chaudhary: </p>
<hr />
<div>==Introduction==<br />
<br />
The following screenshots depict visualizations produced using the VES rendering library. The visualizations run on Android and iOS devices, but the screenshots are captured using the iPhone/iPad simulator.<br />
<br />
==Screenshots==<br />
<br />
<gallery widths=400px heights=400px perrow=3><br />
Image: KiwiViewer_BrainAtlas.png | The SPL-PNL brain atlas rendered in KiwiViewer<br />
Image: VES_can_with_info.png | KiwiViewer running in the iPad simulator showing one frame of a simulation. The simulation shows a block falling and crushing a can. <br />
Image: KiwiViewer_Points.png | The Robot Operating System C Turtle logo rendered using a point cloud<br />
</gallery><br />
<br />
<gallery widths=400px heights=400px perrow=3><br />
Image: Head.png | A CT image of a head. The image is displayed using three orthogonal planes. An isosurface of the skull bone is rendered with the image planes.<br />
Image: KiwiViewer_MountStHelens.png | Mount St. Helens visualization, terrain colored by elevation.<br />
Image: KiwiViewer_Knee.png | NAMIC knee atlas rendered in KiwiViewer <br />
</gallery><br />
<br />
<gallery widths=400px heights=400px perrow=3><br />
Image: iPad-Image5.png | KiwiViewer as ParaViewWebClient showing streamlines over a shuttle<br />
Image: iPad-Image2.png | Scientific visualization using VES and ParaViewWeb<br />
Image: iPad-Image1.png | Image showing contours and streamlines rendered in KiwiViewer<br />
</gallery></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VES/Screenshots&diff=45607VES/Screenshots2012-02-10T16:25:54Z<p>Aashish.chaudhary: </p>
<hr />
<div>==Introduction==<br />
<br />
The following screenshots depict visualizations produced using the VES rendering library. The visualizations run on Android and iOS devices, but the screenshots are captured using the iPhone/iPad simulator.<br />
<br />
==Screenshots==<br />
<br />
<gallery widths=400px heights=400px perrow=3><br />
Image: KiwiViewer_BrainAtlas.png | The SPL-PNL brain atlas rendered in KiwiViewer<br />
Image: VES_can_with_info.png | KiwiViewer running in the iPad simulator showing one frame of a simulation. The simulation shows a block falling and crushing a can. <br />
Image: KiwiViewer_Points.png | The Robot Operating System C Turtle logo rendered using a point cloud<br />
</gallery><br />
<br />
<gallery widths=400px heights=400px perrow=3><br />
Image: Head.png | A CT image of a head. The image is displayed using three orthogonal planes. An isosurface of the skull bone is rendered with the image planes.<br />
Image: KiwiViewer_MountStHelens.png | Mount St. Helens visualization, terrain colored by elevation.<br />
Image: KiwiViewer_Knee.png | NAMIC knee atlas rendered in KiwiViewer <br />
</gallery><br />
<br />
<gallery widths=400px heights=400px perrow=3><br />
Image: iPad-Image5.png | KiwiViewer as ParaViewWebClient showing streamlines over a shuttle<br />
Image: iPad-Image2.png | Scientific visualization using VES and ParaViewWeb<br />
Image: iPad-Image1.png | Image showing contours and streamlines using KiwiViewer as ParaViewWebClient <br />
</gallery></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=File:IPad-Image1.png&diff=45606File:IPad-Image1.png2012-02-10T16:17:33Z<p>Aashish.chaudhary: uploaded a new version of &quot;File:IPad-Image1.png&quot;</p>
<hr />
<div></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=File:IPad-Image2.png&diff=45605File:IPad-Image2.png2012-02-10T16:14:38Z<p>Aashish.chaudhary: uploaded a new version of &quot;File:IPad-Image2.png&quot;</p>
<hr />
<div></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=File:IPad-Image5.png&diff=45604File:IPad-Image5.png2012-02-10T16:14:11Z<p>Aashish.chaudhary: uploaded a new version of &quot;File:IPad-Image5.png&quot;: Reverted to version as of 16:13, 10 February 2012</p>
<hr />
<div></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=File:IPad-Image5.png&diff=45603File:IPad-Image5.png2012-02-10T16:13:34Z<p>Aashish.chaudhary: uploaded a new version of &quot;File:IPad-Image5.png&quot;: Reverted to version as of 16:12, 10 February 2012</p>
<hr />
<div></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=File:IPad-Image5.png&diff=45602File:IPad-Image5.png2012-02-10T16:13:22Z<p>Aashish.chaudhary: uploaded a new version of &quot;File:IPad-Image5.png&quot;</p>
<hr />
<div></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=File:IPad-Image5.png&diff=45601File:IPad-Image5.png2012-02-10T16:12:01Z<p>Aashish.chaudhary: uploaded a new version of &quot;File:IPad-Image5.png&quot;</p>
<hr />
<div></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=File:IPad-Image5.png&diff=45600File:IPad-Image5.png2012-02-10T16:06:01Z<p>Aashish.chaudhary: </p>
<hr />
<div></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=File:IPad-Image2.png&diff=45599File:IPad-Image2.png2012-02-10T16:05:27Z<p>Aashish.chaudhary: </p>
<hr />
<div></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=File:IPad-Image1.png&diff=45598File:IPad-Image1.png2012-02-10T16:04:50Z<p>Aashish.chaudhary: </p>
<hr />
<div></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VES/Screenshots&diff=45596VES/Screenshots2012-02-10T15:36:35Z<p>Aashish.chaudhary: </p>
<hr />
<div>==Introduction==<br />
<br />
The following screenshots depict visualizations produced using the VES rendering library. The visualizations run on Android and iOS devices, but the screenshots are captured using the iPhone/iPad simulator.<br />
<br />
==Screenshots==<br />
<br />
<gallery widths=400px heights=400px perrow=3><br />
Image: KiwiViewer_BrainAtlas.png | The SPL-PNL brain atlas rendered in KiwiViewer<br />
Image: VES_can_with_info.png | KiwiViewer running in the iPad simulator showing one frame of a simulation. The simulation shows a block falling and crushing a can. <br />
Image: KiwiViewer_Points.png | The Robot Operating System C Turtle logo rendered using a point cloud<br />
</gallery><br />
<br />
<gallery widths=400px heights=400px perrow=3><br />
Image: Head.png | A CT image of a head. The image is displayed using three orthogonal planes. An isosurface of the skull bone is rendered with the image planes.<br />
Image: KiwiViewer_MountStHelens.png | Mount St. Helens visualization, terrain colored by elevation.<br />
Image: KiwiViewer_Knee.png | NAMIC knee atlas rendered in KiwiViewer <br />
</gallery></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=ParaView/Users_Guide/CAVE_Display&diff=45262ParaView/Users Guide/CAVE Display2012-01-24T17:38:45Z<p>Aashish.chaudhary: /* Prerequisites for Compiling */</p>
<hr />
<div>== Introduction ==<br />
* ParaView has basic support for visualization in CAVE-like/VR or Virtual Environments (VE). <br />
<br />
* Like typical computing systems, VE's consists of peripheral displays (output) and input devices. However, unlike regular systems, VE's keep track of the physical location of their IO devices with respect to an assumed base coordinates in the physical room (room coordinates). <br />
<br />
* Typically VE's consists of multiple stereoscopic displays that are configured based on the room coordinates. These base coordinates also typically serve as the reference coordinate for tracked inputs commonly found in VE's.<br />
<br />
* VR support in ParaView includes the ability to configure displays (CAVE/Tiled Walls etc) and the ability to configure and use inputs from VRPN and VRUI servers.<br />
<br />
* ParaView can operate in a Client / Server fashion. The VR/CAVE module leverage this by assigning different processes on the server to manage different displays. Displays are thus configured on the server side by passing a *.pvx configuration XML file during start-up.<br />
<br />
* The client acts as a central point of control. It can initiate the scene (visualization pipeline) and also relay tracked interactions to each server process managing the displays. The VR plugin on the client side enables this. Device and interaction style configurations are brought in through the ParaView state file (This will also have a GUI component in the near future).<br />
<br />
== Prerequisites for Compiling ==<br />
<br />
Follow regular build instructions from http://paraview.org/Wiki/ParaView:Build_And_Install. In addition following steps needs to be performed<br />
<br />
* VRPN needs to be installed on the client side.<br />
<br />
* MPI needs to be installed on the server side.<br />
<br />
* Make sure to enable <code> BUILD_SHARED_LIB, PARAVIEW_USE_MPI</code> and <code> PARAVIEW_BUILD_PLUGIN_VRPlugin </code> when building for CAVE support. <br />
<br />
* Consequently, <code> VRPN_INCLUDE_DIR </code>, <code> VRPN_LIBRARY</code> and <code> VRPN_QUAT_LIBRARY</code> should also be set.<br />
<br />
==Structure of Display Config File==<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" ?><br />
<pvx><br />
<Process Type="server|dataserver|renderserver"><br />
<!-- <br />
The only supported Type values are "server", "dataserver" or "renderserver".<br />
This controls which executable this configuration is applicable to.<br />
There can be multiple <Process /> elements in the same pvx file.<br />
------------------------------------------------------<br />
| Executable | Applicable Process Type |<br />
| pvserver | server, dataserver, renderserver |<br />
| pvrenderserver | server, renderserver |<br />
| pvdataserver | server, dataserver |<br />
------------------------------------------------------<br />
--><br />
<Machine name="hostname"<br />
Environment="DISPLAY=m1:0"<br />
LowerLeft="-1.0 -1.0 -1.0"<br />
LowerRight="1.0 -1.0 -1.0"<br />
UpperRight="1.0 1.0 -1.0"><br />
<!--<br />
There can be multiple <Machine> elements in a <Process> element, <br />
each one identifying the configuration for a process. <br />
All attributes are optional.<br />
name="hostname"<br />
Environment: the environment for the process.<br />
LowerLeft|LowerRight|UpperRight <br />
--><br />
</Machine><br />
</Process><br />
</pvx><br />
</source><br />
<br />
=== Example Config ===<br />
* The following example is for a six sided cave with origin at (0,0,0):<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" ?><br />
<pvx><br />
<Process Type="client" /><br />
<Process Type="server"><br />
<Machine Name="Front"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 -1 -1"<br />
LowerRight=" 1 -1 -1"<br />
UpperRight=" 1 1 -1" /><br />
<Machine Name="Right"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" 1 -1 -1"<br />
LowerRight=" 1 -1 1"<br />
UpperRight=" 1 1 1" /><br />
<Machine Name="Left"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 -1 1"<br />
LowerRight="-1 -1 -1"<br />
UpperRight="-1 1 -1"/><br />
<Machine Name="Top"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 1 -1"<br />
LowerRight=" 1 1 -1"<br />
UpperRight=" 1 1 1"/><br />
<Machine Name="Bottom"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" -1 -1 1"<br />
LowerRight=" 1 -1 1"<br />
UpperRight=" 1 -1 -1"/><br />
<Machine Name="Back"<br />
Environment="DISPLAY=:0"<br />
LowerLeft=" 1 -1 1"<br />
LowerRight="-1 -1 1"<br />
UpperRight="-1 1 1"/><br />
</Process><br />
</pvx><br />
</source><br />
<br />
* A sample PVX is provided in ParaView/Documentation/cave.pvx. This can be used to play with different display configurations.<br />
<br />
=== Things to Keep in Mind ===<br />
* PVX file should be specified as the last command line argument for any of the server processes. <br />
* The PVX file is typically specified for all the executables whose environment is being changed using the PVX file. In case of data-server/render-server configuration, if you are setting up the environment for the two processes groups, then the PVX file must be passed as a command line option to both the executables: pvdataserver and pvrenderserver.<br />
* When running in parallel the file is read on all nodes, hence it must be present on all nodes.<br />
<br />
== Basic Steps for a Successful Setup ==<br />
* On a terminal run the server (6 processes each driving one display in the cave. Change the number of process according to the number of displays). <br />
# PV_ICET_WINDOW_BORDERS=1 mpiexec -np 6 ./pvserver /path/to/ConfigFile.pvx<br />
<br />
Note: PV_ICET_WINDOW_BORDERS=1 disables the full-screen mode and instead opens up a 400x400 window. Remove this environment variable to work in full-screen mode.<br />
<br />
* Open another terminal to run the client. (note: this client connects to the server which open up 6 windows according to the config given in cave.pvx). Change the stereo-type according to preference (see # ./paraview --help).<br />
# ./paraview --stereo --stereo-type=Anaglyph --server=localhost --vrpn --vrpn-address=Tracker0@localhost<br />
<br />
* Connect the client to the server.<br />
<br />
* Enable the VRPN Plugin on the client.</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VES&diff=45230VES2012-01-21T19:43:25Z<p>Aashish.chaudhary: </p>
<hr />
<div>{|width="100%"<br />
|-<br />
|style="vertical-align: top; border-right: 2em solid white; "|<br />
<br />
<br />
=== What is VES? ===<br />
VES is the VTK OpenGL ES Rendering Toolkit. It is a C++ rendering library for mobile devices using OpenGL ES 2.0. VES integrates with the [[VTK|Visualization Toolkit (VTK)]] to deliver scientific and medical visualization capabilities to mobile application developers.<br />
<br />
<br />
=== What is Kiwi? ===<br />
Kiwi provides mobile application developers with easy to use building blocks for embedding advanced visualization windows into their Android or iOS apps.<br />
The Kiwi platform offers a collection of application oriented C++ classes that tie together VTK's wide variety of supported file formats, readers, and filters,<br />
with the OpenGL ES 2.0 rendering capabilities of VES. With Kiwi, a mobile application can integrate a fully featured visualization environment with very little code. The application can be written using C++, Java, or Objective-C. The Kiwi Platform bundles together all the required rendering components, IO routines, and scene objects into a straight forward set of interfaces. Plus, Kiwi offers a collection of 3D widgets designed for touch screens that allows users to manipulate data and interact with the 3D scene.<br />
<br />
<br />
=== Why VES? ===<br />
The Visualization Toolkit (VTK) is used by desktop application developers to power many leading scientific and medical research tools. VTK is composed of many different modules including I/O, data processing, statistical analysis, networking, and rendering. These modules are very useful for mobile application development, but the rendering module is not written for OpenGL ES 2.0. VES offers an OpenGL ES 2.0 based rendering library that integrates with the rest of VTK, allowing mobile developers to take full advantage of the Visualization Toolkit.<br />
<br />
<br />
=== What about Licensing? Can I use VES to develop commercial applications? ===<br />
Yes, you can certainly use VES to develop and distribute commercial applications. VES is released under '''Apache License Version 2.0'''. <br />
You can obtain the copy of license at http://www.apache.org/licenses/LICENSE-2.0.VES dependencies are VTK (http://vtk.org) <br />
and Eigen (http://eigen.tuxfamily.org). VTK is an open-source toolkit licensed under the BSD license. Please visit http://www.vtk.org/VTK/project/license.html <br />
for more information on VTK licensing. VES uses Eigen as underlying Math library and Eigen is LGPL license. Please visit http://eigen.tuxfamily.org/index.php?title=Licensing_FAQ for more information on Eigen licensing.<br />
<br />
<br />
=== How do I use it? ===<br />
If you're interested in using VES and Kiwi for mobile development, the '''[[VES/Developers Guide|Developer's guide]]''' is the right place to start.<br />
<br />
<br />
[[Image: VES_can_with_info.png|thumb|center|800px|KiwiViewer running in the iPad simulator showing one frame of a simulation. The simulation shows a block falling and crushing a can. ]]<br />
<br />
|style="vertical-align: top; padding: 0.5em; width: 300px; "|<br />
<br />
{| style="width: 100%; background: #E4F8B6; "<br />
! style="text-align: left; background: #86ba0c; color: white; padding: 0.2em; font-size: 130%;" | '''Getting started'''<br />
|-<br />
|<br />
* '''[[VES/Download And Build Instructions|Download & build instructions]]'''<br />
* '''[[VES/Developers Guide|Developer's guide]]'''<br />
* '''[http://public.kitware.com/ves-docs API Documentation]'''<br />
|}<br /><br />
<br />
{| style="width: 100%; background: #cfcfe9; "<br />
! style="text-align: left; background: #171789; color: white; padding: 0.2em; font-size: 130%;" | '''Community'''<br />
|-<br />
|<br />
* '''[http://public.kitware.com/cgi-bin/mailman/listinfo/ves VES mailing list]'''<br />
* '''[http://vtk.org/gitweb?p=VES.git Git source repository]'''<br />
* '''[http://public.kitware.com/Bug/my_view_page.php Bug tracker]'''<br />
* '''[http://ves.uservoice.com User voice ideas & feature request]'''<br />
* '''[http://www.cdash.org/CDash/index.php?project=VES Software quality dashboard]'''<br />
* '''[[VES/Screenshots|Screenshots]]'''<br />
|}<br /><br />
<br />
[[Image: Kiwi_logo.png|200px]]<br />
[[Image: Vtk_logo.jpg|200px]]<br />
[[Image: Android_logo.jpg|200px]]<br />
[[Image: Ios_logo.jpg|200px]]<br />
[[Image: Kitware_logo.jpg|200px]]<br />
<br />
<br />
|}<br />
<br />
<br />
=== How do I get support? ===<br />
Send questions, bug reports or feature requests to ves@public.kitware.com. Subscribe to the mailing list [http://public.kitware.com/cgi-bin/mailman/listinfo/ves here].<br />
<br />
<br />
<br />
__NOTOC__</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VES&diff=45229VES2012-01-21T19:40:14Z<p>Aashish.chaudhary: </p>
<hr />
<div>{|width="100%"<br />
|-<br />
|style="vertical-align: top; border-right: 2em solid white; "|<br />
<br />
<br />
=== What is VES? ===<br />
VES is the VTK OpenGL ES Rendering Toolkit. It is a C++ rendering library for mobile devices using OpenGL ES 2.0. VES integrates with the [[VTK|Visualization Toolkit (VTK)]] to deliver scientific and medical visualization capabilities to mobile application developers.<br />
<br />
<br />
=== What is Kiwi? ===<br />
Kiwi provides mobile application developers with easy to use building blocks for embedding advanced visualization windows into their Android or iOS apps.<br />
The Kiwi platform offers a collection of application oriented C++ classes that tie together VTK's wide variety of supported file formats, readers, and filters,<br />
with the OpenGL ES 2.0 rendering capabilities of VES. With Kiwi, a mobile application can integrate a fully featured visualization environment with very little code. The application can be written using C++, Java, or Objective-C. The Kiwi Platform bundles together all the required rendering components, IO routines, and scene objects into a straight forward set of interfaces. Plus, Kiwi offers a collection of 3D widgets designed for touch screens that allows users to manipulate data and interact with the 3D scene.<br />
<br />
<br />
=== Why VES? ===<br />
The Visualization Toolkit (VTK) is used by desktop application developers to power many leading scientific and medical research tools. VTK is composed of many different modules including I/O, data processing, statistical analysis, networking, and rendering. These modules are very useful for mobile application development, but the rendering module is not written for OpenGL ES 2.0. VES offers an OpenGL ES 2.0 based rendering library that integrates with the rest of VTK, allowing mobile developers to take full advantage of the Visualization Toolkit.<br />
<br />
<br />
=== What about Licensing? Can I use VES to develop commercial applications? ===<br />
Yes, you can certainly use VES to develop and distribute commercial applications. <br />
VES is released under '''Apache License Version 2.0'''. You can obtain the copy of license at http://www.apache.org/licenses/LICENSE-2.0.<br />
VES dependencies are VTK (http://vtk.org) and Eigen (http://eigen.tuxfamily.org). VTK is an open-source toolkit licensed under the BSD license.<br />
Please visit http://www.vtk.org/VTK/project/license.html for more information on VTK licensing. VES uses Eigen and Eigen is LGPL license. <br />
Please visit http://eigen.tuxfamily.org/index.php?title=Licensing_FAQ for more information on Eigen licensing.<br />
<br />
<br />
=== How do I use it? ===<br />
If you're interested in using VES and Kiwi for mobile development, the '''[[VES/Developers Guide|Developer's guide]]''' is the right place to start.<br />
<br />
<br />
[[Image: VES_can_with_info.png|thumb|center|800px|KiwiViewer running in the iPad simulator showing one frame of a simulation. The simulation shows a block falling and crushing a can. ]]<br />
<br />
|style="vertical-align: top; padding: 0.5em; width: 300px; "|<br />
<br />
{| style="width: 100%; background: #E4F8B6; "<br />
! style="text-align: left; background: #86ba0c; color: white; padding: 0.2em; font-size: 130%;" | '''Getting started'''<br />
|-<br />
|<br />
* '''[[VES/Download And Build Instructions|Download & build instructions]]'''<br />
* '''[[VES/Developers Guide|Developer's guide]]'''<br />
* '''[http://public.kitware.com/ves-docs API Documentation]'''<br />
|}<br /><br />
<br />
{| style="width: 100%; background: #cfcfe9; "<br />
! style="text-align: left; background: #171789; color: white; padding: 0.2em; font-size: 130%;" | '''Community'''<br />
|-<br />
|<br />
* '''[http://public.kitware.com/cgi-bin/mailman/listinfo/ves VES mailing list]'''<br />
* '''[http://vtk.org/gitweb?p=VES.git Git source repository]'''<br />
* '''[http://public.kitware.com/Bug/my_view_page.php Bug tracker]'''<br />
* '''[http://ves.uservoice.com User voice ideas & feature request]'''<br />
* '''[http://www.cdash.org/CDash/index.php?project=VES Software quality dashboard]'''<br />
* '''[[VES/Screenshots|Screenshots]]'''<br />
|}<br /><br />
<br />
[[Image: Kiwi_logo.png|200px]]<br />
[[Image: Vtk_logo.jpg|200px]]<br />
[[Image: Android_logo.jpg|200px]]<br />
[[Image: Ios_logo.jpg|200px]]<br />
[[Image: Kitware_logo.jpg|200px]]<br />
<br />
<br />
|}<br />
<br />
<br />
=== How do I get support? ===<br />
Send questions, bug reports or feature requests to ves@public.kitware.com. Subscribe to the mailing list [http://public.kitware.com/cgi-bin/mailman/listinfo/ves here].<br />
<br />
<br />
<br />
__NOTOC__</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VES&diff=45228VES2012-01-21T19:37:57Z<p>Aashish.chaudhary: </p>
<hr />
<div>{|width="100%"<br />
|-<br />
|style="vertical-align: top; border-right: 2em solid white; "|<br />
<br />
<br />
=== What is VES? ===<br />
VES is the VTK OpenGL ES Rendering Toolkit. It is a C++ rendering library for mobile devices using OpenGL ES 2.0. VES integrates with the [[VTK|Visualization Toolkit (VTK)]] to deliver scientific and medical visualization capabilities to mobile application developers.<br />
<br />
<br />
=== What is Kiwi? ===<br />
Kiwi provides mobile application developers with easy to use building blocks for embedding advanced visualization windows into their Android or iOS apps.<br />
The Kiwi platform offers a collection of application oriented C++ classes that tie together VTK's wide variety of supported file formats, readers, and filters,<br />
with the OpenGL ES 2.0 rendering capabilities of VES. With Kiwi, a mobile application can integrate a fully featured visualization environment with very little code. The application can be written using C++, Java, or Objective-C. The Kiwi Platform bundles together all the required rendering components, IO routines, and scene objects into a straight forward set of interfaces. Plus, Kiwi offers a collection of 3D widgets designed for touch screens that allows users to manipulate data and interact with the 3D scene.<br />
<br />
<br />
=== Why VES? ===<br />
The Visualization Toolkit (VTK) is used by desktop application developers to power many leading scientific and medical research tools. VTK is composed of many different modules including I/O, data processing, statistical analysis, networking, and rendering. These modules are very useful for mobile application development, but the rendering module is not written for OpenGL ES 2.0. VES offers an OpenGL ES 2.0 based rendering library that integrates with the rest of VTK, allowing mobile developers to take full advantage of the Visualization Toolkit.<br />
<br />
<br />
=== What about Licensing? Can I use VES to develop commercial applications? ===<br />
Yes, you can certainly use VES to develop and distribute commercial applications. <br />
VES is released under '''Apache License version 2.0'''. You can obtain the copy of license at http://www.apache.org/licenses/LICENSE-2.0.<br />
VES dependencies are VTK (http://vtk.org) and Eigen (http://eigen.tuxfamily.org). VTK is an open-source toolkit licensed under the BSD license.<br />
Please visit http://www.vtk.org/VTK/project/license.html for more information on VTK licensing. VES uses Eigen and Eigen is LGPL license. <br />
Please visit http://eigen.tuxfamily.org/index.php?title=Licensing_FAQ for more information on Eigen licensing.<br />
<br />
<br />
=== How do I use it? ===<br />
If you're interested in using VES and Kiwi for mobile development, the '''[[VES/Developers Guide|Developer's guide]]''' is the right place to start.<br />
<br />
<br />
[[Image: VES_can_with_info.png|thumb|center|800px|KiwiViewer running in the iPad simulator showing one frame of a simulation. The simulation shows a block falling and crushing a can. ]]<br />
<br />
|style="vertical-align: top; padding: 0.5em; width: 300px; "|<br />
<br />
{| style="width: 100%; background: #E4F8B6; "<br />
! style="text-align: left; background: #86ba0c; color: white; padding: 0.2em; font-size: 130%;" | '''Getting started'''<br />
|-<br />
|<br />
* '''[[VES/Download And Build Instructions|Download & build instructions]]'''<br />
* '''[[VES/Developers Guide|Developer's guide]]'''<br />
* '''[http://public.kitware.com/ves-docs API Documentation]'''<br />
|}<br /><br />
<br />
{| style="width: 100%; background: #cfcfe9; "<br />
! style="text-align: left; background: #171789; color: white; padding: 0.2em; font-size: 130%;" | '''Community'''<br />
|-<br />
|<br />
* '''[http://public.kitware.com/cgi-bin/mailman/listinfo/ves VES mailing list]'''<br />
* '''[http://vtk.org/gitweb?p=VES.git Git source repository]'''<br />
* '''[http://public.kitware.com/Bug/my_view_page.php Bug tracker]'''<br />
* '''[http://ves.uservoice.com User voice ideas & feature request]'''<br />
* '''[http://www.cdash.org/CDash/index.php?project=VES Software quality dashboard]'''<br />
* '''[[VES/Screenshots|Screenshots]]'''<br />
|}<br /><br />
<br />
[[Image: Kiwi_logo.png|200px]]<br />
[[Image: Vtk_logo.jpg|200px]]<br />
[[Image: Android_logo.jpg|200px]]<br />
[[Image: Ios_logo.jpg|200px]]<br />
[[Image: Kitware_logo.jpg|200px]]<br />
<br />
<br />
|}<br />
<br />
<br />
=== How do I get support? ===<br />
Send questions, bug reports or feature requests to ves@public.kitware.com. Subscribe to the mailing list [http://public.kitware.com/cgi-bin/mailman/listinfo/ves here].<br />
<br />
<br />
<br />
__NOTOC__</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VES&diff=45227VES2012-01-21T19:36:35Z<p>Aashish.chaudhary: </p>
<hr />
<div>{|width="100%"<br />
|-<br />
|style="vertical-align: top; border-right: 2em solid white; "|<br />
<br />
<br />
=== What is VES? ===<br />
VES is the VTK OpenGL ES Rendering Toolkit. It is a C++ rendering library for mobile devices using OpenGL ES 2.0. VES integrates with the [[VTK|Visualization Toolkit (VTK)]] to deliver scientific and medical visualization capabilities to mobile application developers.<br />
<br />
<br />
=== What is Kiwi? ===<br />
Kiwi provides mobile application developers with easy to use building blocks for embedding advanced visualization windows into their Android or iOS apps.<br />
The Kiwi platform offers a collection of application oriented C++ classes that tie together VTK's wide variety of supported file formats, readers, and filters,<br />
with the OpenGL ES 2.0 rendering capabilities of VES. With Kiwi, a mobile application can integrate a fully featured visualization environment with very little code. The application can be written using C++, Java, or Objective-C. The Kiwi Platform bundles together all the required rendering components, IO routines, and scene objects into a straight forward set of interfaces. Plus, Kiwi offers a collection of 3D widgets designed for touch screens that allows users to manipulate data and interact with the 3D scene.<br />
<br />
<br />
=== Why VES? ===<br />
The Visualization Toolkit (VTK) is used by desktop application developers to power many leading scientific and medical research tools. VTK is composed of many different modules including I/O, data processing, statistical analysis, networking, and rendering. These modules are very useful for mobile application development, but the rendering module is not written for OpenGL ES 2.0. VES offers an OpenGL ES 2.0 based rendering library that integrates with the rest of VTK, allowing mobile developers to take full advantage of the Visualization Toolkit.<br />
<br />
<br />
=== What about Licensing? Can I use VES to develop commercial applications? ===<br />
Yes, you can certainly use VES to develop and distribute commercial applications. <br />
VES is released under Apache License version 2.0. You can obtain the copy of license at http://www.apache.org/licenses/LICENSE-2.0.<br />
VES dependencies are VTK (http://vtk.org) and Eigen (http://eigen.tuxfamily.org). VTK is an open-source toolkit licensed under the BSD license.<br />
Please visit http://www.vtk.org/VTK/project/license.html for more information on VTK licensing. VES uses Eigen and Eigen is LGPL license. <br />
Please visit http://eigen.tuxfamily.org/index.php?title=Licensing_FAQ for more information on Eigen licensing.<br />
<br />
<br />
=== How do I use it? ===<br />
If you're interested in using VES and Kiwi for mobile development, the '''[[VES/Developers Guide|Developer's guide]]''' is the right place to start.<br />
<br />
<br />
[[Image: VES_can_with_info.png|thumb|center|800px|KiwiViewer running in the iPad simulator showing one frame of a simulation. The simulation shows a block falling and crushing a can. ]]<br />
<br />
|style="vertical-align: top; padding: 0.5em; width: 300px; "|<br />
<br />
{| style="width: 100%; background: #E4F8B6; "<br />
! style="text-align: left; background: #86ba0c; color: white; padding: 0.2em; font-size: 130%;" | '''Getting started'''<br />
|-<br />
|<br />
* '''[[VES/Download And Build Instructions|Download & build instructions]]'''<br />
* '''[[VES/Developers Guide|Developer's guide]]'''<br />
* '''[http://public.kitware.com/ves-docs API Documentation]'''<br />
|}<br /><br />
<br />
{| style="width: 100%; background: #cfcfe9; "<br />
! style="text-align: left; background: #171789; color: white; padding: 0.2em; font-size: 130%;" | '''Community'''<br />
|-<br />
|<br />
* '''[http://public.kitware.com/cgi-bin/mailman/listinfo/ves VES mailing list]'''<br />
* '''[http://vtk.org/gitweb?p=VES.git Git source repository]'''<br />
* '''[http://public.kitware.com/Bug/my_view_page.php Bug tracker]'''<br />
* '''[http://ves.uservoice.com User voice ideas & feature request]'''<br />
* '''[http://www.cdash.org/CDash/index.php?project=VES Software quality dashboard]'''<br />
* '''[[VES/Screenshots|Screenshots]]'''<br />
|}<br /><br />
<br />
[[Image: Kiwi_logo.png|200px]]<br />
[[Image: Vtk_logo.jpg|200px]]<br />
[[Image: Android_logo.jpg|200px]]<br />
[[Image: Ios_logo.jpg|200px]]<br />
[[Image: Kitware_logo.jpg|200px]]<br />
<br />
<br />
|}<br />
<br />
<br />
=== How do I get support? ===<br />
Send questions, bug reports or feature requests to ves@public.kitware.com. Subscribe to the mailing list [http://public.kitware.com/cgi-bin/mailman/listinfo/ves here].<br />
<br />
<br />
<br />
__NOTOC__</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=ParaView/Plugin_HowTo&diff=44587ParaView/Plugin HowTo2011-12-16T02:55:01Z<p>Aashish.chaudhary: Fixed broken link for paraview user's guide</p>
<hr />
<div>ParaView comes with plethora of functionality bundled in: several readers, multitude of filters, quite a few different types of views etc. However, it is not uncommon for developers to want to add new functionality to ParaView for eg. to add support to their new file format, incorporate a new filter into paraview etc. ParaView makes it possible to add new functionlity by using an extensive plugin mechanism. <br />
<br />
Plugins can be used to extend ParaView in several ways:<br />
* Add new readers, writers, filters <br />
* Add custom GUI components such as toolbar buttons to perform common tasks<br />
* Add new views in for display data<br />
<br />
Examples for different types of plugins are provided with the ParaView source under '''Examples/Plugins/'''.<br />
<br />
This document has major sections:<br />
* First section covers how to use existing plugins in ParaView.<br />
* Second section contains information for developers about writing new plugins for ParaView.<br />
<br />
== Using Plugins ==<br />
<br />
Plugins are distributed as shared libraries (*.so on Unix, *.dylib on Mac, *.dll on Windows etc). For a plugin to be loadable in ParaView, it must be built with the same version of ParaView as it is expected to be deployed on. Plugins can be classified into two broad categories:<br />
* Server-side plugins<br />
: These are plugins that extend the algorithmic capabilities for ParaView eg. new filters, readers, writers etc. Since in ParaView data is processed on the server-side, these plugins need to be loaded on the server.<br />
* Client-side plugins<br />
: These are plugins that extend the ParaView GUI eg. property panels for new filters, toolbars, views etc. These plugins need to be loaded on the client.<br />
<br />
Oftentimes a plugin has both server-side as well as client-side components to it eg. a plugin that adds a new filter and a property panel that goes with that filter. Such plugins need to be loaded both on the server as well as the client. <br />
<br />
Generally, users don't have to worry whether a plugin is a server-side or client-side plugin. Simply load the plugin on the server as well as the client. ParaView will include relevant components from plugin on each of the processes.<br />
<br />
There are three ways for loading plugins:<br />
<br />
* Using the GUI ('''Plugin Manager''')<br />
: Plugins can be loaded into ParaView using the '''Plugin Manager''' accessible from '''Tools | Manage Plugins/Extensions''' menu. The Plugin Manager has two sections for loading local plugins and remote plugins (enabled only when connected to a server). To load a plugin on the local as well as remote side, simply browse to the plugin shared library. If the loading is successful, the plugin will appear in the list of loaded plugins. The Plugin manager also lists the paths it searched to load plugins automatically.<br />
: The Plugin Manager remembers all loaded plugins, so next time to load the plugin, simply locate it in the list and click "Load Selected" button. <br />
: You can set up ParaView to automatically load the plugin at startup (in case of client-side plugins) or on connecting to the server (in case of server-side plugins) by checking the "Auto Load" checkbox on a loaded plugin.<br />
<table><br />
<tr><br />
<td><br />
[[Image:LocalPlugin_Manager.png|thumb|300px|'''Figure 1:''' Plugin Manager when not connected to a remote server, showing loaded plugins on the local site.''']]<br />
</td><br />
<td><br />
[[Image:RemotePlugin_Manager.png|thumb|300px|'''Figure 2:''' Plugin Manager when connected to a server showing loaded plugins on the local as well as remote sites.''']]<br />
</td><br />
</table><br />
* Using environment variable (Auto-loading plugins)<br />
: If one wants ParaView to automatically load a set of plugins on startup, one can use the '''PV_PLUGIN_PATH''' environment variable. '''PV_PLUGIN_PATH''' can be used to list a set of directories (separated by colon (:) or semi-colon (;)) which ParaView will search on startup to load plugins. This enviromnent variable needs to be set on both the client node to load local plugins as well as the remote server to load remote plugins. Note that plugins in PV_PLUGIN_PATH are always auto-loaded irrespective of the status of the "Auto Load" checkbox in the Plugin Manager.<br />
* Placing the plugins in a recognized location. Recognized locations are:<br />
** A plugins subdirectory beneath the directory containing the paraview client or server executables. This can be a system-wide location if installed as such.<br />
** A Plugins subdirectory in the user's home area. On Unix/Linux/Mac, $HOME/.config/ParaView/ParaView<version>/Plugins. On Windows %APPDATA$\ParaView\ParaView<version>\Plugins.<br />
<br />
==Debugging Plugins==<br />
If plugin loading failed, try setting the '''PV_PLUGIN_DEBUG''' environment variable for all processes that you were trying to load the plugin on. ParaView will then try to print verbose information about each step and causes for failure, as show below.<br />
<br />
----<br />
<br />
<source lang="python"><br />
<br />
***************************************************<br />
Attempting to load /home/utkarsh/Kitware/ParaView3/ParaView3Bin/bin/libSurfaceLIC.so<br />
Loaded shared library successfully. Now trying to validate that it's a ParaView plugin.<br />
Plugin's signature: paraviewplugin|GNU|3.7<br />
Plugin signature verification successful. This is definitely a ParaView plugin compiled with correct compiler for correct ParaView version.<br />
Updating Shared Library Paths: /home/utkarsh/Kitware/ParaView3/ParaView3Bin/bin<br />
Plugin instance located successfully. Now loading components from the plugin instance based on the interfaces it implements.<br />
----------------------------------------------------------------<br />
Plugin Information: <br />
Name : SurfaceLIC<br />
Version : 1.0<br />
ReqOnServer : 1<br />
ReqOnClient : 1<br />
ReqPlugins : <br />
ServerManager Plugin : Yes<br />
Python Plugin : No<br />
</source><br />
<br />
----<br />
<br />
<font color="magenta">Plugin debug information is not available for ParaView 3.6 or earlier</font><br />
<br />
== Writing Plugins ==<br />
This section covers writing and compiling different types of Plugins. To create a plugin, one must have their own build of ParaView3. Binaries downloaded from www.paraview.org do not include necessary header files or import libraries (where applicable) for compiling plugins.<br />
<br />
The beginning of a CMakeLists.txt file contains<br />
<font color="violet">FIND_PACKAGE</font>(ParaView <font color="purple">REQUIRED</font>)<br />
<font color="violet">INCLUDE</font>(${PARAVIEW_USE_FILE})<br />
Where CMake will ask for the ParaView_DIR which you point to your ParaView build. The PARAVIEW_USE_FILE includes build parameters and macros for building plugins.<br />
<br />
=== Adding a Filter ===<br />
<br />
In this plugin, we want to add a new filter to ParaView. The filter has to be a VTK-based algorithm, written as following the standard procedures for writing VTK algorithms. Generally for such cases where we are adding a new VTK class to ParaView (be it a filter, reader or a writer), we need to do the following tasks:<br />
* Write a '''Server Manager Configuration XML''' which describes the ''Proxy'' interface for the new VTK class. Basically, this defines the interface for the client to create and modify instances of the new class on the server side. Please refer to the [http://www.kitware.com/products/books/paraview.html ParaView Guide] for details about writing these server-manager xmls.<br />
* Write a configuration XML for the GUI to make ParaView GUI aware of this new class, if applicable. For filters, this is optional, since ParaView automatically recognizes filters added through plugins and lists them in the '''Alphabetical''' sub-menu. One may use the GUI configuration xml to add the new filter to a specific category in the ''Filters'' menu, or add a new category etc. For readers and writers, this is required since ParaView GUI needs to know what extensions your reader/writer supports etc.<br />
<br />
==== Enabling an existing VTK filter ====<br />
<br />
Sometimes, the filter that one wants to add to ParaView is already available in VTK, it's just not exposed through the ParaView GUI. This is the easiest type of plugin to create. There are two options: 1) setup the plugin using only an XML file and 2) actually compile the plugin into a shared library. The first option is the easiest, but the second option will prepare you for creating a custom filter in the future as the process is nearly identical. <br />
<br />
===== XML Only =====<br />
If you have not built Paraview from source, using an xml plugin is your only option.<br />
<br />
We need to write the server manager configuration xml for the filter describing its API. The GUI xml to add the filter to any specific category is optional. <br />
<br />
For example, let's say we simply want to expose the '''vtkCellDerivatives''' in VTK. Then first, we'll write the server manager configuration XML (call it CellDerivatives.xml), similar to what we would have done for adding a new filter. <br />
<div class="MainPageBG" style="border: 1px solid #ffc9c9; color: #000; background-color: #fff3f3"><br />
<br />
<br />
<source lang="xml"><br />
<ServerManagerConfiguration><br />
<ProxyGroup name="filters"><br />
<SourceProxy name="MyCellDerivatives" class="vtkCellDerivatives" label="My Cell Derivatives"><br />
<Documentation<br />
long_help="Create point attribute array by projecting points onto an elevation vector."<br />
short_help="Create a point array representing elevation."><br />
</Documentation><br />
<InputProperty<br />
name="Input"<br />
command="SetInputConnection"><br />
<ProxyGroupDomain name="groups"><br />
<Group name="sources"/><br />
<Group name="filters"/><br />
</ProxyGroupDomain><br />
<DataTypeDomain name="input_type"><br />
<DataType value="vtkDataSet"/><br />
</DataTypeDomain><br />
</InputProperty><br />
<br />
</SourceProxy><br />
</ProxyGroup><br />
</ServerManagerConfiguration><br />
</source><br />
<br />
<br />
</div><br />
<br />
At this point, we can stop and use the plugin in Paraview by loading the XML file directly into the plugin manager.<br />
<br />
===== Compiling into a Shared Library =====<br />
If you have built Paraview from source, it is possible to compile the plugin into into a shared library. To do this, we can use the following CMakeLists.txt<br />
<br />
<font color="violet">FIND_PACKAGE</font>(ParaView <font color="purple">REQUIRED</font>)<br />
<font color="violet">INCLUDE</font>(${PARAVIEW_USE_FILE})<br />
<br />
<font color="violet">ADD_PARAVIEW_PLUGIN</font>(CellDerivatives "1.0"<br />
<font color="purple">SERVER_MANAGER_XML</font> CellDerivatives.xml)<br />
<br />
We can now load the plugin through the plugin manager by selecting the .so file.<br />
<br />
Similarly compiled Qt resources (*.bqrc) can be loaded at runtime. *.bqrc is a binary file containing resources which can include icons, the GUI configuration xmls for adding catergories etc. A .bqrc can be made from a .qrc by running the rcc utility provided by Qt:<br />
<source lang="text"><br />
rcc -binary -o myfile.bqrc myfile.qrc.<br />
</source><br />
<br />
==== Adding a new VTK filter ====<br />
<br />
For this example, refer to '''Examples/Plugins/Filter''' in the ParaView source. Let's say we have written a new vtkMyElevationFilter (vtkMyElevationFilter.h|cxx), which extends the functionality of the vtkElevationFilter and we want to package that as a plugin for ParaView. For starters, we simply want to use this filter in ParaView (not doing anything fancy with Filters menu categories etc.). As described, we need to write the server manager configuration XML (MyElevationFilter.xml). Once that's done, we write a CMakeLists.txt file to package this into a plugin. <br />
<br />
This CMakeLists.txt simply needs to include the following lines:<br />
<br />
<font color="green"># Locate ParaView build and then import CMake configuration, <br />
# macros etc. from it.</font><br />
<font color="violet">FIND_PACKAGE</font>(ParaView <font color="purple">REQUIRED</font>)<br />
<font color="violet">INCLUDE</font>(${PARAVIEW_USE_FILE})<br />
<br />
<font color="green"># Use the ADD_PARAVIEW_PLUGIN macro to build a plugin</font><br />
<font color="violet">ADD_PARAVIEW_PLUGIN</font>(<br />
MyElevation <font color="green">#<--Name for the plugin</font><br />
"1.0" <font color="green">#<--Version string</font><br />
<font color="purple">SERVER_MANAGER_XML</font> MyElevationFilter.xml <font color="green">#<-- server manager xml</font><br />
<font color="purple">SERVER_MANAGER_SOURCES</font> vtkMyElevationFilter.cxx <font color="green">#<-- source files for the new classes</font><br />
)<br />
<br />
Then using cmake and a build system, one can build a plugin for this new filter. Once this plugin is loaded the filter will appear under the "Alphabetical" list in the Filters menu.<br />
<br />
<br />
===== Filters with Multiple Input Ports =====<br />
If your filter requires multiple input ports, you have two options - 1) You can create helper functions in the VTK filter such as SetYourInputName which deal with addressing the VTK pipeline in the c++ code. 2) Address/access the input connection by number in the XML. The port_index property specifies which input connection the particular input will be connected to. The SetInputConnection function is the command that will actually be called with this port_index to setup the pipeline.<br />
<br />
An example XML file for a filter with multiple inputs is below. The filter takes three vtkPolyData's as input.<br />
<div class="MainPageBG" style="border: 1px solid #ffc9c9; color: #000; background-color: #fff3f3"><br />
<br />
<br />
<source lang="xml"><br />
<ServerManagerConfiguration><br />
<ProxyGroup name="filters"><br />
<!-- ================================================================== --><br />
<SourceProxy name="LandmarkTransformFilter" class="vtkLandmarkTransformFilter" label="LandmarkTransformFilter"><br />
<Documentation<br />
long_help="Align two point sets using vtkLandmarkTransform to compute the best transformation between the two point sets."<br />
short_help="vtkLandmarkTransformFilter."><br />
</Documentation><br />
<br />
<InputProperty<br />
name="SourceLandmarks"<br />
port_index="0"<br />
command="SetInputConnection"><br />
<ProxyGroupDomain name="groups"><br />
<Group name="sources"/><br />
<Group name="filters"/><br />
</ProxyGroupDomain><br />
<DataTypeDomain name="input_type"><br />
<DataType value="vtkPolyData"/><br />
</DataTypeDomain><br />
<Documentation><br />
Set the source data set. This data set that will move towards the target data set.<br />
</Documentation><br />
</InputProperty><br />
<br />
<InputProperty<br />
name="TargetLandmarks"<br />
port_index="1"<br />
command="SetInputConnection"><br />
<ProxyGroupDomain name="groups"><br />
<Group name="sources"/><br />
<Group name="filters"/><br />
</ProxyGroupDomain><br />
<DataTypeDomain name="input_type"><br />
<DataType value="vtkPolyData"/><br />
</DataTypeDomain><br />
<Documentation><br />
Set the target data set. This data set will stay stationary.<br />
</Documentation><br />
</InputProperty><br />
<br />
<InputProperty<br />
name="SourceDataSet"<br />
port_index="2"<br />
command="SetInputConnection"><br />
<ProxyGroupDomain name="groups"><br />
<Group name="sources"/><br />
<Group name="filters"/><br />
</ProxyGroupDomain><br />
<DataTypeDomain name="input_type"><br />
<DataType value="vtkPolyData"/><br />
</DataTypeDomain><br />
<Documentation><br />
Set the source data set landmark points.<br />
</Documentation><br />
</InputProperty><br />
<br />
</SourceProxy><br />
<!-- End LandmarkTransformFilter --><br />
</ProxyGroup><br />
<!-- End Filters Group --><br />
</ServerManagerConfiguration><br />
</source><br />
<br />
<br />
</div><br />
<br />
To set the inputs in Paraview, simply select one of the inputs in the Pipeline Browser and then select the filter from the Filters menu. This will open a dialog box which will allow you to specify which object to connect to each input port.<br />
<br />
==== Adding ''Categories'' to the Filters Menu ====<br />
<br />
Now suppose we want to add a new category to the Filters menu, called "Extensions" and then show this filter in that submenu. In that case, we'll need a GUI configuration xml to tell the ParaView GUI to create the category. This GUI configuration xml will look as such:<br />
<br />
<source lang="xml"><br />
<ParaViewFilters><br />
<Category name="Extensions" menu_label="&amp;Extensions"><br />
<!-- adds a new category and then adds our filter to it --><br />
<Filter name="MyElevationFilter" /><br />
</Category><br />
</ParaViewFilters><br />
</source><br />
<br />
If the name of the category is same as an already existsing category eg. ''Data Analysis'', then the filter gets added to the existing category.<br />
<br />
The CMakeLists.txt must change to include this new xml (let's call it MyElevationGUI.xml) as follows:<br />
<br />
<font color="violet">FIND_PACKAGE</font>(ParaView <font color="purple">REQUIRED</font>)<br />
<font color="violet">INCLUDE</font>(${PARAVIEW_USE_FILE})<br />
<br />
<font color="violet">ADD_PARAVIEW_PLUGIN</font>(MyElevation "1.0"<br />
<font color="purple">SERVER_MANAGER_XML</font> MyElevationFilter.xml <br />
<font color="purple">SERVER_MANAGER_SOURCES</font> vtkMyElevationFilter.cxx<br />
<font color="purple">GUI_RESOURCE_FILES</font> MyElevationGUI.xml)<br />
<br />
==== Adding Icons ====<br />
You can see that some filters in the Filters menu (eg. Clip) have icons associated with them. It's possible for the plugin to add icons for filters it adds as well. For that you need to write a Qt resource file (say MyElevation.qrc) as follows:<br />
<br />
<source lang="xml"><br />
<RCC><br />
<qresource prefix="/MyIcons" ><br />
<file>MyElevationIcon.png</file><br />
</qresource><br />
</RCC><br />
</source><br />
<br />
The GUI configuration xml now refers to the icon provided by this resource as follows:<br />
<source lang="xml"><br />
<ParaViewFilters><br />
<Category name="Extensions" menu_label="&amp;Extensions"><br />
<!-- adds a new category and then adds our filter to it --><br />
<Filter name="MyElevationFilter" icon=":/MyIcons/MyElevationIcon.png" /><br />
</Category><br />
</ParaViewFilters><br />
</source><br />
<br />
Finally, the CMakeLists.txt file much change to include our MyElevation.qrc file as follows:<br />
<br />
<font color="violet">FIND_PACKAGE</font>(ParaView <font color="purple">REQUIRED</font>)<br />
<font color="violet">INCLUDE</font>(${PARAVIEW_USE_FILE})<br />
<br />
<font color="violet">ADD_PARAVIEW_PLUGIN</font>(MyElevation "1.0"<br />
<font color="purple">SERVER_MANAGER_XML</font> MyElevationFilter.xml <br />
<font color="purple">SERVER_MANAGER_SOURCES</font> vtkMyElevationFilter.cxx<br />
<font color="purple">GUI_RESOURCES</font> MyElevation.qrc<br />
<font color="purple">GUI_RESOURCE_FILES</font> MyElevationGUI.xml)<br />
<br />
==== Adding GUI Parameters ====<br />
Simply add these in the server manager xml to expose parameters of the filter to the paraview user.<br />
===== Integer property =====<br />
This property appears as a text box.<br />
<source lang="xml"><br />
<IntVectorProperty<br />
name="bStartByMatchingCentroids"<br />
command="SetbStartByMatchingCentroids"<br />
number_of_elements="1"<br />
default_values="1"><br />
</IntVectorProperty><br />
</source><br />
<br />
===== Boolean property =====<br />
This property appears as a check box control. A boolean property uses the IntVectorProperty with an extra line (BooleanDomain...) indicating this should be a check box rather than a text field.<br />
<source lang="xml"><br />
<IntVectorProperty<br />
name="bStartByMatchingCentroids"<br />
command="SetbStartByMatchingCentroids"<br />
number_of_elements="1"<br />
default_values="1"><br />
<BooleanDomain name="bool"/><br />
</IntVectorProperty><br />
</source><br />
<br />
===== String property =====<br />
This property appears as a text box.<br />
<source lang="xml"><br />
<StringVectorProperty<br />
name="YourStringVariable"<br />
command="SetYourStringVariable"<br />
number_of_elements="1"<br />
default_values="1"><br />
</StringVectorProperty><br />
</source><br />
<br />
===== Double property =====<br />
This property appears as a text box.<br />
<source lang="xml"><br />
<DoubleVectorProperty<br />
name="YourDoubleVariable"<br />
command="SetYourDoubleVariable"<br />
number_of_elements="1"<br />
default_values="1"><br />
</DoubleVectorProperty><br />
</source><br />
<br />
===== Multi-Value Double property =====<br />
This property appears as a text box.<br />
<source lang="xml"><br />
<DoubleVectorProperty<br />
name="YourDoubleVectorVariable"<br />
command="SetYourDoubleVectorVariable"<br />
number_of_elements="3"<br />
default_values="1.0 0.0 0.0"><br />
</DoubleVectorProperty><br />
</source><br />
<br />
===== Double property slider =====<br />
This creates a slider that ranges from 0.0 to 1.0<br />
<source lang="xml"><br />
<DoubleVectorProperty<br />
name="PercentToRemove"<br />
command="SetPercentToRemove"<br />
number_of_elements="1"<br />
default_values="0.1"><br />
<DoubleRangeDomain name="range" min="0.0" max="1.0" /><br />
</DoubleVectorProperty><br />
</source><br />
<br />
===== Drop down list =====<br />
This creates a drop down list with 3 choices. The values associated with the choices are specified.<br />
<source lang="xml"><br />
<br />
<IntVectorProperty<br />
name="TransformMode"<br />
command="SetTransformMode"<br />
number_of_elements="1"<br />
default_values="1"><br />
<EnumerationDomain name="enum"><br />
<Entry value="6" text="RigidBody"/><br />
<Entry value="7" text="Similarity"/><br />
<Entry value="12" text="Affine"/><br />
</EnumerationDomain><br />
<Documentation><br />
This property indicates which transform mode will be used.<br />
</Documentation><br />
</IntVectorProperty><br />
</source><br />
<br />
=== Adding a Reader ===<br />
<br />
Adding a new reader to a plugin is similar to adding a filter except that instead of the GUI configuration xml describing categories in the filter menu, we require the xml to define what file extensions this reader can handle. This xml (MyReaderGUI.xml) looks like this:<br />
<br />
<source lang="xml"><br />
<ParaViewReaders><br />
<Reader name="MyPNGReader" extensions="png"<br />
file_description="My PNG Files"><br />
</Reader><br />
</ParaViewReaders><br />
</source><br />
<br />
An example MyPNGReader.xml is shown below. In almost all cases you must have a SetFileName function property. You are free to have other properties as well, as with a standard (non reader) filter.<br />
<source lang="cmake"><br />
<ServerManagerConfiguration><br />
<ProxyGroup name="sources"><br />
<!-- ================================================================== --><br />
<SourceProxy name="MyPNGReader" class="vtkMyPNGReader" label="PNGReader"><br />
<Documentation<br />
long_help="Read a PNG file."<br />
short_help="Read a PNG file."><br />
</Documentation><br />
<StringVectorProperty<br />
name="FileName"<br />
animateable="0"<br />
command="SetFileName"<br />
number_of_elements="1"><br />
<FileListDomain name="files"/><br />
<Documentation><br />
This property specifies the file name for the PNG reader.<br />
</Documentation><br />
</StringVectorProperty><br />
<br />
<Hints><br />
<ReaderFactory extensions="png"<br />
file_description="PNG File Format" /><br />
</Hints><br />
</SourceProxy><br />
<!-- End MyPNGReader --><br />
</ProxyGroup><br />
<!-- End Filters Group --><br />
</ServerManagerConfiguration><br />
<br />
</source><br />
<br />
And the CMakeLists.txt looks as follows where vtkMyPNGReader.cxx is the source for the reader, MyPNGReader.xml is the server manager configuration xml, and MyReaderGUI.xml is the GUI configuration xml described above:<br />
<br />
<font color="violet">FIND_PACKAGE</font>(ParaView <font color="purple">REQUIRED</font>)<br />
<font color="violet">INCLUDE</font>(${PARAVIEW_USE_FILE})<br />
<font color="violet">ADD_PARAVIEW_PLUGIN</font>(MyReader "1.0" <br />
<font color="purple">SERVER_MANAGER_XML</font> MyPNGReader.xml<br />
<font color="purple">SERVER_MANAGER_SOURCES</font> vtkMyPNGReader.cxx <br />
<font color="purple">GUI_RESOURCE_FILES</font> MyReaderGUI.xml)<br />
<br />
If you want your reader to work correctly with a file series, please refer to [[Animating legacy VTK file series#Making custom readers work with file series|file series animation]] for details.<br />
<br />
Once you generate the project using cmake and compile the project, in Paraview go to "Tools->Manage Plugins/Extensions". Under "Local Plugins", click "Load New" and browse for the shared library file you just created. You should now see your new file type in the "Files of type" list in the "Open file" dialog.<br />
<br />
=== Adding a Writer ===<br />
<br />
Similar to a reader, for a writer we need to tell ParaView what extensions this writer supports. This can be done using the GUI XML as follows:<br />
<br />
<source lang="xml"><br />
<ParaViewWriters><br />
<Writer name="MyTIFFWriter"<br />
extensions="tif"<br />
file_description="My Tiff Files"><br />
</Writer><br />
</ParaViewWriters><br />
</source><br />
<br />
=== Adding Documentation for Plugins ===<br />
<br />
Starting with ParaView 3.14, developers can provide documentation for plugins that is shown in the ParaView Help Window. There are two mechanisms for adding documentation from plugins.<br />
<br />
* And SERVER_MANAGER_XML files added to the ADD_PARAVIEW_PLUGIN macro are automatically parsed to process <Documentation /> elements. HTML pages summarizing the proxy and properties are automatically generated. This ensures that when the user click "?" for a filter/source added via the plugin, the help window shows appropriate help pages.<br />
<br />
* Using DOCUMENTATION_DIR command in the call to ADD_PARAVIEW_PLUGIN() to specify a directory containing html pages and/or images that gets added a the documentation for the plugin (in addition to the documentation generated using the SERVER_MANAGER_XML files e.g.<br />
<br />
<font color="violet">ADD_PARAVIEW_PLUGIN</font>(SurfaceLIC "1.0"<br />
<font color="purple">DOCUMENTATION_DIR</font> "${CMAKE_CURRENT_SOURCE_DIR}/doc"<br />
<font color="purple">SERVER_MANAGER_XML</font> ${SM_XMLS}<br />
...)<br />
<br />
This results in adding documentation to the "ParaView Online Help" when the plugin is loaded, as shown below.<br />
<br />
[[File:Paraview doc plugin.png | 600px]]<br />
<br />
=== Adding a Toolbar ===<br />
<br />
Filters, reader and writers are by far the most common ways for extending ParaView. However, ParaView plugin functionality goes far beyond that. The following sections cover some of these advanced plugins that can be written.<br />
<br />
Applications use toolbars to provide easy access to commonly used functionality. It is possible to have plugins that add new toolbars to ParaView. The plugin developer implements his own C++ code to handle the callback for each button on the toolbar. Hence one can do virtually any operation using the toolbar plugin with some understanding of the ParaView Server Manager framework and the ParaView GUI components. <br />
<br />
Please refer to '''Examples/Plugins/SourceToolbar''' for this section. There we are adding a toolbar with two buttons to create a sphere and a cylinder source. For adding a toolbar, one needs to implement a subclass for [http://doc.trolltech.com/4.3/qactiongroup.html QActionGroup] which adds the [http://doc.trolltech.com/4.3/qaction.html QAction]s for each of the toolbar button and then implements the handler for the callback when the user clicks any of the buttons. In the example '''SourceToobarActions.h|cxx''' is the QActionGroup subclass that adds the two tool buttons.<br />
<br />
To build the plugin, the CMakeLists.txt file is:<br />
<br />
<font color="green"># We need to wrap for Qt stuff such as signals/slots etc. to work correctly.</font><br />
QT4_WRAP_CPP(MOC_SRCS SourceToolbarActions.h)<br />
<br />
<font color="green"># This is a macro for adding QActionGroup subclasses automatically as toolbars.</font><br />
<font color="violet">ADD_PARAVIEW_ACTION_GROUP</font>(IFACES IFACE_SRCS <br />
<font color="purple">CLASS_NAME</font> SourceToolbarActions<br />
<font color="purple">GROUP_NAME</font> "ToolBar/SourceToolbar")<br />
<br />
<font color="green"># Now create a plugin for the toolbar. Here we pass IFACES and IFACE_SRCS<br />
# which are filled up by the above macro with relevant entries</font><br />
<font color="violet">ADD_PARAVIEW_PLUGIN</font>(SourceToolbar "1.0"<br />
<font color="purple">GUI_INTERFACES</font> ${IFACES}<br />
<font color="purple">SOURCES</font> ${MOC_SRCS} ${IFACE_SRCS} <br />
SourceToolbarActions.cxx)<br />
<br />
For the GROUP_NAME, we are using '''ToolBar/SourceToolbar'''; here '''ToolBar''' is a keyword which implies that the action group is a toolbar (and shows up under '''View | Toolbars''' menu) with the name '''SourceToolbar'''. When the plugin is loaded, this toolbar will show up with two buttons.<br />
<br />
<br />
=== Adding a Menu ===<br />
<br />
Adding a menu to the menu bar of the main window is almost identical to [[#Adding a Toolbar]]. The only difference is that you use the keyword '''MenuBar''' in lieu of '''ToolBar''' in the GROUP_NAME of the action group. So if you change the ADD_PARAVIEW_ACTION_GROUP command above to the following, the plugin will add a menu titled MyActions to the menu bar.<br />
<br />
<font color="violet">ADD_PARAVIEW_ACTION_GROUP</font>(IFACES IFACE_SRCS <br />
<font color="purple">CLASS_NAME</font> SourceToolbarActions<br />
<font color="purple">GROUP_NAME</font> "MenuBar/MyActions")<br />
<br />
If you give the name of an existing menu, then the commands will be added to that menu rather than create a new one. So, for example, if the GROUP_NAME is '''MenuBar/File''', the commands will be added to the bottom of the File menu.<br />
<br />
=== Adding an object panel ===<br />
Object Panels are the panels for editing object properties.<br />
<br />
ParaView3 contains automatic panel generation code which is suitable for most objects. If you find your object doesn't have a good auto-generated panel, you can make your own.<br />
<br />
To make your own, there is an explanation found on [[CustomObjectPanels]]<br />
<br />
Now let's say we have our own panel we want to make for a ConeSource. In this example, we'll just add a simple label saying that this panel came from the plugin. In ConePanel.h:<br />
<br />
<source lang="cpp"><br />
#include "pqAutoGeneratedObjectPanel.h"<br />
#include <QLabel><br />
#include <QLayout><br />
<br />
class ConePanel : public pqAutoGeneratedObjectPanel<br />
{<br />
Q_OBJECT<br />
public:<br />
ConePanel(pqProxy* pxy, QWidget* p)<br />
: pqAutoGeneratedObjectPanel(pxy, p)<br />
{<br />
this->layout()->addWidget(new QLabel("This is from a plugin", this));<br />
}<br />
};<br />
</source><br />
<br />
Then in our CMakeLists.txt file:<br />
<font color="violet">FIND_PACKAGE</font>(ParaView <font color="purple">REQUIRED</font>)<br />
<font color="violet">INCLUDE</font>(${PARAVIEW_USE_FILE})<br />
QT4_WRAP_CPP(MOC_SRCS ConePanel.h)<br />
<font color="violet">ADD_PARAVIEW_OBJECT_PANEL</font>(IFACES IFACE_SRCS <br />
<font color="purple">CLASS_NAME</font> ConePanel<br />
<font color="purple">XML_NAME</font> ConeSource <font color="purple">XML_GROUP</font> sources)<br />
<font color="violet">ADD_PARAVIEW_PLUGIN</font>(GUIConePanel "1.0"<br />
<font color="purple">GUI_INTERFACES</font> ${IFACES}<br />
<font color="purple">SOURCES</font> ${MOC_SRCS} ${IFACE_SRCS})<br />
<br />
=== Adding components to Display Panel (decorating display panels) ===<br />
Display panel is the panel shown on the '''Display''' tab in the '''Object Inspector'''. It is possible to add GUI components to existing [http://www.paraview.org/ParaView3/Doc/Nightly/html/classpqDisplayPanel.html display panels].<br />
<br />
In this example we want to add a GUI element to the display panel shown for the spread sheet view to size of data that is fetched to the client at one time referred to as the ''Block Size''.<br />
<br />
For that we write the implementation in QObject subclass (say MySpreadsheetDecorator) with a constructor that takes in the pqDisplayPanel which is to be decorated.<br />
<br />
<source lang="cpp"><br />
...<br />
class MySpreadsheetDecorator : public QObject<br />
{<br />
...<br />
public:<br />
MySpreadsheetDecorator(pqDisplayPanel* panel);<br />
virtual ~MySpreadsheetDecorator();<br />
...<br />
};<br />
</source><br />
<br />
In the constructor, we have access to the panel, hence we can get the ''layout'' from it and add custom widgets to it. In this case, it would be a spin-box or a line edit to enter the block size. <br />
''pqDisplayPanel::getRepresentation()'' provides access to the representation being shown on the panel. We can use [http://www.paraview.org/ParaView3/Doc/Nightly/html/classpqPropertyLinks.html pqPropertyLinks] to link the "BlockSize" property on the representation with the spin-box for the block size so that when the widget is changed by the user, the property changes and vice-versa.<br />
<br />
Now the CMakeLists.txt to package this plugin looks like follows:<br />
<br />
QT4_WRAP_CPP(MOC_SRCS MySpreadsheetDecorator.h)<br />
<br />
<font color="green"># This is the macro to add a display panel decorator.<br />
# It needs the class name, and the panel types we are decorating. It fills up <br />
# IFACES and IFACE_SRCS with proper values as needed by ADD_PARAVIEW_PLUGIN macro.</font><br />
<font color="violet">ADD_PARAVIEW_DISPLAY_PANEL_DECORATOR</font>(<br />
IFACES IFACE_SRCS <br />
<font color="purple">CLASS_NAME</font> MySpreadsheetDecorator<br />
<font color="purple">PANEL_TYPES</font> pqSpreadSheetDisplayEditor <br />
<font color="green"># <-- This identifies the panel type(s) to decorate<br />
# Our decorator will only be instantiated for the panel types indicated here</font><br />
)<br />
<br />
<font color="green"># create a plugin</font><br />
<font color="violet">ADD_PARAVIEW_PLUGIN</font>(MySpreadsheetDecorator "1.0" <br />
<font color="purple">GUI_INTERFACES</font> ${IFACES} <br />
<font color="purple">SOURCES</font> MySpreadsheetDecorator.cxx ${MOC_SRCS} ${IFACE_SRCS})<br />
<br />
An example panel decorator is available under '''Examples/Plugins/DisplayPanelDecorator''' in the ParaView source.<br />
<br />
=== Autostart Plugins ===<br />
This refers to a plugin which needs to be notified when ParaView starts up or the plugin is loaded which ever happens later and then notified when ParaView quits. Example is in '''Examples/Plugins/Autostart''' in the ParaView source. For such a plugin, we need to provide a QObject subclass (pqMyApplicationStarter) with methods that need to be called on startup and shutdown.<br />
<br />
<source lang="cpp"><br />
...<br />
class pqMyApplicationStarter : public QObject<br />
{<br />
...<br />
public:<br />
// Callback for startup.<br />
// This cannot take any arguments<br />
void onStartup();<br />
<br />
// Callback for shutdown.<br />
// This cannot take any arguments<br />
void onShutdown();<br />
...<br />
};<br />
</source><br />
<br />
The CMakeLists.txt looks as follows:<br />
<br />
<font color="violet">FIND_PACKAGE</font>(ParaView <font color="purple">REQUIRED</font>)<br />
<font color="violet">INCLUDE</font>(${PARAVIEW_USE_FILE})<br />
<br />
QT4_WRAP_CPP(MOC_SRCS pqMyApplicationStarter.h)<br />
<br />
<font color="green"># Macro for auto-start plugins. We specify the class name<br />
# and the methods to call on startup and shutdown on an instance of that class.<br />
# It fills IFACES and IFACE_SRCS with proper values as needed by ADD_PARAVIEW_PLUGIN macro.</font><br />
<font color="violet">ADD_PARAVIEW_AUTO_START</font>(IFACES IFACE_SRCS <br />
<font color="purple">CLASS_NAME</font> pqMyApplicationStarter <font color="green"># the class name for our class</font><br />
<font color="purple">STARTUP</font> onStartup <font color="green"># specify the method to call on startup</font><br />
<font color="purple">SHUTDOWN</font> onShutdown <font color="green"># specify the method to call on shutdown</font><br />
)<br />
<br />
<font color="green"># Create a plugin for this starter </font><br />
<font color="violet">ADD_PARAVIEW_PLUGIN</font>(Autostart "1.0" <br />
<font color="purple">GUI_INTERFACES</font> ${IFACES} <br />
<font color="purple">SOURCES</font> pqMyApplicationStarter.cxx ${MOC_SRCS} ${IFACE_SRCS})<br />
<br />
=== Adding a custom view ===<br />
ParaView contains a render view for rendering 3d images. It also contains chart views to visualize data in line charts and histogram charts. You may want to create another custom view that does your own view of the data.<br />
<br />
For this example, we'll just make a simple Qt widget with labels showing the displays that have been added to the view.<br />
<br />
To make a custom view, we need both client and server side plugins.<br />
<br />
For our server side, we simply have:<br />
<source lang="xml"><br />
<ServerManagerConfiguration><br />
<ProxyGroup name="displays"><br />
<GenericViewDisplayProxy name="MyDisplay"<br />
base_proxygroup="displays" base_proxyname="GenericViewDisplay"><br />
</GenericViewDisplayProxy><br />
</ProxyGroup><br />
<ProxyGroup name="views"><br />
<ViewModuleProxy name="MyViewViewModule"<br />
base_proxygroup="rendermodules" base_proxyname="ViewModule"<br />
display_name="MyDisplay"><br />
</ViewModuleProxy><br />
</ProxyGroup><br />
<ProxyGroup name="filters"><br />
<SourceProxy name="MyExtractEdges" class="vtkExtractEdges"<br />
label="My Extract Edges"><br />
<InputProperty<br />
name="Input"<br />
command="SetInputConnection"><br />
<ProxyGroupDomain name="groups"><br />
<Group name="sources"/><br />
<Group name="filters"/><br />
</ProxyGroupDomain><br />
<DataTypeDomain name="input_type"><br />
<DataType value="vtkDataSet"/><br />
</DataTypeDomain><br />
</InputProperty><br />
<Hints><br />
<View type="MyView"/><br />
</Hints><br />
</SourceProxy><br />
</ProxyGroup><br />
</ServerManagerConfiguration><br />
</source><br />
<br />
We define "MyDisplay" as a simple display proxy, and "MyViewModule" as a simple view module.<br />
We have our own filter "MyExtractEdges" with a hint saying it prefers to be shown in a view of type "MyView." So if we create a MyExtractEdges in ParaView3, it'll automatically be shown in our custom view.<br />
<br />
We build the server plugin with a CMakeLists.txt file as:<br />
<font color="violet">FIND_PACKAGE</font>(ParaView REQUIRED)<br />
<font color="violet">INCLUDE</font>(${PARAVIEW_USE_FILE})<br />
<font color="violet">ADD_PARAVIEW_PLUGIN</font>(SMMyView "1.0" <font color="purple">SERVER_MANAGER_XML</font> MyViewSM.xml)<br />
<br />
<br />
Our client side plugin will contain an extension of pqGenericViewModule.<br />
We can let ParaView give us a display panel for these displays, or we can make our own deriving from pqDisplayPanel. In this example, we'll make a simple display panel.<br />
<br />
We implement MyView in MyView.h:<br />
<source lang="cpp"><br />
#include "pqGenericViewModule.h"<br />
#include <QMap><br />
#include <QLabel><br />
#include <QVBoxLayout><br />
#include <vtkSMProxy.h><br />
#include <pqDisplay.h><br />
#include <pqServer.h><br />
#include <pqPipelineSource.h><br />
<br />
/// a simple view that shows a QLabel with the display's name in the view<br />
class MyView : public pqGenericViewModule<br />
{<br />
Q_OBJECT<br />
public:<br />
MyView(const QString& viewtypemodule, const QString& group, const QString& name,<br />
vtkSMAbstractViewModuleProxy* viewmodule, pqServer* server, QObject* p)<br />
: pqGenericViewModule(viewtypemodule, group, name, viewmodule, server, p)<br />
{<br />
this->MyWidget = new QWidget;<br />
new QVBoxLayout(this->MyWidget);<br />
<br />
// connect to display creation so we can show them in our view<br />
this->connect(this, SIGNAL(displayAdded(pqDisplay*)),<br />
SLOT(onDisplayAdded(pqDisplay*)));<br />
this->connect(this, SIGNAL(displayRemoved(pqDisplay*)),<br />
SLOT(onDisplayRemoved(pqDisplay*)));<br />
<br />
}<br />
~MyView()<br />
{<br />
delete this->MyWidget;<br />
}<br />
<br />
/// we don't support save images<br />
bool saveImage(int, int, const QString& ) { return false; }<br />
vtkImageData* captureImage(int) { return NULL; }<br />
<br />
/// return the QWidget to give to ParaView's view manager<br />
QWidget* getWidget()<br />
{<br />
return this->MyWidget;<br />
}<br />
/// returns whether this view can display the given source<br />
bool canDisplaySource(pqPipelineSource* source) const<br />
{<br />
if(!source ||<br />
this->getServer()->GetConnectionID() != source->getServer()->GetConnectionID() ||<br />
QString("MyExtractEdges") != source->getProxy()->GetXMLName())<br />
{<br />
return false;<br />
}<br />
return true;<br />
}<br />
<br />
protected slots:<br />
void onDisplayAdded(pqDisplay* d)<br />
{<br />
QString text = QString("Display (%1)").arg(d->getProxy()->GetSelfIDAsString());<br />
QLabel* label = new QLabel(text, this->MyWidget);<br />
this->MyWidget->layout()->addWidget(label);<br />
this->Labels.insert(d, label);<br />
}<br />
<br />
void onDisplayRemoved(pqDisplay* d)<br />
{<br />
QLabel* label = this->Labels.take(d);<br />
if(label)<br />
{<br />
this->MyWidget->layout()->removeWidget(label);<br />
delete label;<br />
}<br />
}<br />
<br />
protected:<br />
<br />
QWidget* MyWidget;<br />
QMap<pqDisplay*, QLabel*> Labels;<br />
<br />
};<br />
</source><br />
<br />
And MyDisplay.h is:<br />
<source lang="cpp"><br />
#include "pqDisplayPanel.h"<br />
#include <QVBoxLayout><br />
#include <QLabel><br />
<br />
class MyDisplay : public pqDisplayPanel<br />
{<br />
Q_OBJECT<br />
public:<br />
MyDisplay(pqDisplay* display, QWidget* p)<br />
: pqDisplayPanel(display, p)<br />
{<br />
QVBoxLayout* l = new QVBoxLayout(this);<br />
l->addWidget(new QLabel("From Plugin", this));<br />
}<br />
};<br />
</source><br />
<br />
The CMakeLists.txt file to build the client plugin would be:<br />
<font color="violet">FIND_PACKAGE</font>(ParaView <font color="purple">REQUIRED</font>)<br />
<font color="violet">INCLUDE</font>(${PARAVIEW_USE_FILE})<br />
<br />
QT4_WRAP_CPP(MOC_SRCS MyView.h MyDisplay.h)<br />
<br />
<font color="violet">ADD_PARAVIEW_VIEW_MODULE</font>(IFACES IFACE_SRCS <br />
<font color="purple">VIEW_TYPE</font> MyView <font color="purple">VIEW_XML_GROUP</font> views<br />
<font color="purple">DISPLAY_XML</font> MyDisplay <font color="purple">DISPLAY_PANEL</font> MyDisplay)<br />
<br />
<font color="violet">ADD_PARAVIEW_PLUGIN</font>(GUIMyView "1.0" <font color="purple">GUI_INTERFACES</font> ${IFACES}<br />
<font color="purple">SOURCES</font> ${MOC_SRCS} ${IFACE_SRCS})<br />
<br />
We load the plugins in ParaView, and we create something like a Cone, then create a "My Extract Edges" filter. The multiview manager will create a new view and the label "Display (151)".<br />
<br />
In ParaView 3.4, there's also a macro, ADD_PARAVIEW_VIEW_OPTIONS() which allows adding options pages for the custom view, accessible from Edit -> View Settings. The example in ParaView3/Examples/Plugins/GUIView demonstrates this (until more information is put here).<br />
<br />
=== Adding new Representations for 3D View using Plugins <font color="green"> * new in version 3.7</font> ===<br />
<br />
ParaView’s 3D view the most commonly used view for showing polygonal or volumetric data. By default, ParaView provides representation-types for showing the dataset as surface, wireframe, points etc. It’s possible to add representations using plugins that extends this set of available representation-types.<br />
<br />
Before we start looking at how to write such a plugin, we need to gain some understanding of the 3D view and its representations. The 3D view uses 3 basic representation proxies for rendering all types of data:<br />
* (representations, UnstructuredGridRepresentation) – for vtkUnstructuredGrid or a composite dataset consisting of vtkUnstructuredGrid.<br />
* (representations, UniformGridRepresentation) – for vtkImageData or a composite dataset consisting of vtkImageData<br />
* (representations, GeometryRepresentation) – for all other data types.<br />
<br />
Each of these representation proxies are basically composite-representation proxies that use other representation proxies to do the actual rendering e.g. GeometryRepresentation uses SurfaceRepresentation for rendering the data as wireframe, points, surface and surface-with-edges and OutlineRepresentation for rendering an outline for the data. Subsequently, the 3 composite-representation proxies provide a property named '''Representation''' which allows the user to pick the representation type he wants to see the data as. The composite-representation proxy has logic to enable one of its internal representations based on the type chosen by the user.<br />
<br />
These 3-composite representation types are fixed and cannot be changed by plugins. What plugins can do is add more internal representations to any of these 3 composite representations to support new representations types, that the user can choose using the representation-type combo box on the display tab or in the toolbar.<br />
<br />
[[Image:Representationplugin.png|800px|Figure: Representation type combo-box allowing user to choose the sub-representation to use]]<br />
<br />
==== Using a new Mapper ====<br />
In this example, we see how to integrate a special poly-data mapper written in VTK into ParaView. Let’s say the mapper is called vtkMySpecialPolyDataMapper which is simply a subclass of vtkPainterPolyDataMapper. In practice, vtkMySpecialPolyDataMapper can internally use different painters to do perform special rendering tasks.<br />
<br />
To integrate this mapper into ParaView first we need to create a vtkSMRepresentationProxy subclass for that uses this mapper. In this example, since the mapper is a simple replacement for the standard vtkPainterPolyDataMapper, we can define our representation proxy as a specialization of the “SurfaceRepresentation” as follows:<br />
<br />
<source lang="xml"><br />
<ServerManagerConfiguration><br />
<ProxyGroup name="representations"><br />
<RepresentationProxy name="MySpecialRepresentation"<br />
class="vtkMySpecialRepresentation"<br />
processes="client|renderserver|dataserver"<br />
base_proxygroup="representations"<br />
base_proxyname="SurfaceRepresentation"><br />
<Documentation><br />
This is the new representation type we are adding. This is identical to<br />
the SurfaceRepresentation except that we are overriding the mapper with<br />
our mapper.<br />
</Documentation><br />
<br />
<!-- End of MySpecialRepresentation --><br />
</RepresentationProxy><br />
</ProxyGroup><br />
<br />
</ServerManagerConfiguration><br />
</source><br />
<br />
vtkMySpecialRepresentation is a subclass of vtkGeometryRepresentationWithFaces where in the constructor we simply override the mappers as follows:<br />
<br />
<source lang="cpp"><br />
//----------------------------------------------------------------------------<br />
vtkMySpecialRepresentation::vtkMySpecialRepresentation()<br />
{<br />
// Replace the mappers created by the superclass.<br />
this->Mapper->Delete();<br />
this->LODMapper->Delete();<br />
<br />
this->Mapper = vtkMySpecialPolyDataMapper::New();<br />
this->LODMapper = vtkMySpecialPolyDataMapper::New();<br />
<br />
// Since we replaced the mappers, we need to call SetupDefaults() to ensure<br />
// the pipelines are setup correctly.<br />
this->SetupDefaults();<br />
}<br />
</source><br />
<br />
<br />
Next we need to register this new type with the any (or all) of the 3 standard composite representations so that it will become available to the user to choose in the representation type combo-box.<br />
To decide which of the 3 composite representations we want to add our representation to, think of the input data types our representation supports. If it can support any type of data set, then we can add our representation all the 3 representations (as is the case with this example). However if we are adding a representation for volume rendering of vtkUnstructuredGrid then we will add it only to the UnstructuredGridRepresentation. This is done by using the Extension xml tag. It simply means that we are extending the original XML for the proxy definition with the specified additions. Now to make this representation available as a type to the user, we use the <RepresentationType /> element , with “text” used as the text shown for the type in the combo-box, “subproxy” specifies the name of representation –subproxy to activate when the user chooses the specified type. Optionally one can also specify the “subtype” attribute, which if present is the value set on a property named “Representation” for the subproxy when the type is chosen. This allows for the subproxy to provide more than one representation type.<br />
<br />
<source lang="xml"><br />
<ServerManagerConfiguration><br />
<ProxyGroup name="representations"><br />
<br />
<Extension name="GeometryRepresentation"><br />
<Documentation><br />
Extends standard GeometryRepresentation by adding<br />
MySpecialRepresentation as a new type of representation.<br />
</Documentation><br />
<br />
<!-- this adds to what is already defined in PVRepresentationBase --><br />
<RepresentationType subproxy="MySpecialRepresentation"<br />
text="Special Mapper" subtype="1" /><br />
<br />
<SubProxy><br />
<Proxy name="MySpecialRepresentation"<br />
proxygroup="representations" proxyname="MySpecialRepresentation"><br />
</Proxy><br />
<ShareProperties subproxy="SurfaceRepresentation"><br />
<Exception name="Input" /><br />
<Exception name="Visibility" /><br />
<Exception name="Representation" /><br />
</ShareProperties><br />
</SubProxy><br />
</Extension><br />
<br />
</ProxyGroup><br />
</ServerManagerConfiguration><br />
</source><br />
<br />
The CMakeLists.txt file is not much different from what it would be like for adding a simple filter or a reader.<br />
<font color="violet">FIND_PACKAGE</font>(ParaView <font color="purple">REQUIRED</font>)<br />
<font color="violet">INCLUDE</font>(${PARAVIEW_USE_FILE})<br />
<br />
<font color="violet">ADD_PARAVIEW_PLUGIN</font>(Representation "1.0"<br />
<font color="purple">SERVER_MANAGER_XML</font> Representation.xml<br />
<font color="purple">SERVER_MANAGER_SOURCES</font> vtkMySpecialPolyDataMapper.cxx vtkMySpecialRepresentation.cxx<br />
)<br />
<br />
<br />
Source code for this example is available under '''Examples/Plugins/Representation''' in the ParaView source directory.<br />
<br />
==== Using Hardware Shaders ====<br />
One common use-case for adding new representations is to employ specialized hardware shaders written using shading languages such as GLSL or Cg to perform specialized rendering. Such special rendering algorithms can be encapsulated in a special mapper or a vtkPainter subclass and then making a special mapper that uses the painter.<br />
<br />
In this example, we have a new vtkPainter subclasses vtkVisibleLinePainter that uses shaders to prune hidden lines from a wireframe rendering. Following is the CMakeLists.txt<br />
<font color="violet">FIND_PACKAGE</font>(ParaView <font color="purple">REQUIRED</font>)<br />
<font color="violet">INCLUDE</font>(${PARAVIEW_USE_FILE})<br />
<font color="green"><br />
# Compile-in all GLSL files are strings.<br />
# const char* with the names same as that of the file then become available for<br />
# use.</font><br />
<font color="violet">encode_files_as_strings</font>(ENCODED_STRING_FILES<br />
vtkPVLightingHelper_s.glsl<br />
vtkPVColorMaterialHelper_vs.glsl<br />
vtkVisibleLinesPainter_fs.glsl<br />
vtkVisibleLinesPainter_vs.glsl<br />
)<br />
<br />
<font color="violet">add_paraview_plugin</font>(<br />
HiddenLinesRemoval "1.0"<br />
<font color="purple">SERVER_MANAGER_XML</font><br />
HiddenLinesRemovalPlugin.xml<br />
<br />
<font color="purple">SERVER_MANAGER_SOURCES</font><br />
vtkVisibleLinesPolyDataMapper.cxx<br />
<br />
<font color="purple">SOURCES</font> vtkPVColorMaterialHelper.cxx<br />
vtkPVLightingHelper.cxx<br />
vtkVisibleLinesPainter.cxx<br />
${ENCODED_STRING_FILES}<br />
)<br />
<br />
vtkVisibleLinesPolyDataMapper is simply a vtkPainterPolyDataMapper subclass, like the previous example, which inserts the vtkVisibleLinesPainter at the appropriate location in the painter chain. The server manager configuration xml doesn’t look much different from the Using a new Mapper example except that we replace the mapper to be vtkVisibleLinesPolyDataMapper.<br />
<br />
Source code for this example is available under Examples/Plugins/HiddenLineRemoval in the ParaView source directory.<br />
<br />
=== Embedding Python Source as Modules ===<br />
<br />
Embedding Python source was first available in ParaView 3.6. Also be aware that you need Python 2.3 or greater to be able to load a plugin with embedded Python source.<br />
<br />
It is possible to take a Python module written in Python source code and embed it into a ParaView plugin. Once the plugin is loaded, the Python interpreter within the ParaView client (or pvpython or pvbatch) can access your module using the Python <tt>import</tt> command. Of course, Python has its own way of distributing modules; however, if your Python source relies on, say, a filter defined in a plugin or something else in a plugin, like a toolbar, relies on executing your Python module, then it can be more convenient to distribute and load everything if they are all wrapped into a single plugin.<br />
<br />
Let us say that you have a file named helloworld.py with the following contents.<br />
<br />
<source lang="python"><br />
def hello():<br />
print "Hello world"<br />
</source><br />
<br />
You can add this to a plugin by simply listing the file in the <tt>PYTHON_MODULES</tt> option of <tt>ADD_PARAVIEW_PLUGIN</tt>. Note that the file must be located in the same directory as the CMakeLists.txt file (more on that later).<br />
<br />
<font color="violet">ADD_PARAVIEW_PLUGIN</font>(MyPythonModules "1.0"<br />
<font color="purple">PYTHON_MODULES</font> helloworld.py<br />
)<br />
<br />
Once you load this plugin into ParaView (no matter how you do it), you can then access this source code by importing the helloworld module.<br />
<br />
<source lang="python"><br />
>>> paraview.servermanager.LoadPlugin('libPythonTest.dylib')<br />
>>> import helloworld<br />
>>> helloworld.hello()<br />
Hello world<br />
</source><br />
<br />
Note that if you are using the ParaView client GUI, you can load the plugin through the GUI's Plugin Manager or by autoloading the plugin (as described in [[#Using Plugins]]) instead of using the <tt>LoadPlugin</tt> Python command. You do, however, need the <tt>import</tt> command.<br />
<br />
It is also possible to have multiple modules and to embed packages with their own submodules (with an arbitrary depth of packages). You can set this up by simply arranging your Python source in directories representing the packages in the same way you set them up if you were loading them directly from Python (in fact, that might simplify debugging your Python code). If you have a file named __init__.py, that file is taken to be the implementation of the package represented by the directory it is contained in. This is the same behavior as Python itself.<br />
<br />
<font color="violet">ADD_PARAVIEW_PLUGIN</font>(MyPythonModules "1.0"<br />
<font color="purple">PYTHON_MODULES</font> helloworld.py <font color="green"># Becomes module helloworld</font><br />
hello/__init__.py <font color="green"># Becomes package hello</font><br />
hello/world.py <font color="green"># Becomes module hello.world</font><br />
)<br />
<br />
Note that when Python imports a module, it first imports all packages in which it is contained. The upshot is that if you define a module in a package within your plugin, you must also make sure that the package is also defined somewhere. In the example above, if you removed the hello/__init__.py source file, you would not be able to load the hello/world.py file. Thus, it is best to include a __init__.py in every package directory you make, even if it is empty.<br />
<br />
== Examples ==<br />
<br />
The ParaView CVS repository contains many examples in the Plugins directory. Additional examples are available on this wiki at the [[Plugin Examples]] entry.<br />
<br />
== Plugins in Static Applications ==<br />
<br />
<font color="magenta">This functionality is new in ParaView 3.12</font><br />
<br />
It is possible to import plugins into a ParaView-based application at compile time. When building ParaView-based applications statically, this is the only option to bring in components from plugins. When built statically (i.e. with BUILD_SHARED_LIBS set to false), ParaView will automatically link and load plugins that were enabled via CMake by inserting the necessary PV_PLUGIN_IMPORT_INIT and PV_PLUGIN_IMPORT macros.<br />
<br />
The code below shows how the PV_PLUGIN macros would be used to statically load plugins in custom applications:<br />
<br />
<source lang="cpp"><br />
#include "vtkPVPlugin.h"<br />
<br />
// Adds required forward declarations.<br />
PV_PLUGIN_IMPORT_INIT(MyFilterPlugin)<br />
PV_PLUGIN_IMPORT_INIT(MyReaderPlugin)<br />
<br />
class MyMainWindow : public QMainWindow<br />
{<br />
// ....<br />
};<br />
<br />
MyMainWindow::MyMainWindow(...)<br />
{<br />
// ... after initialization ...<br />
<br />
// Calls relevant callbacks to load the plugins and update the <br />
// GUI/Server-Manager<br />
PV_PLUGIN_IMPORT(MyFilterPlugin);<br />
PV_PLUGIN_IMPORT(MyReaderPlugin);<br />
<br />
}<br />
</source><br />
<br />
== Pitfalls ==<br />
=== Tools->Manage Plugins is not visible! ===<br />
Plugins can only be loaded dynamically when ParaView is built with shared libraries. You must recompile Paraview with BUILD_SHARED_LIBS ON.<br />
<br />
=== SYNTAX ERROR found in parsing the header file ===<br />
When writing a VTK reader, filter, or writer for use with Paraview, any variable declaration in header files involving VTK classes or your own derived data type has to be wrapped in a "//BTX" "//ETX" pair of comments to tell the parser (Paraview's vtkWrapClientServer) to ignore these lines. The following is an example based on ParaView/Examples/Plugins/Filter/vtkMyElevationFilter.h:<br />
<source lang="cpp"><br />
class VTK_EXPORT vtkMyElevationFilter : public vtkElevationFilter<br />
{<br />
private:<br />
vtkMyElevationFilter(const vtkMyElevationFilter&);<br />
void operator=(const vtkMyElevationFilter&);<br />
<br />
//BTX<br />
vtkSmartPointer<vtkPolyData> Source;<br />
vtkSmartPointer<vtkPolyData> Target;<br />
//ETX<br />
};<br />
</source><br />
<br />
If these tags are omitted, building the plugin will fail with an error message like the following:<br />
<source lang="text"><br />
*** SYNTAX ERROR found in parsing the header file <something>.h before line <line number> ***<br />
</source><br />
<br />
=== Compile error "invalid conversion from ‘vtkYourFiltersSuperClass*’ to ‘vtkYourFilter*’" ===<br />
Any VTK object that needs to be treated as a filter or source has to be a vtkAlgorithm subclass. The particular superclass a filter is derived from has to be given not only in the standard C++ way<br />
<source lang="cpp"><br />
class VTK_EXPORT vtkMyElevationFilter : public vtkElevationFilter<br />
</source><br />
<br />
but additionally declared with help of the "vtkTypeRevisionMacro". For the example given above<br />
<source lang="cpp"><br />
class VTK_EXPORT vtkMyElevationFilter : public vtkElevationFilter<br />
{<br />
public:<br />
vtkTypeRevisionMacro(vtkMyElevationFilter, vtkElevationFilter);<br />
}<br />
</source><br />
<br />
Otherwise, compiling the filter will fail with a variety of error messages (depending on superclass) like<br />
<source lang="cpp"><br />
vtkMyElevationFilter.cxx:19: error: no 'void vtkMyElevationFilter::CollectRevisions(std::ostream&)'<br />
member function declared in class 'vtkMyElevationFilter'<br />
</source><br />
or<br />
<source lang="cpp"><br />
vtkMyElevationFilterClientServer.cxx:97: error: invalid conversion from ‘vtkPolyDataAlgorithm*’ to<br />
‘vtkICPFilter*’<br />
</source><br />
<br />
=== Plugin loaded, but invalid ELF header ===<br />
What would cause this???<br />
<br />
=== Undefined symbol _ZTV12vtkYourFilter ===<br />
When you load your plugin, if you see a yellow ! warning triangle that says "undefined symbol....", you need to add<br />
<source lang="cpp"><br />
vtkCxxRevisionMacro(vtkYourFilter, "$Revision$");<br />
</source><br />
to your header file and recompile the plugin.<br />
<br />
=== Mysterious Segmentation Faults in plugins that use custom VTK classes ===<br />
<br />
This primarily concerns plugins that make calls to your own custom "vtkMy"(or whatever you called it) library of VTK extensions.<br />
<br />
Symptoms:<br />
* The plugin will load, but causes a segfault when you try to use it.<br />
* If you use a debugger you may notice that in some cases when your code calls vtkClassA.MethodB, what actually gets called is vtkClassC.MethodD, where MethodB is a virtual member function. This is occurs because of different vtable entries in the Paraview-internal versions of the VTK libraries.<br />
<br />
The solution is to make sure that your vtkMy library is compiled against Paraview's internal VTK libraries. Even if you compiled VTK and Paraview using the same VTK sources, you *must not* link against the external VTK libraries. (The linker won't complain, because it will find all the symbols it needs, but this leads to unexpected behaviour.)<br />
<br />
To be explicit, when compiling your vtkMy library, you must set the cmake variable VTK_DIR to point to the 'VTK' subdirectory in the directory in which you built Paraview. (On my system, cmake automatically finds vtk at /usr/lib/vtk-5.2, and I must change VTK_DIR to ~/source/ParaView3/build/VTK .)<br />
<br />
=== "Is not a valid Qt plugin" in Windows ===<br />
<br />
Make sure that all the DLLs that your plugin depends on are on the PATH. If in doubt, try placing your plugin and all its dependent DLLs in the bin dir of your build and load it from there.<br />
<br />
<br />
{{ParaView/Template/Footer}}</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/NextGen&diff=28230VTK/NextGen2010-08-13T05:11:37Z<p>Aashish.chaudhary: Created page with '== Introduction == This section is put together to share code / examples for cutting edge ideas / work related to VTK. == Topics == === Matured === * Collision detection (vtk…'</p>
<hr />
<div>== Introduction == <br />
This section is put together to share code / examples for cutting edge ideas / work related to VTK.<br />
<br />
== Topics ==<br />
<br />
=== Matured === <br />
* Collision detection (vtkCollisionDetectionFilter) for computing the intersection of 2 polydata's - http://www.bioengineering-research.com/vtk/vtkCollisionDetectionFilter.htm<br />
* vtkBezierSurfaceWidget from VTK Designer (http://sourceforge.net/projects/vtkdesigner/) to fit bezier surfaces from a point set<br />
* Point set processing classes - http://www.insight-journal.org/browse/publication/708<br />
<br />
=== Work In Progress ===<br />
* <br />
<br />
=== Ideas ===<br />
*</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=Kitware_Scene_Graph_Meeting_April_6,_2010_KHQ&diff=21648Kitware Scene Graph Meeting April 6, 2010 KHQ2010-04-08T19:29:08Z<p>Aashish.chaudhary: </p>
<hr />
<div>=== Kitware Scene Graph Meeting April 6, 2010 KHQ ===<br />
<br />
1. Presentation by Michel of slides briefly describing JHU and existing Kitware requirements for KWScene. <br />
[https://docs.google.com/a/kitware.com/present/edit?id=0AZZGdYgzhGhJZHNiZDQ3OF85MGduMmhibWRt&hl=en]<br />
<br />
2. Description by Julien Finet at KRS of requirements for ParaView for transforms, which led to a description by Luis of transforms in KWScene. The possibility of reusing the IGSTK spatial relationships model, where every object is connected to a parent was evoked. IGSTK uses rigid transforms, which could be expanded here. He presented two potentially conflictint use-cases, namely a large collection of small objects, such as the Computer Vision group's requirement, or a small collection of large objects, as is the case for JHU.<br />
<br />
3. Amitha presented a Computer Vision group usecase in more detail, which would involve a reprojection on a 3D space onto where an image came from on the ground. Also a possibility of affixing avatars to 3D space. A rapid refresh rate, 30 Hz, would be needed. <br />
<br />
4. Berk boiled down the Scene graph use-cases to two: i) representation of a hierarchy of objects, and ii) input/output of that hierarchy. He suggested that the Scene graph should not compete with VTK. It was later pointed that VTK flattens the representation, and that KWScene would bring something complementary. Berk's use-case involved multi-block rendering, featuring block-wise differences in color, opacity, and so on. <br />
<br />
5. Aashish indicated that a requirement of his is to make the scene graph fast, in cases where the scene data does not change (often). <br />
<br />
6. Will listed 4 requirements of the Scene Graph: i) representation, ii) rendering, iii) attributes, and iv) association with annotation (e.g. labeled anatomical atlas).<br />
<br />
7. The discussion moved to space-time representation. It was suggested that one efficiency that would be useful is the iterative estimation of the tree at time T_N on the basis of that tree at time T_N-1. Will also alluded to piecewise-linear paths featuring time, in the context of a previous project: Visual Journal, in which Rusty was also involved. (It would be useful to describe this project in the wiki, and its relevance to KWScene...)<br />
<br />
8. Use-cases by other groups were fleshed out somewhat... Utkarsh indicated that Paraview requirements would be of an intermediate layer that manages the visualization. <br />
<br />
9. The possible adoption of a proprietary file format for KWScene was suggested by Will, in part because of this time component in the information. The Visual Journal project also had a file format.<br />
<br />
10. Bob stressed the need for a formalism of what flows through the tree. His application for KWScene emphasized Computational Model Building. He indicated that a lot of responsibility may fall on the generator. <br />
<br />
11. The discussion turned to funding. We should described how much is JHU funding. Other potential clients of the scene graph, whose use-cases were described above, would apply for funding as well.<br />
<br />
12. During the discussion all agreed that we need to investigate more on this using two approaches. 1) KWScene becomes true SG 2). KWScene uses third party SG libraries such as OpenSG or OpenSceneGraph.</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/Geovis_vision_toolkit&diff=20316VTK/Geovis vision toolkit2010-02-05T23:39:55Z<p>Aashish.chaudhary: </p>
<hr />
<div>==Requirements==<br />
<br />
There are two parts to the project: <br />
<br />
* Video / related meta data rendering and interactions.<br />
* Displaying video / meta data in geospatial context. <br />
<br />
As per our discussion we have gathered following requirements for the project. <br />
<br />
* Easy to put together.<br />
* Provides 2D and 3D mode where in 2D it will allow quick validation, manipulation abilities. <br />
* Provides the ability to visualize, video, track, and associated ranking. <br />
* Ability to provide input as sequence of images or a video file. <br />
* Provides the ability to manipulate track data. User should be able to insert a new one, modify the existing one. <br />
* Provides the ability to select a region with pixel level accuracy and draw a track on top of it. <br />
* Provides the ability to play many video files (small or large video) files.<br />
* Provides a layout for the videos in space so that each can be seen clearly for a view point. <br />
* Allows the videos to play individually or globally.1<br />
* Provides the ability to toggle different layers of information.<br />
* Provides geo spatial context.<br />
<br />
==Design==<br />
<br />
<graphviz><br />
digraph G {<br />
rankdir=BT<br />
fontsize = 12<br />
fontname = Helvetica<br />
node [ fontsize = 9 fontname = Helvetica shape = record height = 0.1 ]<br />
edge [ fontsize = 9 fontname = Helvetica ]<br />
<br />
vtkVideoElementRepresentation -> vtkRenderedRepresentation<br />
vtkTrackRepresentation -> vtkRenderedRepresentation<br />
vtkVideoReprensentation -> vtkRenderedRepresentation<br />
vtkVisStrategyRepresentation -> vtkRenderedRepresentation<br />
} <br />
<br />
</graphviz><br />
<br />
* vtkVideoElementRepresentation would contain all the information layers and make sure that they are in sink. <br />
Also this is the representation thats responsible for consuming the data for <br />
each video.<br />
<br />
* vtkVisStrategyRepresentation <br />
<br />
<source lang="cpp"><br />
<br />
// Interface for this class is not as clear as it should be. Basically it transforms all layers<br />
// associated with any given vtkVideoElementRepresentation and represents this transformation via <br />
// some geometry. <br />
class vtkVisStrategyRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
<br />
// Return transformation matrix that can be used to offset any other representation. <br />
vtkMatrix4x4 GetMatrix(); <br />
<br />
virtual void PrepareForRendering(vtkRenderView* view); <br />
};<br />
<br />
<br />
class vtkVideoElementRepresentation : public vtkRenderedRepresentation<br />
{ <br />
public:<br />
void AddTrackRepresentation(vtkTrackRepresentation* tr); <br />
void AddVideoRepresentation(vtkVideoRepresentation* vr); <br />
void SetVisStrategyRepresentation(vtkVisStrategyRepresentation* vsr);<br />
<br />
// Update all the layers and call \c PrepareForRendering(....) on each. <br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
<br />
private: <br />
<br />
Internal* Implementation; <br />
};<br />
<br />
<br />
class vtkTrackRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
<br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
<br />
class vtkVideoRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
void SetScalarProperty(double value, double range[2]);<br />
<br />
// Can have 0 or many scalar representations. <br />
void AddScalarRepresentation(ScalarRepMode);<br />
<br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
</source><br />
<br />
<br />
== Geovis == <br />
<br />
* Dealing with precision issues<br />
<br />
When dealing with large numbers (earth radius is 6357000) in rendering causes issues of Jitter. This is a known problem as the GPU uses single precision floats as the data type. <br />
There could be couple of ways this issue can be dealt with. <br />
<br />
** On the fly change of origin <br />
** Piecewise change of origin <br />
** Using FO (floating approach as described in this paper link??. http://www.floatingorigin.com/pubs/thorneC-FloatingOrigin.pdf<br />
** Use lat / lon in radians and height in Km instead of meter.<br />
** RTC / RTE approaches as suggested here: http://blogs.agi.com/insight3d/index.php/2008/09/03/precisions-precisions/#more-80<br />
** Use double precision all and cast it to float. (It does help a bit but the problem exists).</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/Geovis_vision_toolkit&diff=20315VTK/Geovis vision toolkit2010-02-05T23:29:13Z<p>Aashish.chaudhary: </p>
<hr />
<div>==Requirements==<br />
<br />
There are two parts to the project: <br />
<br />
* Video / related meta data rendering and interactions.<br />
* Displaying video / meta data in geospatial context. <br />
<br />
As per our discussion we have gathered following requirements for the project. <br />
<br />
* Easy to put together.<br />
* Provides 2D and 3D mode where in 2D it will allow quick validation, manipulation abilities. <br />
* Provides the ability to visualize, video, track, and associated ranking. <br />
* Ability to provide input as sequence of images or a video file. <br />
* Provides the ability to manipulate track data. User should be able to insert a new one, modify the existing one. <br />
* Provides the ability to select a region with pixel level accuracy and draw a track on top of it. <br />
* Provides the ability to play many video files (small or large video) files.<br />
* Provides a layout for the videos in space so that each can be seen clearly for a view point. <br />
* Allows the videos to play individually or globally.1<br />
* Provides the ability to toggle different layers of information.<br />
* Provides geo spatial context.<br />
<br />
==Design==<br />
<br />
<graphviz><br />
digraph G {<br />
rankdir=BT<br />
fontsize = 12<br />
fontname = Helvetica<br />
node [ fontsize = 9 fontname = Helvetica shape = record height = 0.1 ]<br />
edge [ fontsize = 9 fontname = Helvetica ]<br />
<br />
vtkVideoElementRepresentation -> vtkRenderedRepresentation<br />
vtkTrackRepresentation -> vtkRenderedRepresentation<br />
vtkVideoReprensentation -> vtkRenderedRepresentation<br />
vtkVisStrategyRepresentation -> vtkRenderedRepresentation<br />
} <br />
<br />
</graphviz><br />
<br />
* vtkVideoElementRepresentation would contain all the information layers and make sure that they are in sink. <br />
Also this is the representation thats responsible for consuming the data for <br />
each video.<br />
<br />
* vtkVisStrategyRepresentation <br />
<br />
<source lang="cpp"><br />
<br />
// Interface for this class is not as clear as it should be. Basically it transforms all layers<br />
// associated with any given vtkVideoElementRepresentation and represents this transformation via <br />
// some geometry. <br />
class vtkVisStrategyRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
<br />
// Return transformation matrix that can be used to offset any other representation. <br />
vtkMatrix4x4 GetMatrix(); <br />
<br />
virtual void PrepareForRendering(vtkRenderView* view); <br />
};<br />
<br />
<br />
class vtkVideoElementRepresentation : public vtkRenderedRepresentation<br />
{ <br />
public:<br />
void AddTrackRepresentation(vtkTrackRepresentation* tr); <br />
void AddVideoRepresentation(vtkVideoRepresentation* vr); <br />
void SetVisStrategyRepresentation(vtkVisStrategyRepresentation* vsr);<br />
<br />
// Update all the layers and call \c PrepareForRendering(....) on each. <br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
<br />
private: <br />
<br />
Internal* Implementation; <br />
};<br />
<br />
<br />
class vtkTrackRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
<br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
<br />
class vtkVideoRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
void SetScalarProperty(double value, double range[2]);<br />
<br />
// Can have 0 or many scalar representations. <br />
void AddScalarRepresentation(ScalarRepMode);<br />
<br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
</source><br />
<br />
<br />
== Geovis == <br />
<br />
* Dealing with precision issues<br />
<br />
When dealing with large numbers (earth radius is 6357000) in rendering causes issues of Jitter. This is a known problem as the GPU uses single precision floats as the data type. <br />
There could be couple of ways this issue can be dealt with. <br />
<br />
1. On the float change of origin <br />
2. Piecewise change of origin <br />
3. Using FO (floating approach as described in this paper link??. <br />
4. Use lat / lon in radians and height in Km instead of meter.</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK&diff=20163VTK2010-02-03T16:37:34Z<p>Aashish.chaudhary: /* Current Projects */</p>
<hr />
<div>http://public.kitware.com/images/logos/vtk-logo2.jpg<br />
<br /><br />
The Visualization ToolKit (VTK) is an open source, freely available software system for 3D computer graphics, image processing, and visualization used by thousands of researchers and developers around the world. VTK consists of a C++ class library, and several interpreted interface layers including Tcl/Tk, Java, and Python. Professional support and products for VTK are provided by Kitware, Inc. ([http://www.kitware.com www.kitware.com]) VTK supports a wide variety of visualization algorithms including scalar, vector, tensor, texture, and volumetric methods; and advanced modeling techniques such as implicit modelling, polygon reduction, mesh smoothing, cutting, contouring, and Delaunay triangulation. In addition, dozens of imaging algorithms have been directly integrated to allow the user to mix 2D imaging / 3D graphics algorithms and data.<br />
<br />
==Administrative Topics==<br />
<br />
* Where can I find more [[VTK Additional Information|information about VTK]]?<br />
<br />
* [[VTK 5.4 Release Planning]]<br />
<br />
* Where can I [http://vtk.org/get-software.php download VTK]?<br />
<br />
* Where can I download a tarball of the [http://vtk.org/files/nightly/vtkNightlyDocHtml.tar.gz nightly HTML documentation]?<br />
<br />
* Where can I get [[VTK Datasets]]?<br />
<br />
* [[VTK Classes|Extending VTK]]<br />
<br />
* [[VTK Coding Standards]]<br />
<br />
* [[VTK cvs commit Guidelines]]<br />
<br />
* [[VTK Patch Procedure]] -- merge requests for the current release branch<br />
<br />
* [[VTK Scripts|Extending VTK with Scripts]]<br />
<br />
* [[VTK Tools|VTK-Based Tools and Applications]]<br />
<br />
* What are some [[VTK Projects|projects using VTK]]?<br />
<br />
* [[Proposed Changes to VTK | Proposed Changes to VTK]]<br />
<br />
* [[VTK FAQ|Frequently asked questions (FAQ)]]<br />
<br />
* [[VTK OpenGL|Common OpenGL troubles]]<br />
<br />
* [[VTK Related Job Opportunities|VTK Related Job Opportunities]]<br />
<br />
* [[VTK/Writing_VTK_files_using_python | Writing VTK files using python]]<br />
<br />
* [[VTK/mesh quality | Geometric mesh quality]]<br />
<br />
* [[VTK_XML_Formats | VTK XML Format Details]]<br />
<br />
* [[VTK_Third_Party_Library_Patrol | VTK 3rd Party Library Patrol]]<br />
<br />
* [[Python Wrapping FAQ]]<br />
<br />
* [[VTK/Executives | VTK executives]]<br />
<br />
* [[VTK/Streaming | Streaming data in VTK]]<br />
<br />
* [[VTK/Open Questions | Open questions]]<br />
<br />
* [[VTK/Meeting Minutes | Meeting Minutes]]<br />
<br />
* [[VTK/Information Keys | VTK Information Keys and their significance]]<br />
<br />
* [[VTK/Build parameters | Build parameters]]<br />
<br />
== Current Projects ==<br />
* [[VTK/New CellPicker | New Cell Picker and Volume Picking]]<br />
* [[VTK/Graph Layout | VTK Graph Layout]]<br />
* [[VTK/Java Wrapping | VTK Java Wrapping]]<br />
* [[VTK/Composite Data Redesign | Composite Data Redesign]]<br />
* [[VTKWidgets | VTK Widget Redesign]]<br />
* [[VTKShaders | Shaders in VTK]]<br />
* [[VTK/VTKMatlab | VTK with Matlab]]<br />
* [[VTK/Time_Support | VTK Time support]]<br />
* [[VTK/Depth_Peeling | VTK Depth Peeling]]<br />
* [[VTK/MultiPass_Rendering | VTK Multi-Pass Rendering]]<br />
* [[VTK/Using_JRuby | Using VTK with JRuby]]<br />
* [[VTK/Painters | Painters]]<br />
* [[VTK/Cray XT3 Compilation| Cray XT3 Compilation]]<br />
* [[VTK/statistics | Statistics]]<br />
* [[VTK/Array Refactoring | Array Refactoring]]<br />
* [[VTK/Multicore and Streaming | Multicore and Streaming]]<br />
* [[VTK/3DConnexion Devices Support | 3DConnexion Devices Support]]<br />
* [[VTK/Geovis vision toolkit | Geospatial and vision visualization support ]]<br />
* [[VTK/Charts | New Charts API]]<br />
* [[VTK/Marks | Marks API]]<br />
<br />
== External Links ==<br />
*[http://www.imtek.uni-freiburg.de/simulation/mathematica/IMSweb/ IMTEK Mathematica Supplement (IMS)], the Open Source IMTEK Mathematica Supplement (IMS) interfaces VTK and generates ParaView batch scripts<br />
*[http://zorayasantos.tripod.com/vtk_csharp_examples], VTK examples in C# (Visual Studio 5.0 and .NET 2.0)<br />
<br />
== Development Process ==<br />
The VTK Community is [[VTK/Managing_the_Development_Process | upgrading its development process]]. We are doing this in response to the continuing and rapid growth of the toolkit. A VTK Architecture Review Board [[VTK/Architecture_Review_Board |VTK ARB]] is being put in place to provide strategic guidance to the community, and individuals are being identified as leaders in various VTK subsystems.<br />
<br />
== Learning VTK ==<br />
* [[VTK/Examples|Examples]] - Short code examples demonstrating basic functionalities of VTK.<br />
* [[VTK/Tutorials|Tutorials]] - Slightly longer than the examples, these tutorials explain concepts and demonstrate more complicated tasks in VTK.<br />
<br />
== Wrapping ==<br />
* [[VTK/Java Wrapping|Java]]<br />
* [[VTK/Python Wrapping FAQ|Python]]<br />
<br />
== Developers Corner ==<br />
[[VTK/Developers Corner|Developers Corner]]<br />
<br />
==Things that are ready to add to VTK==<br />
* Collision detection (vtkCollisionDetectionFilter) for computing the intersection of 2 polydata's - http://www.bioengineering-research.com/vtk/vtkCollisionDetectionFilter.htm<br />
* vtkBezierSurfaceWidget from VTK Designer (http://sourceforge.net/projects/vtkdesigner/) to fit bezier surfaces from a point set<br />
* Point set processing classes - http://www.insight-journal.org/browse/publication/708<br />
<br />
==Things that VTK is missing==<br />
* Approximate nearest neighbors algorithm<br />
* Stratified sampling or similar mesh sampling (http://www.tecgraf.puc-rio.br/~diego/academic/phd/597d/sample/)<br />
<br />
==Wiki Sandbox==<br />
[[Ranking test]]<br />
<br />
{{VTK/Template/Footer}}</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/Geovis_vision_toolkit&diff=19900VTK/Geovis vision toolkit2010-01-29T17:26:06Z<p>Aashish.chaudhary: </p>
<hr />
<div>==Requirements==<br />
<br />
There are two parts to the project: <br />
<br />
* Video / related meta data rendering and interactions.<br />
* Displaying video / meta data in geospatial context. <br />
<br />
As per our discussion we have gathered following requirements for the project. <br />
<br />
* Easy to put together.<br />
* Provides 2D and 3D mode where in 2D it will allow quick validation, manipulation abilities. <br />
* Provides the ability to visualize, video, track, and associated ranking. <br />
* Ability to provide input as sequence of images or a video file. <br />
* Provides the ability to manipulate track data. User should be able to insert a new one, modify the existing one. <br />
* Provides the ability to select a region with pixel level accuracy and draw a track on top of it. <br />
* Provides the ability to play many video files (small or large video) files.<br />
* Provides a layout for the videos in space so that each can be seen clearly for a view point. <br />
* Allows the videos to play individually or globally.1<br />
* Provides the ability to toggle different layers of information.<br />
* Provides geo spatial context.<br />
<br />
==Design==<br />
<br />
<graphviz><br />
digraph G {<br />
rankdir=BT<br />
fontsize = 12<br />
fontname = Helvetica<br />
node [ fontsize = 9 fontname = Helvetica shape = record height = 0.1 ]<br />
edge [ fontsize = 9 fontname = Helvetica ]<br />
<br />
vtkVideoElementRepresentation -> vtkRenderedRepresentation<br />
vtkTrackRepresentation -> vtkRenderedRepresentation<br />
vtkVideoReprensentation -> vtkRenderedRepresentation<br />
vtkVisStrategyRepresentation -> vtkRenderedRepresentation<br />
} <br />
<br />
</graphviz><br />
<br />
* vtkVideoElementRepresentation would contain all the information layers and make sure that they are in sink. <br />
Also this is the representation thats responsible for consuming the data for <br />
each video.<br />
<br />
* vtkVisStrategyRepresentation <br />
<br />
<source lang="cpp"><br />
<br />
// Interface for this class is not as clear as it should be. Basically it transforms all layers<br />
// associated with any given vtkVideoElementRepresentation and represents this transformation via <br />
// some geometry. <br />
class vtkVisStrategyRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
<br />
// Return transformation matrix that can be used to offset any other representation. <br />
vtkMatrix4x4 GetMatrix(); <br />
<br />
virtual void PrepareForRendering(vtkRenderView* view); <br />
};<br />
<br />
<br />
class vtkVideoElementRepresentation : public vtkRenderedRepresentation<br />
{ <br />
public:<br />
void AddTrackRepresentation(vtkTrackRepresentation* tr); <br />
void AddVideoRepresentation(vtkVideoRepresentation* vr); <br />
void SetVisStrategyRepresentation(vtkVisStrategyRepresentation* vsr);<br />
<br />
// Update all the layers and call \c PrepareForRendering(....) on each. <br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
<br />
private: <br />
<br />
Internal* Implementation; <br />
};<br />
<br />
<br />
class vtkTrackRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
<br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
<br />
class vtkVideoRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
void SetScalarProperty(double value, double range[2]);<br />
<br />
// Can have 0 or many scalar representations. <br />
void AddScalarRepresentation(ScalarRepMode);<br />
<br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
</source><br />
<br />
<br />
== Geovis == <br />
<br />
* Dealing with precision issues</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/Geovis_vision_toolkit&diff=19861VTK/Geovis vision toolkit2010-01-28T23:19:59Z<p>Aashish.chaudhary: /* Dealing with precision issues */</p>
<hr />
<div>==Requirements==<br />
<br />
There are two parts to the project: <br />
<br />
* Video / related meta data rendering and interactions.<br />
* Displaying video / meta data in geospatial context. <br />
<br />
As per our discussion we have gathered following requirements for the project. <br />
<br />
* Easy to put together.<br />
* Provides 2D and 3D mode where in 2D it will allow quick validation, manipulation abilities. <br />
* Provides the ability to visualize, video, track, and associated ranking. <br />
* Ability to provide input as sequence of images or a video file. <br />
* Provides the ability to manipulate track data. User should be able to insert a new one, modify the existing one. <br />
* Provides the ability to select a region with pixel level accuracy and draw a track on top of it. <br />
* Provides the ability to play many video files (small or large video) files.<br />
* Provides a layout for the videos in space so that each can be seen clearly for a view point. <br />
* Allows the videos to play individually or globally.1<br />
* Provides the ability to toggle different layers of information.<br />
* Provides geo spatial context.<br />
<br />
==Design==<br />
<br />
<graphviz><br />
digraph G {<br />
rankdir=BT<br />
fontsize = 12<br />
fontname = Helvetica<br />
node [ fontsize = 9 fontname = Helvetica shape = record height = 0.1 ]<br />
edge [ fontsize = 9 fontname = Helvetica ]<br />
<br />
vtkVideoElementRepresentation -> vtkRenderedRepresentation<br />
vtkTrackRepresentation -> vtkRenderedRepresentation<br />
vtkVideoReprensentation -> vtkRenderedRepresentation<br />
vtkVisStrategyRepresentation -> vtkRenderedRepresentation<br />
} <br />
<br />
</graphviz><br />
<br />
* vtkVideoElementRepresentation would contain all the information layers and make sure that they are in sink. <br />
Also this is the representation thats responsible for consuming the data for <br />
each video.<br />
<br />
* vtkVisStrategyRepresentation <br />
<br />
<source lang="cpp"><br />
class vtkVisStrategyRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
<br />
// Return transformation matrix that can be used to offset any other representation. <br />
vtkMatrix4x4 GetMatrix(); <br />
<br />
virtual void PrepareForRendering(vtkRenderView* view); <br />
};<br />
<br />
<br />
class vtkVideoElementRepresentation : public vtkRenderedRepresentation<br />
{ <br />
public:<br />
void AddTrackRepresentation(vtkTrackRepresentation* tr); <br />
void AddVideoRepresentation(vtkVideoRepresentation* vr); <br />
void AddTrackRepresentation(vtkScalarRepresentation* sr); <br />
void SetVisStrategyRepresentation(vtkVisStrategyRepresentation* vsr);<br />
<br />
// Update all the layers and call \c PrepareForRendering(....) on each. <br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
<br />
private: <br />
<br />
Internal* Implementation; <br />
};<br />
<br />
<br />
class vtkTrackRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
template<t><br />
void SetScalarProperty(T value);<br />
// Can have 0 or many scalar representations. <br />
void AddScalarRepresentation(ScalarRepMode);<br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
<br />
class vtkVideoRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
</source><br />
<br />
<br />
== Geovis == <br />
<br />
* Dealing with precision issues</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/Geovis_vision_toolkit&diff=19860VTK/Geovis vision toolkit2010-01-28T23:13:37Z<p>Aashish.chaudhary: </p>
<hr />
<div>==Requirements==<br />
<br />
There are two parts to the project: <br />
<br />
* Video / related meta data rendering and interactions.<br />
* Displaying video / meta data in geospatial context. <br />
<br />
As per our discussion we have gathered following requirements for the project. <br />
<br />
* Easy to put together.<br />
* Provides 2D and 3D mode where in 2D it will allow quick validation, manipulation abilities. <br />
* Provides the ability to visualize, video, track, and associated ranking. <br />
* Ability to provide input as sequence of images or a video file. <br />
* Provides the ability to manipulate track data. User should be able to insert a new one, modify the existing one. <br />
* Provides the ability to select a region with pixel level accuracy and draw a track on top of it. <br />
* Provides the ability to play many video files (small or large video) files.<br />
* Provides a layout for the videos in space so that each can be seen clearly for a view point. <br />
* Allows the videos to play individually or globally.1<br />
* Provides the ability to toggle different layers of information.<br />
* Provides geo spatial context.<br />
<br />
==Design==<br />
<br />
<graphviz><br />
digraph G {<br />
rankdir=BT<br />
fontsize = 12<br />
fontname = Helvetica<br />
node [ fontsize = 9 fontname = Helvetica shape = record height = 0.1 ]<br />
edge [ fontsize = 9 fontname = Helvetica ]<br />
<br />
vtkVideoElementRepresentation -> vtkRenderedRepresentation<br />
vtkTrackRepresentation -> vtkRenderedRepresentation<br />
vtkVideoReprensentation -> vtkRenderedRepresentation<br />
vtkVisStrategyRepresentation -> vtkRenderedRepresentation<br />
} <br />
<br />
</graphviz><br />
<br />
* vtkVideoElementRepresentation would contain all the information layers and make sure that they are in sink. <br />
Also this is the representation thats responsible for consuming the data for <br />
each video.<br />
<br />
* vtkVisStrategyRepresentation <br />
<br />
<source lang="cpp"><br />
class vtkVisStrategyRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
<br />
// Return transformation matrix that can be used to offset any other representation. <br />
vtkMatrix4x4 GetMatrix(); <br />
<br />
virtual void PrepareForRendering(vtkRenderView* view); <br />
};<br />
<br />
<br />
class vtkVideoElementRepresentation : public vtkRenderedRepresentation<br />
{ <br />
public:<br />
void AddTrackRepresentation(vtkTrackRepresentation* tr); <br />
void AddVideoRepresentation(vtkVideoRepresentation* vr); <br />
void AddTrackRepresentation(vtkScalarRepresentation* sr); <br />
void SetVisStrategyRepresentation(vtkVisStrategyRepresentation* vsr);<br />
<br />
// Update all the layers and call \c PrepareForRendering(....) on each. <br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
<br />
private: <br />
<br />
Internal* Implementation; <br />
};<br />
<br />
<br />
class vtkTrackRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
template<t><br />
void SetScalarProperty(T value);<br />
// Can have 0 or many scalar representations. <br />
void AddScalarRepresentation(ScalarRepMode);<br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
<br />
class vtkVideoRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
</source><br />
<br />
<br />
== Geovis == <br />
<br />
===Dealing with precision issues===</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/Geovis_vision_toolkit&diff=19859VTK/Geovis vision toolkit2010-01-28T22:33:57Z<p>Aashish.chaudhary: </p>
<hr />
<div>==Requirements==<br />
<br />
There are two parts to the project: <br />
<br />
* Video / related meta data rendering and interactions.<br />
* Displaying video / meta data in geospatial context. <br />
<br />
As per our discussion we have gathered following requirements for the project. <br />
<br />
* Easy to put together.<br />
* Provides 2D and 3D mode where in 2D it will allow quick validation, manipulation abilities. <br />
* Provides the ability to visualize, video, track, and associated ranking. <br />
* Ability to provide input as sequence of images or a video file. <br />
* Provides the ability to manipulate track data. User should be able to insert a new one, modify the existing one. <br />
* Provides the ability to select a region with pixel level accuracy and draw a track on top of it. <br />
* Provides the ability to play many video files (small or large video) files.<br />
* Provides a layout for the videos in space so that each can be seen clearly for a view point. <br />
* Allows the videos to play individually or globally.1<br />
* Provides the ability to toggle different layers of information.<br />
* Provides geo spatial context.<br />
<br />
==Design==<br />
<br />
<graphviz><br />
digraph G {<br />
rankdir=BT<br />
fontsize = 12<br />
fontname = Helvetica<br />
node [ fontsize = 9 fontname = Helvetica shape = record height = 0.1 ]<br />
edge [ fontsize = 9 fontname = Helvetica ]<br />
<br />
vtkVideoElementRepresentation -> vtkRenderedRepresentation<br />
vtkTrackRepresentation -> vtkRenderedRepresentation<br />
vtkVideoReprensentation -> vtkRenderedRepresentation<br />
vtkVisStrategyRepresentation -> vtkRenderedRepresentation<br />
} <br />
<br />
</graphviz><br />
<br />
* vtkVideoElementRepresentation would contain all the information layers and make sure that they are in sink. <br />
Also this is the representation thats responsible for consuming the data for <br />
each video.<br />
<br />
* vtkVisStrategyRepresentation <br />
<br />
<source lang="cpp"><br />
class vtkVisStrategyRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
<br />
// Return transformation matrix that can be used to offset any other representation. <br />
vtkMatrix4x4 GetMatrix(); <br />
<br />
virtual void PrepareForRendering(vtkRenderView* view); <br />
};<br />
<br />
<br />
class vtkVideoElementRepresentation : public vtkRenderedRepresentation<br />
{ <br />
public:<br />
void AddTrackRepresentation(vtkTrackRepresentation* tr); <br />
void AddVideoRepresentation(vtkVideoRepresentation* vr); <br />
void AddTrackRepresentation(vtkScalarRepresentation* sr); <br />
void SetVisStrategyRepresentation(vtkVisStrategyRepresentation* vsr);<br />
<br />
// Update all the layers and call \c PrepareForRendering(....) on each. <br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
<br />
private: <br />
<br />
Internal* Implementation; <br />
};<br />
<br />
<br />
class vtkTrackRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
template<t><br />
void SetScalarProperty(T value);<br />
// Can have 0 or many scalar representations. <br />
void AddScalarRepresentation(ScalarRepMode);<br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
<br />
class vtkVideoRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
</source></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/Geovis_vision_toolkit&diff=19858VTK/Geovis vision toolkit2010-01-28T22:30:27Z<p>Aashish.chaudhary: </p>
<hr />
<div>==Requirements==<br />
<br />
There are two parts to the project: <br />
<br />
* Video / related meta data rendering and interactions.<br />
* Displaying video / meta data in geospatial context. <br />
<br />
As per our discussion we have gathered following requirements for the project. <br />
<br />
* Easy to put together.<br />
* Provides 2D and 3D mode where in 2D it will allow quick validation, manipulation abilities. <br />
* Provides the ability to visualize, video, track, and associated ranking. <br />
* Ability to provide input as sequence of images or a video file. <br />
* Provides the ability to manipulate track data. User should be able to insert a new one, modify the existing one. <br />
* Provides the ability to select a region with pixel level accuracy and draw a track on top of it. <br />
* Provides the ability to play many video files (small or large video) files.<br />
* Provides a layout for the videos in space so that each can be seen clearly for a view point. <br />
* Allows the videos to play individually or globally.1<br />
* Provides the ability to toggle different layers of information.<br />
* Provides geo spatial context.<br />
<br />
==Design==<br />
<br />
<graphviz><br />
digraph G {<br />
rankdir=BT<br />
fontsize = 12<br />
fontname = Helvetica<br />
node [ fontsize = 9 fontname = Helvetica shape = record height = 0.1 ]<br />
edge [ fontsize = 9 fontname = Helvetica ]<br />
<br />
vtkVideoElementRepresentation -> vtkRenderedRepresentation<br />
vtkTrackRepresentation -> vtkRenderedRepresentation<br />
vtkVideoReprensentation -> vtkRenderedRepresentation<br />
vtkVisStrategyRepresentation -> vtkRenderedRepresentation<br />
} <br />
<br />
</graphviz><br />
<br />
* vtkVideoElementRepresentation would contain all the information layers and make sure that they are in sink. <br />
Also this is the representation thats responsible for consuming the data for <br />
each video.<br />
<br />
* vtkVisStrategyRepresentation <br />
<br />
<source lang="cpp"><br />
class vtkVisStrategyRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
<br />
// Return transformation matrix that can be used to offset any other representation. <br />
vtkMatrix4x4 GetMatrix(); <br />
<br />
virtual void PrepareForRendering(vtkRenderView* view); <br />
};<br />
<br />
<br />
class vtkVideoElementRepresentation : public vtkRenderedRepresentation<br />
{ <br />
public:<br />
void AddTrackRepresentation(vtkTrackRepresentation* tr); <br />
void AddVideoRepresentation(vtkVideoRepresentation* vr); <br />
void AddTrackRepresentation(vtkScalarRepresentation* sr); <br />
<br />
// Update all the layers and call \c PrepareForRendering(....) on each. <br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
<br />
void SetUseWorldMatrix(vtkMatrix4x4 mat);<br />
<br />
private: <br />
<br />
Internal* Implementation; <br />
};<br />
<br />
<br />
class vtkTrackRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
template<t><br />
void SetScalarProperty(T value);<br />
// Can have 0 or many scalar representations. <br />
void AddScalarRepresentation(ScalarRepMode);<br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
<br />
class vtkVideoRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
</source></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/Geovis_vision_toolkit&diff=19855VTK/Geovis vision toolkit2010-01-28T22:23:22Z<p>Aashish.chaudhary: </p>
<hr />
<div>==Requirements==<br />
<br />
There are two parts to the project: <br />
<br />
* Video / related meta data rendering and interactions.<br />
* Displaying video / meta data in geospatial context. <br />
<br />
As per our discussion we have gathered following requirements for the project. <br />
<br />
* Easy to put together.<br />
* Provides 2D and 3D mode where in 2D it will allow quick validation, manipulation abilities. <br />
* Provides the ability to visualize, video, track, and associated ranking. <br />
* Ability to provide input as sequence of images or a video file. <br />
* Provides the ability to manipulate track data. User should be able to insert a new one, modify the existing one. <br />
* Provides the ability to select a region with pixel level accuracy and draw a track on top of it. <br />
* Provides the ability to play many video files (small or large video) files.<br />
* Provides a layout for the videos in space so that each can be seen clearly for a view point. <br />
* Allows the videos to play individually or globally.1<br />
* Provides the ability to toggle different layers of information.<br />
* Provides geo spatial context.<br />
<br />
==Design==<br />
<br />
<graphviz><br />
digraph G {<br />
rankdir=BT<br />
fontsize = 12<br />
fontname = Helvetica<br />
node [ fontsize = 9 fontname = Helvetica shape = record height = 0.1 ]<br />
edge [ fontsize = 9 fontname = Helvetica ]<br />
<br />
vtkVideoElementRepresentation -> vtkRenderedRepresentation<br />
vtkTrackRepresentation -> vtkRenderedRepresentation<br />
vtkVideoReprensentation -> vtkRenderedRepresentation<br />
} <br />
<br />
</graphviz><br />
<br />
vtkVideoElementRepresentation would contain all the information layers and make sure that they are in sink. <br />
Also this is the representation thats responsible for consuming the data for <br />
each video. <br />
<br />
<source lang="cpp"><br />
class vtkVisStrategyRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
void <br />
};<br />
<br />
<br />
class vtkVideoElementRepresentation : public vtkRenderedRepresentation<br />
{ <br />
public:<br />
void AddTrackRepresentation(vtkTrackRepresentation* tr); <br />
void AddVideoRepresentation(vtkVideoRepresentation* vr); <br />
void AddTrackRepresentation(vtkScalarRepresentation* sr); <br />
<br />
// Update all the layers and call \c PrepareForRendering(....) on each. <br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
<br />
void SetUseWorldMatrix(vtkMatrix4x4 mat);<br />
<br />
private: <br />
<br />
Internal* Implementation; <br />
};<br />
<br />
<br />
class vtkTrackRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
template<t><br />
void SetScalarProperty(T value);<br />
// Can have 0 or many scalar representations. <br />
void AddScalarRepresentation(ScalarRepMode);<br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
<br />
class vtkVideoRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
</source></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/Geovis_vision_toolkit&diff=19843VTK/Geovis vision toolkit2010-01-28T21:26:13Z<p>Aashish.chaudhary: /* Design */</p>
<hr />
<div>==Requirements==<br />
<br />
There are two parts to the project: <br />
<br />
* Video / related meta data rendering and interactions.<br />
* Displaying video / meta data in geospatial context. <br />
<br />
As per our discussion we have gathered following requirements for the project. <br />
<br />
* Easy to put together.<br />
* Provides 2D and 3D mode where in 2D it will allow quick validation, manipulation abilities. <br />
* Provides the ability to visualize, video, track, and associated ranking. <br />
* Ability to provide input as sequence of images or a video file. <br />
* Provides the ability to manipulate track data. User should be able to insert a new one, modify the existing one. <br />
* Provides the ability to select a region with pixel level accuracy and draw a track on top of it. <br />
* Provides the ability to play many video files (small or large video) files.<br />
* Provides a layout for the videos in space so that each can be seen clearly for a view point. <br />
* Allows the videos to play individually or globally.1<br />
* Provides the ability to toggle different layers of information.<br />
* Provides geo spatial context.<br />
<br />
==Design==<br />
<br />
<graphviz><br />
digraph G {<br />
rankdir=BT<br />
fontsize = 12<br />
fontname = Helvetica<br />
node [ fontsize = 9 fontname = Helvetica shape = record height = 0.1 ]<br />
edge [ fontsize = 9 fontname = Helvetica ]<br />
<br />
vtkVideoElementRepresentation -> vtkRenderedRepresentation<br />
vtkTrackRepresentation -> vtkRenderedRepresentation<br />
vtkVideoReprensentation -> vtkRenderedRepresentation<br />
} <br />
<br />
</graphviz><br />
<br />
vtkVideoElementRepresentation would contain all the information layers and make sure that they are in sink. Also this is the representation thats responsible for consuming the data for <br />
each video. <br />
<br />
<source lang="cpp"><br />
class vtkVideoElementRepresentation : public vtkRenderedRepresentation<br />
{ <br />
public:<br />
void AddTrackRepresentation(vtkTrackRepresentation* tr); <br />
void AddVideoRepresentation(vtkVideoRepresentation* vr); <br />
void AddTrackRepresentation(vtkScalarRepresentation* sr); <br />
<br />
// Update all the layers and call \c PrepareForRendering(....) on each. <br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
<br />
void SetUseWorldMatrix(vtkMatrix4x4 mat);<br />
<br />
private: <br />
<br />
Internal* Implementation; <br />
};<br />
<br />
<br />
class vtkTrackRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
template<t><br />
void SetScalarProperty(T value);<br />
// Can have 0 or many scalar representations. <br />
void AddScalarRepresentation(ScalarRepMode);<br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
<br />
class vtkVideoRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
</source></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/Geovis_vision_toolkit&diff=19842VTK/Geovis vision toolkit2010-01-28T21:24:35Z<p>Aashish.chaudhary: /* Design */</p>
<hr />
<div>==Requirements==<br />
<br />
There are two parts to the project: <br />
<br />
* Video / related meta data rendering and interactions.<br />
* Displaying video / meta data in geospatial context. <br />
<br />
As per our discussion we have gathered following requirements for the project. <br />
<br />
* Easy to put together.<br />
* Provides 2D and 3D mode where in 2D it will allow quick validation, manipulation abilities. <br />
* Provides the ability to visualize, video, track, and associated ranking. <br />
* Ability to provide input as sequence of images or a video file. <br />
* Provides the ability to manipulate track data. User should be able to insert a new one, modify the existing one. <br />
* Provides the ability to select a region with pixel level accuracy and draw a track on top of it. <br />
* Provides the ability to play many video files (small or large video) files.<br />
* Provides a layout for the videos in space so that each can be seen clearly for a view point. <br />
* Allows the videos to play individually or globally.1<br />
* Provides the ability to toggle different layers of information.<br />
* Provides geo spatial context.<br />
<br />
==Design==<br />
<br />
<graphviz><br />
digraph G {<br />
rankdir=BT<br />
fontsize = 12<br />
fontname = Helvetica<br />
node [ fontsize = 9 fontname = Helvetica shape = record height = 0.1 ]<br />
edge [ fontsize = 9 fontname = Helvetica ]<br />
<br />
vtkVideoElementRepresentation -> vtkRenderedRepresentation<br />
vtkTrackRepresentation -> vtkRenderedRepresentation<br />
vtkVideoReprensentation -> vtkRenderedRepresentation<br />
} <br />
<br />
</graphviz><br />
<br />
vtkVideoElementRepresentation would contain all the information layers and make sure that they are in sink. Also this is the representation thats responsible for consuming the data for <br />
each video. <br />
<br />
<source lang="cpp"><br />
class vtkVideoElementRepresentation : public vtkRenderedRepresentation<br />
{ <br />
public:<br />
void AddTrackRepresentation(vtkTrackRepresentation* tr); <br />
void AddVideoRepresentation(vtkVideoRepresentation* vr); <br />
void AddTrackRepresentation(vtkScalarRepresentation* sr); <br />
<br />
// Update all the layers and call \c PrepareForRendering(....) on each. <br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
<br />
void setUseWorldMatrix(vtkMatrix4x4 mat);<br />
<br />
private: <br />
<br />
Internal* Implementation; <br />
};<br />
<br />
<br />
class vtkTrackRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
template<t><br />
void SetScalarProperty(T value);<br />
// Can have 0 or many scalar representations. <br />
void AddScalarRepresentation(ScalarRepMode);<br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
<br />
class vtkVideoRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
</source></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/Geovis_vision_toolkit&diff=19841VTK/Geovis vision toolkit2010-01-28T21:15:17Z<p>Aashish.chaudhary: /* Design */</p>
<hr />
<div>==Requirements==<br />
<br />
There are two parts to the project: <br />
<br />
* Video / related meta data rendering and interactions.<br />
* Displaying video / meta data in geospatial context. <br />
<br />
As per our discussion we have gathered following requirements for the project. <br />
<br />
* Easy to put together.<br />
* Provides 2D and 3D mode where in 2D it will allow quick validation, manipulation abilities. <br />
* Provides the ability to visualize, video, track, and associated ranking. <br />
* Ability to provide input as sequence of images or a video file. <br />
* Provides the ability to manipulate track data. User should be able to insert a new one, modify the existing one. <br />
* Provides the ability to select a region with pixel level accuracy and draw a track on top of it. <br />
* Provides the ability to play many video files (small or large video) files.<br />
* Provides a layout for the videos in space so that each can be seen clearly for a view point. <br />
* Allows the videos to play individually or globally.1<br />
* Provides the ability to toggle different layers of information.<br />
* Provides geo spatial context.<br />
<br />
==Design==<br />
<br />
<graphviz><br />
digraph G {<br />
rankdir=BT<br />
fontsize = 12<br />
fontname = Helvetica<br />
node [ fontsize = 9 fontname = Helvetica shape = record height = 0.1 ]<br />
edge [ fontsize = 9 fontname = Helvetica ]<br />
<br />
vtkVideoElementRepresentation -> vtkRenderedRepresentation<br />
vtkTrackRepresentation -> vtkRenderedRepresentation<br />
vtkVideoReprensentation -> vtkRenderedRepresentation<br />
} <br />
<br />
</graphviz><br />
<br />
<source lang="cpp"><br />
class vtkVideoElementRepresentation : public vtkRenderedRepresentation<br />
{ <br />
public:<br />
void AddTrackRepresentation(vtkTrackRepresentation* tr); <br />
void AddVideoRepresentation(vtkVideoRepresentation* vr); <br />
void AddTrackRepresentation(vtkScalarRepresentation* sr); <br />
<br />
// Update all the layers and call \c PrepareForRendering(....) on each. <br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
<br />
void setUseWorldMatrix(vtkMatrix4x4 mat);<br />
<br />
private: <br />
<br />
Internal* Implementation; <br />
};<br />
<br />
<br />
class vtkTrackRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
template<t><br />
void SetScalarProperty(T value);<br />
// Can have 0 or many scalar representations. <br />
void AddScalarRepresentation(ScalarRepMode);<br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
<br />
class vtkVideoRepresentation : public vtkRenderedRepresentation<br />
{<br />
public: <br />
virtual void PrepareForRendering(vtkRenderView* view);<br />
}<br />
<br />
</source></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/Geovis_vision_toolkit&diff=19840VTK/Geovis vision toolkit2010-01-28T21:01:10Z<p>Aashish.chaudhary: /* Design */</p>
<hr />
<div>==Requirements==<br />
<br />
There are two parts to the project: <br />
<br />
* Video / related meta data rendering and interactions.<br />
* Displaying video / meta data in geospatial context. <br />
<br />
As per our discussion we have gathered following requirements for the project. <br />
<br />
* Easy to put together.<br />
* Provides 2D and 3D mode where in 2D it will allow quick validation, manipulation abilities. <br />
* Provides the ability to visualize, video, track, and associated ranking. <br />
* Ability to provide input as sequence of images or a video file. <br />
* Provides the ability to manipulate track data. User should be able to insert a new one, modify the existing one. <br />
* Provides the ability to select a region with pixel level accuracy and draw a track on top of it. <br />
* Provides the ability to play many video files (small or large video) files.<br />
* Provides a layout for the videos in space so that each can be seen clearly for a view point. <br />
* Allows the videos to play individually or globally.1<br />
* Provides the ability to toggle different layers of information.<br />
* Provides geo spatial context.<br />
<br />
==Design==<br />
<br />
<graphviz><br />
digraph G {<br />
rankdir=BT<br />
fontsize = 12<br />
fontname = Helvetica<br />
node [ fontsize = 9 fontname = Helvetica shape = record height = 0.1 ]<br />
edge [ fontsize = 9 fontname = Helvetica ]<br />
<br />
vtkVideoElementRepresentation -> vtkRenderedRepresentation<br />
vtkTrackRepresentation -> vtkRenderedRepresentation<br />
vtkVideoReprensentation -> vtkRenderedRepresentation<br />
vtkScalarRepresentation -> vtkRenderedRepresentation<br />
} <br />
<br />
</graphviz><br />
<br />
<code><br />
class vtkVideoElementRepresentation<br />
{ <br />
public:<br />
void AddTrackRepresentation(vtkTrackRepresentation* tr); <br />
void AddVideoRepresentation(vtkVideoRepresentation* vr); <br />
void AddTrackRepresentation(vtkScalarRepresentation* sr); <br />
<br />
virtual void PrepareToRendering();<br />
<br />
private: <br />
<br />
Internal* Implementation; <br />
};<br />
</code></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/Geovis_vision_toolkit&diff=19839VTK/Geovis vision toolkit2010-01-28T20:58:59Z<p>Aashish.chaudhary: </p>
<hr />
<div>==Requirements==<br />
<br />
There are two parts to the project: <br />
<br />
* Video / related meta data rendering and interactions.<br />
* Displaying video / meta data in geospatial context. <br />
<br />
As per our discussion we have gathered following requirements for the project. <br />
<br />
* Easy to put together.<br />
* Provides 2D and 3D mode where in 2D it will allow quick validation, manipulation abilities. <br />
* Provides the ability to visualize, video, track, and associated ranking. <br />
* Ability to provide input as sequence of images or a video file. <br />
* Provides the ability to manipulate track data. User should be able to insert a new one, modify the existing one. <br />
* Provides the ability to select a region with pixel level accuracy and draw a track on top of it. <br />
* Provides the ability to play many video files (small or large video) files.<br />
* Provides a layout for the videos in space so that each can be seen clearly for a view point. <br />
* Allows the videos to play individually or globally.1<br />
* Provides the ability to toggle different layers of information.<br />
* Provides geo spatial context.<br />
<br />
==Design==<br />
<br />
<graphviz><br />
digraph G {<br />
rankdir=BT<br />
fontsize = 12<br />
fontname = Helvetica<br />
node [ fontsize = 9 fontname = Helvetica shape = record height = 0.1 ]<br />
edge [ fontsize = 9 fontname = Helvetica ]<br />
<br />
vtkVideoElementRepresentation -> vtkRenderedRepresentation<br />
vtkTrackRepresentation -> vtkRenderedRepresentation<br />
vtkVideoReprensentation -> vtkRenderedRepresentation<br />
vtkScalarRepresentation -> vtkRenderedRepresentation<br />
} <br />
<br />
</graphviz><br />
<br />
class vtkVideoElementRepresentation<br />
{ <br />
public:<br />
void AddTrackRepresentation(vtkTrackRepresentation* tr); <br />
void AddVideoRepresentation(vtkVideoRepresentation* vr); <br />
void AddTrackRepresentation(vtkScalarRepresentation* sr); <br />
<br />
virtual void PrepareToRendering();<br />
<br />
private: <br />
<br />
Internal* Implementation; <br />
};</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/Geovis_vision_toolkit&diff=19838VTK/Geovis vision toolkit2010-01-28T20:54:16Z<p>Aashish.chaudhary: /* Design */</p>
<hr />
<div><br />
==Requirements==<br />
<br />
There are two parts to the project: <br />
<br />
* Video / related meta data rendering and interactions.<br />
* Displaying video / meta data in geospatial context. <br />
<br />
As per our discussion we have gathered following requirements for the project. <br />
<br />
* Easy to put together.<br />
* Provides 2D and 3D mode where in 2D it will allow quick validation, manipulation abilities. <br />
* Provides the ability to visualize, video, track, and associated ranking. <br />
* Ability to provide input as sequence of images or a video file. <br />
* Provides the ability to manipulate track data. User should be able to insert a new one, modify the existing one. <br />
* Provides the ability to select a region with pixel level accuracy and draw a track on top of it. <br />
* Provides the ability to play many video files (small or large video) files.<br />
* Provides a layout for the videos in space so that each can be seen clearly for a view point. <br />
* Allows the videos to play individually or globally.1<br />
* Provides the ability to toggle different layers of information.<br />
* Provides geo spatial context.<br />
<br />
==Design==<br />
<br />
<graphviz><br />
digraph G {<br />
rankdir=BT<br />
fontsize = 12<br />
fontname = Helvetica<br />
node [ fontsize = 9 fontname = Helvetica shape = record height = 0.1 ]<br />
edge [ fontsize = 9 fontname = Helvetica ]<br />
<br />
vtkVideoElementRepresentation -> vtkRenderedRepresentation<br />
vtkTrackRepresentation -> vtkRenderedRepresentation<br />
vtkVideoReprensentation -> vtkRenderedRepresentation<br />
vtkScalarRepresentation -> vtkRenderedRepresentation<br />
} <br />
<br />
</graphviz><br />
<br />
<br />
class vtkVideoElementRepresentation<br />
{<br />
public: <br />
void AddTrackRepresentation(vtkTrackRepresentation* tr); <br />
void AddVideoRepresentation(vtkVideoRepresentation* vr); <br />
void AddTrackRepresentation(vtkScalarRepresentation* sr); <br />
<br />
virtual void PrepareToRendering();<br />
<br />
private: <br />
<br />
Internal* Implementation; <br />
};</div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/Geovis_vision_toolkit&diff=19837VTK/Geovis vision toolkit2010-01-28T20:49:42Z<p>Aashish.chaudhary: </p>
<hr />
<div><br />
==Requirements==<br />
<br />
There are two parts to the project: <br />
<br />
* Video / related meta data rendering and interactions.<br />
* Displaying video / meta data in geospatial context. <br />
<br />
As per our discussion we have gathered following requirements for the project. <br />
<br />
* Easy to put together.<br />
* Provides 2D and 3D mode where in 2D it will allow quick validation, manipulation abilities. <br />
* Provides the ability to visualize, video, track, and associated ranking. <br />
* Ability to provide input as sequence of images or a video file. <br />
* Provides the ability to manipulate track data. User should be able to insert a new one, modify the existing one. <br />
* Provides the ability to select a region with pixel level accuracy and draw a track on top of it. <br />
* Provides the ability to play many video files (small or large video) files.<br />
* Provides a layout for the videos in space so that each can be seen clearly for a view point. <br />
* Allows the videos to play individually or globally.1<br />
* Provides the ability to toggle different layers of information.<br />
* Provides geo spatial context.<br />
<br />
==Design==<br />
<br />
<graphviz><br />
digraph G {<br />
rankdir=BT<br />
fontsize = 12<br />
fontname = Helvetica<br />
node [ fontsize = 9 fontname = Helvetica shape = record height = 0.1 ]<br />
edge [ fontsize = 9 fontname = Helvetica ]<br />
<br />
vtkVideoElementRepresentation -> vtkRenderedRepresentation<br />
vtkTrackRepresentation -> vtkRenderedRepresentation<br />
vtkVideoReprensentation -> vtkRenderedRepresentation<br />
vtkScalarRepresentation -> vtkRenderedRepresentation<br />
} <br />
<br />
</graphviz></div>Aashish.chaudharyhttps://public.kitware.com/Wiki/index.php?title=VTK/Geovis_vision_toolkit&diff=19836VTK/Geovis vision toolkit2010-01-28T20:49:04Z<p>Aashish.chaudhary: </p>
<hr />
<div>Requirements: <br />
<br />
There are two parts to the project: <br />
<br />
* Video / related meta data rendering and interactions.<br />
* Displaying video / meta data in geospatial context. <br />
<br />
As per our discussion we have gathered following requirements for the project. <br />
<br />
* Easy to put together.<br />
* Provides 2D and 3D mode where in 2D it will allow quick validation, manipulation abilities. <br />
* Provides the ability to visualize, video, track, and associated ranking. <br />
* Ability to provide input as sequence of images or a video file. <br />
* Provides the ability to manipulate track data. User should be able to insert a new one, modify the existing one. <br />
* Provides the ability to select a region with pixel level accuracy and draw a track on top of it. <br />
* Provides the ability to play many video files (small or large video) files.<br />
* Provides a layout for the videos in space so that each can be seen clearly for a view point. <br />
* Allows the videos to play individually or globally.1<br />
* Provides the ability to toggle different layers of information.<br />
* Provides geo spatial context.<br />
<br />
<graphviz><br />
digraph G {<br />
rankdir=BT<br />
fontsize = 12<br />
fontname = Helvetica<br />
node [ fontsize = 9 fontname = Helvetica shape = record height = 0.1 ]<br />
edge [ fontsize = 9 fontname = Helvetica ]<br />
<br />
vtkVideoElementRepresentation -> vtkRenderedRepresentation<br />
vtkTrackRepresentation -> vtkRenderedRepresentation<br />
vtkVideoReprensentation -> vtkRenderedRepresentation<br />
vtkScalarRepresentation -> vtkRenderedRepresentation<br />
} <br />
<br />
</graphviz></div>Aashish.chaudhary