Compatibility Notes 8.0

Open Inventor 8.0 (May 2009) Older compatibility notes

Technical Overview

Passwords

File name/location changes

File format changes

Changes for Unicode

VolumeViz: Volume readers

ScaleViz: DMX

MeshVizXLM: Streamline/Isoline

Qt4 Support

Open Inventor 7.2 (October 2008)

Open Inventor 7.1 (April 2008)


Technical Overview

Please at least glance through these compatibility notes so that you are not surprised by any differences in behavior between this release and the previous release. You should completely recompile existing applications after installing a new version of Open Inventor. Starting with Open Inventor 8.0, the library and DLL names have been changed to better reflect their usage and version number were removed. See Open Inventor Files for details. When using Microsoft Visual Studio compilers, application build on top of Open Inventor in release mode MUST define the _SECURE_SCL=0 preprocessor variable in order to avoid alignment problems. Using this mode reduce greatly memory footprint of STL objects and increase performance by a factor 2 to 10 depending on operations. For instance a factor 10 is achieved with MeshVizXLM.

However, application programs having dependencies on third party libraries may not be able to get these libraries compatible with the correct flag. To avoid such problem, we provide a patch with all Open Inventor libraries built with the default Microsoft compiler flag set (_SECURE_SCL=1). To use this version you have to install the patch and setup OIVARCH variable to arch-Windows---Release-secure-scl-1 instead of arch-Windows---Release, and update lib and binary paths accordingly. Since we recommend to use _SECURE_SCL=0 in release mode, all demonstration programs provided have this flag set in their respective project files. So when using the _SECURE_SCL=1 release version, do not forget to change the preprocessor flag manually in the demonstration project file.

IMPORTANT NOTE: Mixing a build of binary with different _SECURE_SCL flag value is possible but not recommended/supported by Microsoft (see https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?Fe...) nor FEI.
 

Passwords

You will need an updated password with the new version number for each of your FEI products.

Contact the license administrator at vsglicense@fei.com

NOTE: We recommend that customers using a laptop machine give us the hostid obtained using, for example, LAdmin or VSGcomputerID, while the laptop is *not* connected to its docking station. This is because the MAC address of the network card in the docking station will be detected while connected, but this address will not be known while the machine is disconnected from the docking station.

File name/location changes

Starting with Open Inventor 8.0:

  • Library and executable file names are the same across all platforms.
  • Library files are no longer in the "lib" directory.
  • Executable/DLL files are no longer in the "program" directory.

File names: This means, for example, that Open Inventor DLL files on Microsoft Windows platforms no longer have the version number in the file name. However, on Windows you can still find both the version number and the compiler version in the Version tab of the right-click Properties dialog.

Directories: Library and executable files are now in subdirectories under a directory whose name specifically encodes the fully qualified platform for which they were built. As a result it is now much easier to install Open Inventor for multiple platforms or multiple compiler versions on the same machine, for example 32 bit and 64 bit builds.

This directory name has the form:   arch-<System>-<CPU>-<Compiler>-<BuildType>

For example the directory:   arch-Windows-x86-msvc8-Debug
Contains the files for a 32-bit Microsoft Windows Debug build using Visual Studio 2005 (VC8).

Platform specific files are placed in two subdirectories:

  • arch-<System>-<CPU>-<Compiler>-<BuildType>/bin             for dynamic libraries and executables
  • arch-<System>-<CPU>-<Compiler>-<BuildType>/lib              for archive libraries.

File format changes

All previous versions of Open Inventor wrote .iv files with these file headers:

    #Inventor V2.1 ascii
    #Inventor V2.1 binary
    
By default, version 8.0 of Open Inventor writes these file headers:
    #Inventor V8.0 ascii
    #Inventor V8.0 binary
    

Open Inventor (.iv) files containing these headers cannot be read by applications built with older versions of Open Inventor.

Use SoOutput::setHeaderString() to override the default header string, for example to write .iv files with an older version number for compatibility.

Open Inventor 8.0 ASCII files also have a slightly different, and incompatible, syntax in certain cases. For example, in multi-value fields (e.g. SoMFVec3f) the actual values are preceded by the number of items in the field. This (among other enhancements) allows much faster loading of Open Inventor files, particularly for files containing large geometry objects.

Changes for Unicode

Because of the new Unicode support, some fields and methods were modified:

