Compatibility Notes


Open Inventor 9.7.2 (September 2017)


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.

Technical overview

You should completely recompile existing applications after installing a new version of Open Inventor.
New versions of Open Inventor are source code compatible (unless noted in this document), but not binary compatible.


Open Inventor 9.7 uses a new version of Flexnet tools. You must update your installation with version 11.14, which is available on our download pages (C++, Java, .NET).

New APIs

This section lists all the new APIs introduced into Open Inventor 9.7. New methods, fields and classes are listed to give a quick access to new material available in this new release.

Open Inventor

New Methods

  • getDepthValue(): Get the depth value, scaled between 0.0 and 1.0, from the depth buffer at window coordinates x, y. This is only valid after the traversal of the scene graph e.g., in a post render callback. returns TRUE if successful and x,y are within the frame buffer region. FALSE if it failed or if any of x,y are outside the frame buffer region. Function is available for SoXtViewer, SoWxViewer, SoWinViewer and SoQtViewer

Please note that this function has several known limitations

  • It cannot be called during traversal
  • In Sorted pixel transparency, only depth of opaque objects will be returned
  • Implementation does not allow, on Open Inventor 9.x to obtain good performances because it creates synchronization between CPU and GPU


New Fields

  • SoHeightFieldRender::cellOutlineWidth: defines the width of the cell outline. Default is 2 pixels.
  • SoHeightFieldRender::cellOutlineColor: defines the color of the cell outline. Default color is Black.


New Libraries

Two libraries have been included into the Open Inventor 9.7 package:

  • fei_remoteViz_jpeg_codec.dll and fei_remoteViz_nvidia_video_codec.dll on Windows
  • libfei_remoteViz_jpeg_codec .so and libfei_remoteViz_nvidia_video_codec .so on Linux

New Methods

  • ConnectionSettings::getEncoder : returns the frame encoder used by a connection.
  • ConnectionSettings::isSupportedEncoder : used to know if a frame encoder is supported by the host.
  • ConnectionSettings::setMaxBandwidth and ConnectionSettings::getMaxBandwidth : useful to manage the maximum bandwidth used by the connection. This parameter controls the visual quality. Higher is the value better is the quality. In the case of JPEG encoder, these methods replace RenderAreaSettings::setStillCompressionQuality, RenderAreaSettings::getStillCompressionQuality, RenderAreaSettings::setInteractiveCompressionQuality and RenderAreaSettings::getInteractiveCompressionQuality.
  • Client::getEnvironment : returns the user-agent header sent by the client web browser in the case of the HTML5 client and the operating system (OS) in the case of the SoRemoteVizClient node.

Compatibility Issues

In this chapter are listed all the modifications that could impact application built with previous version of Open Inventor:>

  • some of these updates will require to update the code of the application
  • some may change the default behavior of an existing application

In both cases we recommend to consult the documentation to be sure to get needed informations on how to bypass these compatibility issues. 

Open Inventor

  • On all platform, Qt 4.x is no longer supported.
  • OS X required version is now Os X 10.10.
  • OS X compiler is now CLANG and not gcc anymore.
  • On Windows Visual Studio 2008 and 2010 are no longer supported.
  • On Windows, Open Inventor Java is based on the runtime of Visual Studio 2012.
  • On Linux, Open Inventor Java is based on the runtime of RHEL6.
  • Before Open Inventor 9.7, a node providing an alternate rep was not traversed by a SoAction implemented by the application (ie: derived from SoAction). Instead, systematically, it's its alternateRep node that was traversed. just for the actions that have been hard coded in its getAlternateRep method but just these ones. This was a mistake since the user custom SoAction must be in control whether to traverse the node or its getAlternateRep. Starting with Open Inventor 9.7, now the behavior has been changed: now there is a chance for the application defined SoAction to determine whether to traverse the SoNode or its getAlternateRep.
  • Before Open Inventor 9.7, forwardTraversal method split the current path into two parts: one was retrieved using getCurPath and the other one using getInitialPathAppliedTo. This split made things harder and added a lot of inconvenient special cases. Starting with Open Inventor 9.7, forwardTraversal now uses the SoPath/SoFullPath pattern. This means doing a forwardTraversal doesn't break the current path and :
    1. getCurPath(): returns the path from root to the forwardTraversal's caller (formerly the path returned by getInitialPathAppliedTo)
    2. (SoFullPath*)getCurPath: returns the path from root to the current node
  • SoCircularExtrusion has been is simplified also in the sampled points on the circle cross section for the entire range of SoComplexity values [.0 , 1.]. For the circular cross section, here are the number of samples used for given SoComplexity value:
    • .0 the number of used samples is 4
    • .5 the number of used samples is 16
    • 1. the number of used samples is 32

    Number of samples varies linearly on the two sub-intervals but keeps the old same number of samples for the default SoComplexity value = .5


