MeshViz Release Notes

MeshViz 7.2 (October 2008)

A new C++ toolkit has been added to MeshViz: MeshViz Interface.  

MeshViz Interface is an API useful for extracting and visualizing features from meshes used for scientific and engineering visualization, for example finite element analysis (FEA) and computer aided engineering (CAE). This toolkit is provided as a replacement for the old 3DdataMaster component of MeshViz. It provides the same basic mesh representation features as 3DdataMaster, but removes most of the limitations of the older API.

MeshViz Interface is designed to support any type of mesh without requiring copying the mesh into an intermediate representation. This is done by defining abstract interfaces that must be implemented in the user's application classes. Thus MeshViz Interface can deal with whatever type of mesh you may have, whether 2D or 3D, cartesian, triangular, hexahedral, polyhedral, quadratic, structured, or indexed. Any number of scalar and vector sets can be analyzed on each mesh using any type of internal representation (float, double, char, bytes, etc) or even implicit data computed on the fly. 

MeshViz Interface contains two separate parts: Mesh Extraction and Data Mapping:

The existing MeshViz toolkit, consisting of 3DdataMaster and GraphMaster, remains unchanged (and language independent). A new product called MeshViz XLM has been defined (for C++ only) that contains both MeshViz and the new MeshViz Interface. You will need a MeshVizXLM license string in order to use MeshViz Interface.

Please see the newly updated Chapter 19 in the Open Inventor User's Guide for more information about MeshViz Interface.

MeshViz 7.1.1 (June 2008)

No new features were added. See the fixed bugs section.

MeshViz 7.1 (April 2008)

Significantly Reduced Memory Consumption for Some Classes

Classes PbIndexedMesh2D, PbTriangleMesh2D and PbQuadrangleMesh2D, now use much less memory. Connectivity information is no longer built when the class is instantiated. Rather it is built and stored only when necessary, for instance when streamlines are computed. As a consequence, MeshViz 7.1 (and higher) is able to manage 2D meshes about 3.5 times larger than the previous release.

Moreover a new field, useOverallNormal has been added to PoMeshFilled, to disable normal generation when rendering a flat 2D unstructured mesh, enabling this will speedup and decrease memory usage when using orientable 2D meshes.

MeshViz 7.0.1 (February 2008)

No new features were added. See the fixed bugs section.

MeshViz 7.0 (December 2007)

No new features were added. See the fixed bugs section.

MeshViz 6.1 (March 2007)

No new features were added. See the fixed bugs section.

MeshViz 6.0 (March 2006)

Significantly Reduced Memory Consumption for Some Classes

Classes PbIndexedMesh3D, PbHexahedronMesh3D, and PbTetrahedronMesh3D now use much less memory. Connectivity information is no longer built when the class is instantiated. Rather it is built and stored only when necessary, for instance when streamlines are computed. As a consequence, MeshViz 5.0.3 (and higher) is able to manage meshes about 3.5 times larger than the previous release.

NOTE: For large meshes, don't forget to set argument is_data_duplicate to FALSE in the constructor. See PbMesh for details.

As a consequence, note also that the getGeometry method (with argument const int **&index) of PbHexahedronMesh3D and PbTetrahedronMesh3D classes is deprecated (the index arg always returned as NULL).

Cell Filter (PoCellFilter) Usage Expanded

PoMeshSkin, PoMeshCrossSection, PoMeshLevelSurf, PoMeshCrossContour, PoMeshSkeleton, PoMeshProbePoint, PoBaseStreamLine (and derived classes), as well as PoMesh3DVecCrossSection, now use the cell filter (PoCellFilter) inherited from the scene graph. Previously the cell filter was only taken into account by PoMeshSkin.

Significantly Improved Performance with PoMeshSkin with Cell Filter

Class PoMeshSkin has been significantly optimized for gridded mesh when using a cell filter. Depending on the number of cells accepted by the filter, building the skin may be up to 10 times faster.

3D Mesh Property Changes Optimized

The 3D mesh representation classes (PoMeshSkin, PoMeshCrossSection, PoMeshLevelSurf,...) have been significantly optimized with regard to property changes. When a property is changed, the parts of the representation affected by the property are rebuilt, but the other parts are not.

This means, for instance:

This property change optimization now makes it practical to generate geometric animation of a mesh. Efficient displacement/distortion animations can be generated even on large meshes.

PoMesh Has New Field: creaseAngle