Inventor previous API new API
SoSFName SoFont::name SoSFString SoFont::name
const SbName& SoCallbackAction::getFonName() const SbString& SoCallbackAction::getFonName()
SbString::SbString(const SO_WCHAR_T *str) use conversion functions
SbString::SbString(const SO_WCHAR_T *str, int start, int end) use conversion functions
Inventor viewers previous API new API
const char*SbString So[Xt/Qt/Win/Wx]Component::getTitle() const SbString So[Xt/Qt/Win/Wx]Component::getTitle() const
const char*SbString So[Xt/Qt/Win/Wx]Component::getIconTitle() const SbString So[Xt/Qt/Win/Wx]Component::getIconTitle() const
const char*SbString So[Xt/Qt/Win/Wx]Component::getDefaultWidgetName() const SbString So[Xt/Qt/Win/Wx]Component::getDefaultWidgetName() const
const char*SbString So[Xt/Qt/Win/Wx]Component::getDefaultTitle() const SbString So[Xt/Qt/Win/Wx]Component::getDefaultTitle() const
const char*SbString So[Xt/Qt/Win/Wx]Component::getDefaultIconTitle() const SbString So[Xt/Qt/Win/Wx]Component::getDefaultIconTitle() const
const char*SbString So[Xt/Qt/Win/Wx]Component::getWidgetName() const SbString So[Xt/Qt/Win/Wx]Component::getWidgetName() const
const char*SbString So[Xt/Qt/Win/Wx]Component::getClassName() const SbString So[Xt/Qt/Win/Wx]Component::getClassName() const
const char* PoXtEditTextData::getLabel() SbString PoXtEditTextData::getLabel()
const char* PoXtEditTextData::getString() SbString PoXtEditTextData::getString()
const char* PoXtLabelData::getLabel() SbString PoXtLabelData::getLabel()
const char* PoXtSliderData::getLabel() SbString PoXtSliderData::getLabel()
const char* PoXtToggleButtonData::getLabel() SbString PoXtToggleButtonData::getLabel()
const char* PoXtToggleButtonData::getString() SbString PoXtToggleButtonData::getString()
const char* PoXtToggleButtonData::getButtonLabel() SbString PoXtToggleButtonData::getButtonLabel()
const char* PoXtSlider::getLabel() SbString PoXtSlider::getLabel()
HardCopy extension module previous API new API
PoPrintCGMMonitor::PoPrintCGMMonitor(Widget, const char*,SbBool) PoPrintCGMMonitor::PoPrintCGMMonitor(Widget, const SbString&,SbBool)
PoPrintHPGLMonitor::PoPrintHPGLMonitor(Widget, const char*,SbBool) PoPrintHPGLMonitor::PoPrintHPGLMonitor(Widget, const SbString&,SbBool)
PoPrintPSMonitor::PoPrintPSMonitor(Widget, const char*,SbBool) PoPrintPSMonitor::PoPrintPSMonitor(Widget, const SbString&,SbBool)
MeshViz extension module previous API new API
const char* PbDateFormatMapping::getFormat() SbString PbDateFormatMapping::getFormat()
const char* PbMiscTextAttr::getFontName() SbString PbMiscTextAttr::getFontName()

Notes: The Inventor SO_WCHAR_T macro type previously used to manage wchar_t is no longer supported.

VolumeViz: Volume reader compatibility issues

Since Open Inventor version 7.0, the SoVolumeReader class has been derived from class SoFieldContainer.
However it is now REQUIRED to follow the correct process for declaring a new custom SoFieldContainer implementation when creating and using a custom reader.
Specifically this means that a custom volume reader implementation MUST:

 

  • Use the SO_FIELDCONTAINER_xxx macros for declaration and implementation
  • The constructor must not take any parameters
  • The destructor must be declared as protected, and
  • Applications must use the standard field container reference counting mechanism ( ref()/unref() )

A custom volume reader declaration must follow this template:

    class MyReader : public SoVolumeReader
    {
      // FieldContainer definition
      SO_FIELDCONTAINER_HEADER(MyReader);
    public:
      // Constructor.
      MyReader();
      ...
    protected:
      // Destructor.
      virtual ~MyReader();
      ...
    private:
      ...
    };
    