API evolution since the last version

  • Class RenderAreaSettings has been removed.
  • Because of this deletion, methods RenderAreaSettings::set/getStillCompressionQuality and RenderAreaSettings::set/getInteractiveCompressionQuality can't be used anymore.  Now, in order to control the visual quality, the methods setBandwidth and getBandwidth from new class ClientSettings must be used. The highest value gives the better quality for rendering.
  • The methods ConnectionSettings::setMaxSendingFPS and ConnectionSettings::getMaxSendingFPS have been renamed ConnectionSettings::setMaxFPS and ConnectionSettings::getMaxFPS respectively.
  • From ConnectionSettings class following methods have been removed or updated:
    • getEncoder()- deleted
    • set/getMaxPendingAck()- deleted
    • set/getKeepAliveTimeOut()- deleted
    • bool isSupportedEncoder (Encoder encoder)has been replaced by bool isSupportedEncoders (FrameEncoders *frameEncoders)
  • The run mode has been moved from parameter of the Service::open method to the class ServiceSettings. The new method ServiceSettings::setRunMode enables to set the run mode of the service.
    The default mode is ServiceSettings::INVENTOR_SERVICE
  • The button parameter type of the methods RenderAreaListener::onMouseUp and RenderAreaListener::onMouseDown has been changed from int to SoMouseButtonEvent::Button.
  • The scaleFactor parameter has been removed from the class ConnectionSettings. This feature is no more supported by RemoteViz.
  • In the INDEPENDENT_SERVICE mode, the pushFrame mechanism has been replaced by a requestedFrame mechanism. The method RenderArea::pushFrame has been removed and a new method RenderAreaListener::onRequestedFrame has been added. This method is triggered when a new frame is requested by a connection.
  • The parameter Encoder has been added to the method RenderAreaListener::onOpenedConnection to select the frame encoder used by the connection. The default value is JPEG encoder. If the encoder can not be loaded or initiliazed, the method RenderAreaListener::onRefusedEncoder will be triggered to request another encoder. Otherwise, the method RenderAreaListener::onAcceptedEncoder will be triggered to notify that the encoder has been initialized successfully.
  • A parameter "aborted" has been added to the method RenderAreaListener::onClosedConnection to inform you if the network connection was closed unexpectedly by the client or has been lost.
  • In the javascript client API, the listener onReceivedImage has been renamed onReceivedFrame. The parameters are [frameId, dataLength].
  • In the javascript client API, a listener onDecodedFrame has been added. The parameters are [frameId, isLossless].
  • Following methods have been removed from class RenderAreaListener:
    • virtual void onAcceptedEncoder (RenderArea *renderArea, Connection *sender, ConnectionSettings::Encoder encoder)
    • virtual void onOpenedConnection (RenderArea *renderArea, Connection *connection)
    • virtual void onRefusedEncoder (RenderArea *renderArea, Connection *connection)


  • Compatibility notes for 9.7 beta users During the beta phase some new features names have been detected as inconsistent with the rest of the API or not explicit enough. The following engine and field names have been renamed:
    • The SoResampleImage engine has been renamed SoResampleImageProcessing3d
      • Its inImageModel field has been renamed inImage
      • Its outSubVolume field has been renamed outImage
    • The SoIntensityBasedPreAlignment3d engine has been renamed SoImagePreAlignmentTransform3d
      • Its inImageModel field has been renamed inMovingImage
      • Its InImageReference field has been renamed inFixedImage
      • Its alignementMode field has been renamed alignmentMode
      • Its outResult field has been renamed outTransform
    • The SoIntensityParametricRegistration3d engine has been renamed SoImageRegistrationTransform3d
      • Its inImageModel field has been renamed inMovingImage
      • Its InImageReference field has been renamed inFixedImage
      • Its inInitialMatrixTransform field has been renamed initialTransform
      • Its outResult field has been renamed outTransform
    • The SoCenterLineProcessing3d engine introduced in 9.6.3 has been renamed SoCenterLineApproximation3d
      • Its inLabelImage field has been renamed inObjectImage
      • Its outBinaryImage field has been renamed outObjectImage
  • SoBoxFilterProcessing output type

    When used with the autoScale option set to YES, the output image type of the SoBoxFilterProcessing engine is no longer upgraded. An 8 bits input gives now an 8 bits output. If the autoScale option is set to NO, the output type is still upgraded, i.e., an 8 bits input still gives a 16 bits output.

  • Index management

    The index policy was inconsistent with the rest of Open Inventor. In Open Inventor axes coordinates are indexed from 0, in ImageViz they were indexed from 1. For the following engines the coordinates described by the related fields has to be decreased of 1 to retrieve the same result as before:

    Results provided by the following measurements of the SoDataMeasurePredefined class are decreased by 1:

  • Restriction on input data types

    ImageViz makes a difference between gray level, label and binary images. This distinction was not visible in the public API, any of these image type was seen as a gray level image. An engine requiring a specific type used to cast automatically the input to the expected type. For instance if an engine expected a binary image as input and a 256 levels image was set, all values greater than 1 were clamped at the execution. If this behavior could be convenient at some points, it could also have some disastrous side effects leading to incomprehensible bugs. Applying an engine on an incorrect data interpretation type raises now an exception. The new interpretation field of the SoImageDataAdapter class allows to control explicitly the interpretation type (VALUE, LABEL or BINARY).

    Use case: 03.1.LabelAnalysis tutorial demo : This demo loads a binary dataset from a tif file. By default a data adapter got from an image file has the interpretation field set to VALUE. Applying an SoLabelingProcessing engine directly on this data adapter would raise the exceptions below:

    Inventor error: LabelingProcessing: Unable to initialize 'inObjectImage' input field with a value image. Inventor error: LabelingProcessing: Unable to initialize 'inObjectImage' input field. Inventor error: LabelingProcessing: engine cannot be computed because input and/or output are not valid.

    In order to avoid exceptions and assure the code runs as before the following instruction has been added to this demo: imageAdapter->interpretation = SoImageDataAdapter::BINARY;

  • SoGradientOperatorProcessing2d

    Its enum GradientOperator has 2 new values and while one has been deprecated.

    • KERNEL3X3 is now deprecated and will be replaced by PREWITT
    • SOBEL has been added
    • The value of following values have changed
      • CANNY is now equal to 2
      • GAUSSIAN is now equal to 3
      • SOBEL is now equal to 4
      • PREWITT is now equal to 5
  • SoCenterLineProcessing3d The SoCenterLineProcessing3d engine introduced in 9.6.3 has been renamed SoCenterLineApproximation3d.
    • Its inLabelImage field has been renamed inObjectImage
    • Its outBinaryImage field has been renamed outObjectImage
  • SoDataMeasurePredefined

    Some type in PredefinedMeasure enum have been modified

    • AREA_2D is now double
    • AREA_3D is now double
    • INTENSITY_INTEGRAL is now double
    • VOLUME_3D is now double


Viewer Components

The SceneExaminer class has been changed a little bit with the redefinition of values in InteractionMode enum

  • VIEWING must be replaced by NAVIGATION
  • PICKING must be replaced by SELECTION