A new field, creaseAngle, has been added to PoMesh in order to allow you to conveniently modify the internal crease angle used by the representation. To improve performance in the default case, the default creaseAngle is now 0. This default value can be changed by setting an environment variable as follows:

      SoPreferences::setFloat("OIV_3DDATA_CREASE_ANGLE", myCreaseAngle);
Note that MeshViz 5.0 used a default creaseAngle = 0.8.

Can Select Indexed Face Sets or Triangle Strip Sets

The new environment variable OIV_3DDATA_USE_TRIANGLE_STRIP_SET is used to choose either a triangle strip set (TRUE) or an indexed face set (FALSE) to draw any isosurface. This variable is used by the class PoMeshLevelSurf and PoMeshCrossSection (if cross section method is ISOSURFACE).

Prior to Open Inventor 5.0.5, only indexed face sets were used in this context. Now triangle strip sets are used by default. This change was made because triangle strip sets are faster and in order the simplify the code internally.

Value Legend Enhancement

A new field, lowerUpperBoxes, was added to PoLinearValueLegend and PoNonLinearValueLegend3. It allows you to specify if you want to display lower and upper boxes of the legend filled respectively with the color associated with values below the minimum value and values above the maximum.

MeshViewer Demo Classes Enhanced

The MeshView demo classes have been updated to show off some of the new MeshViz features.

MeshViz 5.0 (August 2004)

Name Change from DataViz to MeshViz

DataViz has been renamed MeshViz. The name change, which was prompted by the prior use of the name by another software company, gives us the opportunity to emphasize one of the technologically most interesting parts of DataViz -- its 2D and 3D meshing capabilities.

From a programming perspective, you will see the following differences:

You should be able to make a global (case-sensitive) change of DataViz to MeshViz throughout your source code (including C++ projects and makefiles) and be ready to go. (Make a complete backup of your code first. Better safe than sorry!)

A set of compatibility headers will be provided so that existing programs will continue to compile, link, and run without change. But this will not be true in the Open Inventor 6.0 release, so we recommend making these minor changes now.

NOTE: Backward compatibility for 3D-MasterSuite applications is no longer supported.

Support for Data-Per-Cell (Instead of Per-Vertex)

MeshViz now allows data sets to be assigned directly to the cells of a mesh rather than at the vertices of the mesh. This is valuable, for example, for simulation codes that compute a single value for the contents of each cell.

The following classes were affected by this change:

PoIntervalCellFilter allows you to "filter" cells based on their value. You specify a range of values and whether you want to accept cells whose values are inside the range or outside the range.

You can define custom cell filters by subclassing from PoCellFilter. In your code you would implement a cellFilter method to accept or reject a cell based on its value and/or its index.

Probe Optimization

Probes have been optimized.

New Representations

PoMesh3DVecCrossSection

The new class PoMesh3DVecCrossSection draws a field of vectors on a cross-section of a 3D mesh. A 3D vector is drawn at each point where the 3D mesh grid intersects the cross-section.

The class PoMesh3DVecGridCrossSection is now derived from PoMesh3DVecCrossSection; when its grid spacing is null, it behaves like PoMesh3DVecCrossSection.

DataViz 4.0 (April 2003)

Thread Safe, Pipe Safe

DataViz is now thread safe and pipe safe. This means that you can use it in a program with multiple render threads, e.g., with the MPViewer.

Optimized Normal Generation

DataViz previously used Open Inventor to automatically generate normals for all DataViz shapes. Now DataViz supplies the normals in cases where it can do so more efficiently based on its knowledge of the specific shapes involved. This can, in some cases, significantly reduce the time required to generate the scene graph.

  1. PoMeshFilled (2D mesh) automatically provides only one normal now if the mesh is a PbParalCartesian2D or PbRegularCartesian2D mesh. Previously Open Inventor computed one normal per face of the 2D mesh.

    This can reduce the time to build a 500x500 PoMeshFilled by a factor of 75 and the time to build a 100x100 PoMeshFilled by a factor of 26.


  2. PoMeshSide (4 Z-sides of a 2D mesh such as PbParalCartesian2D or PbRegularCartesian2D) automatically provides an array of normals to Open Inventor.

    For example, if the PoMeshSide mesh size is 500x500 or 5000x5000, the scene graph build time is divided respectively by 1 or 2.

    This optimization is useful only for very large meshes.


  3. PoMeshCrossSection (plane) automatically provides only one normal (the normal of the plane) to Open Inventor.

    For example, if the iso-contouring values number of the PoMeshCrossSection mesh is 400 or 2000, scene graph build duration is respectively divided by 1.5 or 2. The mesh cross section have 9000 or 41000 points and 41000 or 200000 faces respectively.


  4. PoMeshSkin (skin of a 3D mesh) now automatically provides only 6 normals (one per side) if the mesh is a PbParalCartesian3D or PbRegularCartesian3D mesh and if the mode is not color contouring.

    For example, if the mesh size is 50x50 or 100x100 or 200x200, the scene graph build duration is reduced by a factor of 1 or 2 or 2.5 respectively.