A custom volume reader implementation must follow this template:

    // FieldContainer implementation
    SO_FIELDCONTAINER_SOURCE(MyReader);

    // OIV class database initializer
    void MyReader::initClass()
    {
      SO_FIELDCONTAINER_INIT_CLASS(MyReader, "MyReader", SoVolumeReader);
    }

    // OIV class database deinitializer
    void MyReader::exitClass()
    {
      SO__FIELDCONTAINER_EXIT_CLASS(MyReader);
    }
    
    // Constructor
    MyReader::MyReader()
    {
      SO_FIELDCONTAINER_CONSTRUCTOR(MyReader);
      ...
    }
    
    // Destructor
    MyReader::~MyReader()
    {
      ...
    }

In addition, some functions were removed or modified in order to provide Unicode file system support and a cleaner API.

Any custom reader that previously used or redefined these functions for setting/getting the dataset's filename:

  • virtual void setUserData(void* data);
  • void* getUserData();
  • virtual void setFilename(const char* filename);
  • char* getFilename();
  • char* getOriginalFilename();

Must now use or redefine the following new functions;

  • virtual void setFilename(const SbString& filename);
  • SbString getFilename() const;
  • SbString getOriginalFilename() const;

Any custom converter inheriting from SoBaseLDMConverter that previously used or redefined these functions for setting/getting the reader depending on filename :

  • virtual SoVolumeReader* getReader( const char* fileName, const char* fileExtension);

Must now use or redefine the following new functions;

  • virtual SoVolumeReader* getReader( const SbString& fileName, const SbString& fileExtension);

 

VolumeViz: SoLDMDataTransform compatibility issues

SoVolumeData::setLDMDataTransformCB() method and SoVolumeData::SoLDMDataTransformCB typedef that were tagged as deprecated since Open Inventor 7.0 were removed from the API.

You have to use the new SoDataSet::dataTransform field.

A custom data transform declaration must follow this template:

class MyLDMDataTransform : public SoLDMDataTransform
{
  // FieldContainer definition
  SO_FIELDCONTAINER_HEADER(MyLDMDataTransform);
public:
  // Constructor.
  MyLDMDataTransform();
  ...
protected:
  // Destructor.
  virtual ~MyLDMDataTransform();

  // Data transform function. 
  virtual void transformFunction(
    SoDataSet* ds,                      // current dataset
    const SbVec3i32& bufferDimension,   // tile dim
    SoBufferObject* bufferToTransform,  // buffer to transform
    const SbBox3i32& dataBox,           // position of tile in data space
    int resolutionLevel	                // resolution level of the tile
  );
  ...
private:
  ...
};

A custom data transform implementation must follow this template:

    // FieldContainer implementation
    SO_FIELDCONTAINER_SOURCE(MyLDMDataTransform);

    // OIV class database initializer
    void MyLDMDataTransform::initClass()
    {
      SO_FIELDCONTAINER_INIT_CLASS(MyLDMDataTransform, "MyLDMDataTransform", SoLDMDataTransform);
    }

    // OIV class database deinitializer
    void MyLDMDataTransform::exitClass()
    {
      SO__FIELDCONTAINER_EXIT_CLASS(MyLDMDataTransform);
    }
    
    // Constructor
    MyLDMDataTransform::MyLDMDataTransform()
    {
      SO_FIELDCONTAINER_CONSTRUCTOR(MyLDMDataTransform);
      ...
    }
    
    // Destructor
    MyLDMDataTransform::~MyLDMDataTransform()
    {
      ...
    }
  
    // Data transform function. 
    void MyLDMDataTransform::transformFunction(
        SoDataSet* ds,                      // current dataset
        const SbVec3i32& bufferDimension,   // tile dim
        SoBufferObject* bufferToTransform,  // buffer to transform
        const SbBox3i32& dataBox,           // position of tile in data space
        int resolutionLevel	                // resolution level of the tile
    )
    {
        // you could copy-paste SoLDMDataTransformCB or SoLDMDataTransformFunction 
        // previous function definition from Open Inventor 6.x or 7.x
        ...
    }

ScaleViz: DMX compatibility notes

ScaleViz no longer supports the use of DMX (Distributed Multihead X) to map the entire desktop onto a tiled display wall. Specifically the DMXScreen and useDMX keywords are no longer supported. For convenience, no error is reported if they appear in a configuration file, but they will be ignored.

Mapping the desktop onto a tiled display wall is now supported using the VNCConfig keyword. See SoVNCConfig and section 24.1.3.5 of the Open Inventor User's Guide.

MeshVizXLM: Streamline and Isoline extractors

Streamline and isoline extractors (MiStreamlineExtractXXX and MiIsolineExtractXXX) have been modified due to the new abstract interface architecture of extracts.
They are not compatible with the previous version. Source code using them must be modified.

Qt4 compatibility notes

  1. Open Inventor Qt3 is no longer supported.
  2. Open Inventor Qt4 support is based on, and requires, Qt 4.3.4 or higher
    Please note: Qt 4.0 and 4.1 are not compatible.
  3. The SoQt viewer classes now use Qt's native QGLWidget, QGLContext, QLFormat and QGLColormap classes for OpenGL rendering instead of internal system dependent classes.

In order to use InventorQt you need a Qt package version that support QGL classes (commercial or LGPL or GPL) (see System requirements).

A small number of methods are now deprecated or no longer supported (and thus will break compatibility at compile time) :

  • Deprecated methods

    Previous API New API
    SoQtGLWidget::setNormalVisual( XVisualInfo* ) SoQtWidget::setNormalVisual( QGLFormat* )
    SoQtGLWidget::setOverlayVisual( XVisualInfo* ) SoQtWidget::setOverlayVisual( QGLFormat* )
    SoQtRenderArea::setColorMap( int, int, const SbColor* ) SoQtRenderArea::setColorMap( QGLColormap* )
    SoQtViewer::setNormalVisual( XVisualInfo* ) SoQtViewer::setNormalVisual( QGLFormat* )
  • Methods no longer supported (broken compatibility)
    Previous API New API
    XVisualInfo* SoQtWidget::getNormalVisual() QGLFormat* SoQtWidget::getNormalVisual()
    XVisualInfo* SoQtWidget::getOverlayVisual() QGLFormat* SoQtWidget::getOverlayVisual()
    GLXContext SoQtGLWidget::getNormalContext() QGLContext* SoQtWidget::getNormalContext()
    GLXContext *SoQtGLWidget::getOverlayContext() QGLContext* SoQtWidget::getOverlayContext()
    int SoQtWidget::getDisplayListShareGroup( GLXContext ctx ) int SoQtWidget::getDisplayListShareGroup( GLContext* )
    SoQtFullViewer::setClientPopupMenu( Q3Menu* ) (Qt3Support only) SoQtFullViewer::setClientPopupMenu( QMenu* ) (Qt4 full only)
  • SoExtender methods that are no longer supported

    These methods are no longer supported because their behavior is now implemented through native QGL<"class">

    HDC SoQtGLWidget::getNormalDC()
    SoQtGLWidget::setSunOverlayBackgroundIndex()
    SoQtGLWidget::setAttribList( const int* )
    int* SoQtGLWidget::getAttribList()
    DWORD SoQtGLWidget::getThreadId()
    SoQtGLWidget::setThreadId( DWORD )
    SoQtGLWidget::displayResolutionChanged()
    SoQtGLWidget::useNewContextAndPixelFormat()
    bool SoQtGLWidget::isAccelerated()
    Colormap SoQtGLWidget::getColorMap()
    Colormap SoQtGLWidget::getOverlayColorMap()
    SoQtGLRenderArea::setSunOverlayBackgroundIndex()
  • QPopupMenu to QMenu changes

    In order to provide a custom popup menu, note that QMenu must be used instead of QPopupMenu.
    The main difference between the two is the way the items are handled through QAction instead of integers.

    The following SoQtFullViewer members changed from QPopupMenu* to QMenu*:
    rootPopup, *mainPopup, *funcPopup, *drawPopup, *prefPopup, *ClientPopup.

    The following SoQtFullViewer members changed from int to QAction*:
    curPopupDrawItem, *curPopupMoveItem, *curPopupBufferItem.
     

  • Layout management changes.

    Containers with embedded layout like QVBox or QHBox do not exist anymore.
    To obtain the same behavior as previously, QWidget and QBoxLayout are used in the SoQtFullViewer class for the following members:

    QWidget* subMgrWidget is the container of the left and right decoration trims, and the render area.
    QHBoxLayout* subHbl is the associated layout.

    So in order to add elements to this container, use the layout:
       subHbl->addWidget( theNewWidgetToAdd );