NOTE: The performance numbers quoted above were computed on NVidia Quadro4 or 3DLabs Oxygen GVX1 boards. Your results may differ.

Optimization for Undefined Values

Building a DataViz representation for large meshes was very time-consuming if the mesh contained undefined values. Now it's much faster.

PoMiscTextAttr::outliningEnabled

The new outliningEnabled field of PoMiscTextAttr allows you to enable/disable the outlining of polygonal fonts (SoText3 and SoAnnoText3).

For small text, drawing the outline (default) can provide the best visual results. For large text, turning off the outline may provide better performance as well as better visual results.

Previously text was always outlined.

NOTE: Inventor files that contain this new field will not be readable by older versions of Open Inventor. See the Compatibility topic for more details.

Contouring with Textures

The PoMesh::coloringType field now supports a new mode, PoMesh::COLOR_TEXTURE_CONTOURING. Like the mode PoMesh::COLOR_CONTOURING, this mode enables the display of contours. However, it does so using 1D textures, which is more efficient, thus signficantly reducing geometry size and computation time.

Although very fast, this mode is not appropriate for use in all situations e.g., for wireframe representations or when cells or shapes containing undefined values need to be discarded. See the PoMesh help topic for details.

New Classes PbPyramidCell and PbWedgeCell

There are now two new 3D data classes: PbPyramidCell and PbWedgeCell. These classes are useful for doing interpolation inside 3D cells of type wedge (prism) or pyramid.

These new classes fix bug #38: streamlines, probe, and vector representations on a gridded cross section crashed when applied on a mesh that contained cells of type wedge or pyramid.

PoCellIndices Improved Node Labels

The node index number drawn by PoCellIndices is now prefixed by the letter "n" and the relative node index in the cell. For instance, previously, if the third node index of a cell was 3218, the string "3128" was displayed near this node's position. Now the string "n3 = 3128" is displayed. This improvement allows you to check node ordering in a cell.

MeshViewer Classes Improved

The MeshViewer demo tool classes have been dramatically improved. They can be used to build a standalone application (like MeshViewerMain) in order to visualize the mesh described in an .iv file. Starting from the simple definition of a mesh (geometry and node data values), MeshViewer can automatically show any type of representation of this mesh. MeshViewer can be considered to be a SceneViewer specialized for mesh visualization.

In addition, the MeshViewer classes now use the new Open Inventor DialogViz classes for the user-interface component. This provides an attractive and portable user-interface for mesh visualization.

New GraphMaster Demo

The new GrapherDemo program allows you to specify a 2D parametric curve equation and display it. The axes are dynamically adjusted to the current range of values.

Example: $OIVHOME/src/DataViz/Demos/graph/grapherDemo*

DataViz 3.7 (March 2002)

3D-MasterSuite, which was comprised of GraphMaster, 3DdataMaster, PlotMaster, and DialogMaster, has been organized into two new modules: DataViz (containing GraphMaster and 3DdataMaster) and HardCopy (PlotMaster). DialogMaster is now supplied as a standard part of Open Inventor. Please read the Compatibility document for more details.

3DdataMaster

3D-MasterSuite 3.6.3 (August 2001)

PlotMaster

3D-MasterSuite 3.6 (August 2000)

GraphMaster

3DdataMaster

PlotMaster

Utilities

3D-MasterSuite 3.5.2 (April 2000)

This version contains many bug fixes (see Bugs fixed for more details).

PlotMaster

3D-MasterSuite 3.5 (March 2000)

GraphMaster


3DdataMaster


PlotMaster

DialogMaster

Utilities

3D-MasterSuite 3.0

GraphMaster

3DdataMaster

PlotMaster

Utilities