{"id":31,"date":"2022-04-13T10:11:57","date_gmt":"2022-04-13T10:11:57","guid":{"rendered":"https:\/\/oiv9wp.athena-dev.net\/?page_id=31"},"modified":"2026-02-24T15:57:50","modified_gmt":"2026-02-24T15:57:50","slug":"open-inventor-9-9-release-notes-july-2018","status":"publish","type":"page","link":"https:\/\/developer9.openinventor.com\/index.php\/open-inventor-9-9-release-notes-july-2018\/","title":{"rendered":"Release Notes"},"content":{"rendered":"<p>The following document contains the release notes for <strong>Open Inventor 9.9<\/strong>. Bugs fixed by this release can be reviewed\u00a0<a href=\"https:\/\/developer.openinventor.com\/index.php\/fixed-bugs-list\/fixed-bug-list-9-9-x\/\">on this page<\/a>.<\/p>\n<p>See below the complete list of enhancements and new features included in\u00a0Open Inventor 9.9<\/p>\n<ul>\n<li><a href=\"#Packaging\">Packaging<\/a><\/li>\n<li><a href=\"#Java\">Java<\/a>\n<ul>\n<li><a href=\"#debuglib\">Debug native libraries<\/a><\/li>\n<li><a href=\"#osgi\">OSGi support<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#OpenInventor\">Open Inventor<\/a>\n<ul>\n<li><a href=\"#PolygonSimplification\">Polygon simplification enhancement<\/a><\/li>\n<li><a href=\"#progress\">Progression indicator<\/a><\/li>\n<li><a href=\"#DemoVR\">Demo VR available on Linux<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#ImageViz\">ImageViz<\/a><\/li>\n<li><a href=\"#Medical\">Medical Content<\/a>\n<ul>\n<li><a href=\"#automaticpanoramic\">Open Inventor 9.9.4 new Dental Panoramic API<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#MeshVizXLM\">MeshVizXLM<\/a>\n<ul>\n<li><a href=\"#XLMNetEoS\">MeshVizXLM .NET end of support<\/a><\/li>\n<li><a href=\"#XLMcombining\">Combining data sets<\/a><\/li>\n<li><a href=\"#CurvilinearMeshImprovement\">Curvilinear mesh performance improvement<\/a><\/li>\n<li><a href=\"#XLMmomeshvector\">MoMeshVector improvement<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#RemoteViz\">RemoteViz<\/a><\/li>\n<\/ul>\n<hr \/>\n<p><a id=\"lifecycle\"><\/a><\/p>\n<h3>Upcoming life cycle events<\/h3>\n<\/p>\n<p><strong>Q2 2025<\/strong> is the end of support for the following obsolete platforms.<\/p>\n<p>\u201cEnd of support\u201d means that, starting April 2025.<\/p>\n<ul style=\"list-style-type: square;\">\n<li><strong>Open Inventor 9 C++<\/strong>: <em>No longer supported<\/em> : Visual Studio 2015<\/li>\n<li><strong>Open Inventor 9 .Net<\/strong>: <em>No longer supported<\/em> : Framework 4.6.1<\/li>\n<\/ul>\n<p><strong>Q1 2025<\/strong> is the end of support for the following obsolete platforms.<\/p>\n<p>\u201cEnd of support\u201d means that, starting January 2025, Open Inventor is no longer provided on Linux.<\/p>\n<ul style=\"list-style-type: square;\">\n<li><strong>Open Inventor 9 C++<\/strong>: <em>No longer supported<\/em> : Linux<\/li>\n<li><strong>Open Inventor 9 Java<\/strong>: <em>No longer supported<\/em> : Linux<\/li>\n<\/ul>\n<p><strong>Q4 2020<\/strong> is the end of support for the following obsolete platforms.<\/p>\n<p>\u201cEnd of support\u201d means that, starting January 2021, new Open Inventor releases will not be built for these platforms. The current releases of Open Inventor at the end of 2020 will receive critical bug fixes on these platforms, if necessary, for one year (until the end of 2021).<\/p>\n<ul style=\"list-style-type: square;\">\n<li><strong>Open Inventor 9 C++<\/strong>: <em>No longer supported<\/em> : All 32-bit builds and MacOS<\/li>\n<li><strong>Open Inventor 9 Java<\/strong>: <em>No longer supported<\/em> : All 32-bit builds and MacOS. Also Oracle JDK 8 is replaced by OpenJDK 8<\/li>\n<li><strong>Open Inventor 9 .Net<\/strong>: <em>No longer supported<\/em> : All 32-bit builds<\/li>\n<\/ul>\n<p><strong>Q3 2021<\/strong> is the end of support for <strong>Visual Studio 2013<\/strong> with <strong>Open Inventor 9 C++<\/strong> (Visual Studio 2015 and 2017\/2019 are still supported). If these changes will cause a problem for your application, please contact your sales rep as soon as possible.<\/p>\n<p>Note that <strong>Open Inventor 9<\/strong> is fully supported for existing applications, but new features are only implemented in Open Inventor 10.<br \/>\nProduct Application Specialists are ready to assist with updating your application to use Open Inventor 10.<\/p>\n<p><strong>RemoteViz<\/strong> : Microsoft Internet Explorer no longer supported (Microsoft Edge still supported)<\/p>\n<hr \/>\n<h3>Open Inventor 9.9.38<\/h3>\n<p>As part of our ongoing security efforts, we have updated several third-party components to address identified security vulnerabilities.<br \/>\nThe following dependencies have been upgraded:<\/p>\n<ul>\n<li><strong>zlib<\/strong>: 1.2.11 \u2192 1.3.1<\/li>\n<li><strong>libjpeg-turbo<\/strong>: 2.0.0 \u2192 3.0.2<\/li>\n<li><strong>libpng<\/strong>: 1.6.35 \u2192 1.6.47<\/li>\n<li><strong>libtiff<\/strong>: 4.0.9 \u2192 4.7.0<\/li>\n<li><strong>jasper<\/strong>: 2.0.14 \u2192 4.2.4<\/li>\n<li><strong>gdcm<\/strong>: 3.0.4 \u2192 3.0.24<\/li>\n<li><strong>boost<\/strong>: 1.68.0 \u2192 1.86.0<\/li>\n<\/ul>\n<p>As a consequence of these updates, support for certain image formats has been removed for image reading and writing operations. The affected formats are <strong>PGX<\/strong>, <strong>PNM<\/strong>, and <strong>SUN<\/strong> files.<\/p>\n<p>In addition, support for <strong>JP3D compression<\/strong> has been removed from <strong>VolumeViz<\/strong>.<\/p>\n<p>These changes were necessary to ensure a secure and compliant software environment.<\/p>\n<hr \/>\n<h3>Open Inventor 9.9.36<\/h3>\n<p>As announced in <a href=\"https:\/\/developer.openinventor.com\/index.php\/general-documentation\/product-life-cycle\/#lifecycle\">Upcoming Life Cycle<\/a> Open Inventor 9.9.36 is the <strong>last release<\/strong> of Open Inventor 9 provided on <strong>Linux<\/strong>.<\/p>\n<hr \/>\n<h3>Open Inventor 9.9.21<\/h3>\n<p>As announced in <a href=\"https:\/\/developer.openinventor.com\/index.php\/general-documentation\/product-life-cycle\/#lifecycle\">Upcoming Life Cycle<\/a> Open Inventor 9.9.21 is the first release of Open Inventor 9 to drop unsupported version<\/p>\n<ul>\n<li>32-bit builds are not avalaible<\/li>\n<li>MacOS builds are not available<\/li>\n<li>Oracle JDK 8 has been replaced by OpenJDK 8 for Java packages<\/li>\n<\/ul>\n<hr \/>\n<h3>Open Inventor 9.9.17<\/h3>\n<p>Among fixed bugs (list is <a href=\"https:\/\/developer.openinventor.com\/index.php\/fixed-bugs-list\/fixed-bug-list-9-9\/\" rel=\"noopener noreferrer\" target=\"_blank\">available here<\/a>), Open Inventor 9.9.17 is the first release compliant with <strong><a href=\"https:\/\/isocpp.org\/std\/the-standard\" rel=\"noopener noreferrer\" target=\"_blank\">C++ 17 standards<\/a><\/strong>. All our public includes can now be compiled against any C++ 17 flags without generating any warning.<\/p>\n<hr \/>\n<h3>Open Inventor 9.9.15<\/h3>\n<p>Starting with Open Inventor 9.9.15, <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_render_area.html\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>RenderArea<\/strong><\/a> class in Inventor\/ViewerComponents\/Qt inherits from <strong>QWindow<\/strong> instead of <em>QOpenGLWidget<\/em> in order to support OpenGL stereo (aka Raw stereo) in Qt.<\/p>\n<p>This change introduces following API modifications<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_render_area.html\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>RenderArea<\/strong><\/a>::<em>resizeGL()<\/em> has been removed and is replaced by <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_render_area.html\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>RenderArea<\/strong><\/a>::<em>resizeEvent()<\/em><\/li>\n<li>Calls to <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_render_area.html\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>RenderArea<\/strong><\/a>::paintGL() must be replaced by <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_render_area.html\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>RenderArea<\/strong><\/a>::exposeEvent( QExposeEvent* e )<\/li>\n<li><a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_render_area.html\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>RenderArea<\/strong><\/a>::saveRenderArea() and <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_render_area.html\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>RenderArea<\/strong><\/a>::restoreRenderArea() are now deprecated and will have no effect<\/li>\n<\/ul>\n<p>Finally QWidget* <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_render_area.html\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>RenderArea<\/strong><\/a>::getContainerWidget() has been added and can be used to to insert a <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_render_area.html\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>RenderArea<\/strong><\/a> in any application (by calling, for instance, <em>window-&gt;setCentralWidget(renderArea-&gt;getContainerWidget()<\/em>)<\/p>\n<p>For Legacy viewers, only method <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_qt_g_l_widget.html\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>SoQtGLWidget<\/strong><\/a>::getFrameBufferObjectId() is now deprecated as it is now useless.<\/p>\n<p>All these modifications can be seen in <strong>Inventor\/ViewerComponents\/Qt<\/strong> code that is publicly available in any package you may have downloaded.<\/p>\n<hr \/>\n<h3><a id=\"Packaging\" name=\"Packaging\"><\/a>Packaging<\/h3>\n<p style=\"text-align: justify;\">With <strong>Open Inventor 9.9<\/strong> we continue the reorganization of our packages started with Open Inventor 9.8. In this new release only C++ packages have been updated with the following changes<\/p>\n<ul style=\"text-align: justify;\">\n<li>Demos binaries are now under &lt;<strong>OIVHOME&gt;\/examples\/bin. <\/strong>Under this folder you'll find\u00a0<strong>arch-xxx-Release, &lt;xxx&gt;\u00a0<\/strong>depending on the platform you are using, in which all modules are stored. Note that a &lt;arch-xxx-Debug&gt; folder will be created if you rebuild the demo by yourself.<\/li>\n<li>Data have also been moved and can now be found under\u00a0&lt;<strong>OIVHOME&gt;\/examples\/data<\/strong>. Once in this folder you will find one folder per Inventor Module, each storing data associated with demos.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">We are still working to make all three packages (C++, Java and .Net) as consistent as possible, meaning some more changes may be coming in future releases of Open Inventor.<\/p>\n<hr \/>\n<h3><a id=\"Java\" name=\"Java\"><\/a>Java<\/h3>\n<ul>\n<li style=\"text-align: justify;\"><a id=\"debuglib\" name=\"debuglib\"><\/a><strong>Debug Native Libraries<br \/>\n<\/strong><strong>Open Inventor 9.9 Java<\/strong> now includes all native debug libraries. These libraries are not used during the run time of your application and they must not be distributed. However they are useful to debug your application and to give customer support some traceback information relative to the native libraries of Open Inventor. See chapter <a href=\"https:\/\/developer.openinventor.com\/index.php\/debug-your-java-application\/\">HOW TOS \/ DEBUG YOUR JAVA APPLICATION<\/a><\/li>\n<\/ul>\n<ul>\n<li style=\"text-align: justify;\"><a id=\"osgi\" name=\"osgi\"><\/a><strong>OSGi support<br \/>\n<\/strong>We improve the integration of <strong>Open Inventor Java<\/strong> in <a href=\"https:\/\/www.osgi.org\/\">OSGi<\/a> applications on <u>Windows platform only.<\/u> When the first Open Inventor object is instantiated, all necessary native dlls are now loaded automatically. Thus we suggest to remove from your code any System.loadLibrary relative to OpenInventor dlls. However for other platforms, explicit loading of dependencies is still required in the application. See <a href=\"\/content\/system-requirements#osgi\">Support of OSGi\u00a0for details.<\/a><\/li>\n<\/ul>\n<hr \/>\n<h3><a id=\"OpenInventor\" name=\"OpenInventor\"><\/a>Open Inventor<\/h3>\n<ul>\n<li><a id=\"PolygonSimplification\" name=\"PolygonSimplification\"><\/a><strong>Polygon simplification enhancement<br \/>\n<\/strong>We have reimplemented the algorithm in Open Inventor 9.9. Based on\u00a0<em><strong><a href=\"https:\/\/people.eecs.berkeley.edu\/~jrs\/meshpapers\/GarlandHeckbert2.pdf\">Surface Simplification Using Quadric Error Metrics<\/a>\u00a0<\/strong><\/em>from\u00a0<em>Michael Garland<\/em> and\u00a0<em>Paul S. Heckbert<\/em> at\u00a0<u>Carnegie Mellon University<\/u> the new implementation offers better performances and is more reliable than before.Following benchmark shows the performance difference between Open Inventor 9.8 and Open Inventor 9.9 on meshes of multiple size.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-247 aligncenter\" src=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/simplifier_perf.png\" alt=\"\" width=\"838\" height=\"262\" \/>Moreover, a new demo has been added to the package to illustrate how fast and reliable the new simplification algorithm is. It is located in <strong style=\"text-align: justify;\">$OIVHOME\\examples\\source\\Inventor\\examples\\Features\\Simplification\\InteractiveSimplification.\u00a0<\/strong><span style=\"text-align: justify;\">The example can be used with default meshes but allows you to load your own meshes and save, as an .iv file,\u00a0the simplified mesh.<\/span><\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-246 aligncenter\" src=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/simplifier_example.png\" alt=\"\" width=\"1067\" height=\"602\" \/><\/p>\n<p style=\"text-align: justify; padding-left: 40px;\">Please refer to documentation of <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_global_simplify_action.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>SoGlobalSimplifyAction<\/strong><\/em><\/a>, <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_shape_simplify_action.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>SoShapeSimplifyAction <\/strong><\/em><\/a>and <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_reorganize_action.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>SoReorganizeAction<\/strong><\/em><\/a>.<\/p>\n<ul>\n<li style=\"text-align: justify;\"><strong>Pre-selection callback for SoExtSelection<br \/>\n<\/strong>In order to improve performance using <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_ext_selection.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>SoExtSelection<\/strong><\/em><\/a>, a pre-selection\u00a0callback has been added so it is now possible to \"skip over\" particular nodes.\u00a0The <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_ext_selection.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>SoExtSelection<\/strong><\/em><\/a> will traverse each node of scene graph and test intersection against each nodes. The new callback is called before doing the intersection test and can be used to avoid doing costly computation on nodes thet should not be selectable. Use the\u00a0<a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/struct_so_ext_selection_1_1_pre_filter_event_arg.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>PreFilterEventArg<\/strong><\/em><\/a>::discardNode() method inside your callback. The same effect can be achiebed by adding <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_pick_style.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>SoPickStyle<\/strong><\/em><\/a> nodes (style = UNPICKABLE) to the scene graph, but the new callback avoids adding a large number of SoPickStyle nodes in a complex scene graph.<\/li>\n<\/ul>\n<ul>\n<li style=\"text-align: justify;\"><a id=\"progress\" name=\"progress\"><\/a><strong>Progress indicator<br \/>\n<\/strong>A new class has been added to allow applications to display a progress\u00a0indicator.\u00a0<a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_progress_indicator.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>SoProgressIndicator<\/strong><\/em><\/a> notifies the application when a task starts, stops or when it is in progress. For example to update a progress bar on screen. Progress is conceptually divided into sequential tasks which are divided into subtasks, and each subtask can have multiple iteration steps.See events <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_progress_indicator.html#a4a8c9d4e653c762082dedddfe2d1bfc8\" target=\"_blank\" rel=\"noopener noreferrer\">onBeginTask<\/a>,\u00a0<a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_progress_indicator.html#ae3cbf420d03bd3aaad38530482e861f8\" target=\"_blank\" rel=\"noopener noreferrer\">onEndTask<\/a>,\u00a0<a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_progress_indicator.html#ae12ae5f1c25f4a8137119c1c91b8d52a\" target=\"_blank\" rel=\"noopener noreferrer\">onBeginSubTask<\/a>,\u00a0<a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_progress_indicator.html#ab4d35fdf53a4e20f8cc433171af9529b\" target=\"_blank\" rel=\"noopener noreferrer\">onEndSubTask<\/a>,\u00a0<a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_progress_indicator.html#a08cc6546730bef36dbaa96f608f571a2\" target=\"_blank\" rel=\"noopener noreferrer\">onEndStep<\/a>. Each event\u00a0has\u00a0specific arguments: <strong>TaskEventArg<\/strong>, <strong>SubTaskEventArg<\/strong>, <strong>StepEventArg<\/strong>.You can find an implementation example in following demo :<\/li>\n<\/ul>\n<ul>\n<li>C++: SimpleLightedVolume (<em><strong>$OIVHOME\\examples\\source\\VolumeViz\\examples\\simpleLightedVolume<\/strong><\/em>)<\/li>\n<li>Java: SimpleLightedVolume (<em><strong>$OIVJHOME\\examples\\volumeviz\\sample\\simpleLightedVolume<\/strong><\/em>)<\/li>\n<li>.Net: SoVolumeRenderingQuality (<em><strong>$OIVNETHOME\\examples\\source\\VolumeViz\\SoVolumeRenderingQuality<\/strong><\/em>)<\/li>\n<\/ul>\n<ul>\n<li><a id=\"DemoVR\" name=\"DemoVR\"><\/a><strong>VR Demo Under Linux<br \/>\n<\/strong>Support for Virtual Reality (VR), introduced for Microsoft Windows in Open Inventor 9.7 is now also available on Linux. It includes support for the popular\u00a0<strong style=\"text-align: justify;\">HTC Vive<\/strong><span style=\"text-align: justify;\">\u00a0and\u00a0<\/span><strong style=\"text-align: justify;\">Oculus Rift<\/strong><span style=\"text-align: justify;\">\u00a0Head Mounted Displays (HMD).\u00a0 Any Open Inventor scene graph can be displayed in VR and existing applications can easily be modified to support VR rendering and interaction. You will find a basic example program and some VR helper classes in the directory\u00a0<\/span><strong style=\"text-align: justify;\">$OIVHOME\/examples\/source\/Inventor\/examples\/demoVR.\u00a0<\/strong><span style=\"text-align: justify;\">The helper classes use head tracking to update the camera, render the Open Inventor scene graph in left and right eye views, and transfer the rendered images to the VR device. They also convert controller events (like button press) and controller position tracking to the standard Open Inventor VR event classes (see for example\u00a0<\/span><em style=\"text-align: justify;\"><strong><a href=\"http:\/\/developer97.openinventor.comhttps:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_tracker_event.html\">SoTrackerEvent<\/a><\/strong><\/em><span style=\"text-align: justify;\"><span style=\"text-align: justify;\">).<\/span><\/span>Please note that the VR classes\u00a0require\u00a0<a href=\"https:\/\/github.com\/ValveSoftware\/openvr\">OpenVR<\/a>.\u00a0 A prebuilt library is included with Open Inventor but you may want to install and build it yourself.\u00a0 You will need to install\u00a0<a href=\"http:\/\/store.steampowered.com\/vr\/\">SteamVR<\/a>.<\/li>\n<\/ul>\n<div class=\"center\" style=\"text-align: center;\"><iframe loading=\"lazy\" src=\"https:\/\/www.youtube.com\/embed\/2vWMZ-8LmyM?ecver=2\" width=\"800\" height=\"450\" frameborder=\"0\"><\/iframe><\/div>\n<hr \/>\n<h3><a id=\"ImageViz\" name=\"ImageViz\"><\/a>ImageViz<\/h3>\n<ul style=\"text-align: center;\">\n<li style=\"text-align: justify;\"><strong>Image Stack projection<br \/>\n<\/strong>The <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_image_stack_projection_processing3d.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>SoImageStackProjectionProcessing3d<\/strong><\/em><\/a> engine creates a single image using the best pixels from an input image stack. This feature is particularly useful when an acquisition device does not allow to grab an image focused in all areas of the acquisition field. For each pixel, the SoImageStackProjectionProcessing3d engine parses all images of the stack and selects the value offering the best contrast in order to build a resulting image focused everywhere. This engine can also produce higher quality results than using the standard Maximum Intensity Projection (MIP) rendering in VolumeViz.<\/li>\n<\/ul>\n<table class=\" aligncenter\" style=\"width: 998px; height: 433px;\" border=\"0\" cellspacing=\"2\" cellpadding=\"0\" align=\"center\">\n<tbody>\n<tr>\n<td><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-233\" src=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/image_stack_projection_1.jpg\" alt=\"\" width=\"497\" height=\"497\" \/><\/td>\n<td><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-234\" src=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/image_stack_projection_2.jpg\" alt=\"\" width=\"497\" height=\"497\" \/><\/td>\n<td><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-235\" src=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/image_stack_projection_3.jpg\" alt=\"\" width=\"497\" height=\"497\" \/><\/td>\n<\/tr>\n<tr>\n<td class=\"rtecenter\" style=\"width: 333px; text-align: center;\"><strong><sup>First image of the stack<\/sup><\/strong><\/td>\n<td class=\"rtecenter\" style=\"width: 333px; text-align: center;\"><strong><sup>Second image of the stack<\/sup><\/strong><\/td>\n<td class=\"rtecenter\" style=\"width: 333px; text-align: center;\"><strong><sup>Result of Image Stack Projection<br \/>\n(in Gradient mode)<\/sup><\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ul>\n<li style=\"text-align: justify;\"><strong>Structure enhancement filter<br \/>\n<\/strong>The new engines <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_multiscale_structure_enhancement_processing2d.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>SoMultiscaleStructureEnhancementProcessing2d<\/strong><\/em><\/a> and <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_multiscale_structure_enhancement_processing3d.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>SoMultiscaleStructureEnhancementProcessing3d<\/strong><\/em><\/a> compute a score between 0 and 1 for each pixel, 1 representing a good matching with a structure model and 0 a background pixel. This provides a powerful trchnique for automatically identifying structures such as blood vessels. The size of the structures to enhance is defined by a scale range parameter. For instance, it is possible to reveal different diameters of rod structures by adjusting this range. The score can be computed either on an Hessian matrix to detect ridge structures or on a Gradient tensor for object edges and corners. The structure models available are:<\/li>\n<\/ul>\n<ul>\n<li>Balls (circular structures with Hessian in 2D, spherical in 3D, object corners with Gradient tensor)<\/li>\n<li>Rods (linear structures)<\/li>\n<li>Plates (only available in 3D)<\/li>\n<\/ul>\n<p style=\"padding-left: 40px; text-align: center;\">The following publication describes this algorithm when applied to detect Rod structures with the Hessian matrix: A.F.Frangi, W.J.Niessen, K.L.Vincken, M.A.Viergever, \"Multiscale vessel enhancement filtering\", <em>Lecture Notes in Computer Science(MICCAI)<\/em>, vol. 1496, pp. 130-137, 1998.<\/p>\n<table class=\" aligncenter\" style=\"width: 800px;\" border=\"0\" cellspacing=\"2\" cellpadding=\"0\" align=\"center\">\n<tbody>\n<tr>\n<td><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-279\" src=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/structure_enhancement_filter_1.png\" alt=\"\" width=\"400\" height=\"400\" \/><\/td>\n<td><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-280\" src=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/structure_enhancement_filter_2.png\" alt=\"\" width=\"400\" height=\"400\" \/><\/td>\n<\/tr>\n<tr>\n<td class=\"rtecenter\" style=\"width: 333px; text-align: center;\"><strong><sup>Fundus photograph of the left eye <span style=\"color: #ff0000;\">*<\/span><\/sup><\/strong><\/td>\n<td class=\"rtecenter\" style=\"width: 333px; text-align: center;\"><strong><sup>Multiscale structure enhancement filter<br \/>\nbased on Hessian matrix for enhancing Rod structures.<\/sup><\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"color: #ff0000;\">*<\/span> <em><sup><strong>H\u00e4ggstr\u00f6m, Mikael (2014). &quot;Medical gallery of Mikael H\u00e4ggstr\u00f6m 2014&quot;. WikiJournal of Medicine 1 (2). DOI:10.15347\/wjm\/2014.008. ISSN 2002-4436. Public Domain.<\/strong><\/sup><\/em><\/p>\n<ul style=\"text-align: center;\">\n<li><strong>Local adaptive thresholding<br \/>\n<\/strong>The new engine SoLocalAdaptiveThresholdProcessing performs a binarization by applying a threshold that is automatically adapted relative\u00a0to the mean intensity value of a sliding window.<\/li>\n<\/ul>\n<table class=\" aligncenter\" style=\"width: 1000px;\" border=\"0\" cellspacing=\"2\" cellpadding=\"0\" align=\"center\">\n<tbody>\n<tr>\n<td><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/local_adaptativ_thresholding_1.jpg\" alt=\"\" width=\"469\" height=\"469\" \/><\/td>\n<td><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/local_adaptativ_thresholding_2.jpg\" alt=\"\" width=\"512\" height=\"512\" \/><\/td>\n<td><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/local_adaptativ_thresholding_3.jpg\" alt=\"\" width=\"469\" height=\"469\" \/><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 333px; text-align: center;\"><strong><sup>Grayscale input image<\/sup><\/strong><\/td>\n<td style=\"width: 333px; text-align: center;\"><strong><sup>Attempt of binarization with a global threshold<\/sup><\/strong><\/td>\n<td style=\"width: 333px; text-align: center;\"><strong><sup>Result of a local adaptive thresholding, retaining pixels lower than 90% of the local mean<br \/>\n(in Gradient mode)<\/sup><\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ul>\n<li><strong>Local thickness map optimization<br \/>\n<\/strong>The <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_local_thickness_map_processing3d.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>SoLocalThicknessMapProcessing3d<\/strong><\/em><\/a> engine proposes a new parameter <em><strong>PrecisionMode<\/strong><\/em> which allows to choose between a precise and a fast computation mode. The former engine always used precise mode.<\/li>\n<\/ul>\n<p style=\"padding-left: 40px; text-align: center;\">The fast mode is especially useful when the input image contains some thick structures which are very long to compute. The resulting image is a bit less precise on the object boundaries. These artifacts are not damaging since this information is generally not relevant on object borders.<\/p>\n<table class=\" aligncenter\" style=\"width: 1000px;\" border=\"0\" cellspacing=\"2\" cellpadding=\"0\" align=\"center\">\n<tbody>\n<tr>\n<td><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-239 aligncenter\" src=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/local_thickness_map_opt_1.png\" alt=\"\" width=\"100\" height=\"100\" \/><\/td>\n<td><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-240 aligncenter\" src=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/local_thickness_map_opt_2.png\" alt=\"\" width=\"100\" height=\"100\" \/><\/td>\n<td><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-241 aligncenter\" src=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/local_thickness_map_opt_3.png\" alt=\"\" width=\"100\" height=\"100\" \/><\/td>\n<\/tr>\n<tr>\n<td class=\"rtecenter\" style=\"width: 333px; text-align: center;\"><strong><sup>Binary input image (100x100x100)<\/sup><\/strong><\/td>\n<td class=\"rtecenter\" style=\"width: 333px; text-align: center;\"><strong><sup>Thickness map in precise mode (46 sec.)<\/sup><\/strong><\/td>\n<td class=\"rtecenter\" style=\"width: 333px; text-align: center;\"><strong><sup>Thickness map in fast mode (5 sec.)<\/sup><\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h3><a id=\"Medical\" name=\"Medical\"><\/a>Medical Content<\/h3>\n<ul>\n<li style=\"text-align: justify;\"><strong>3D volume \"unfolding\" based on a surface (preview feature)<br \/>\n<\/strong><u><strong>Important note:<\/strong><\/u> the features described in this section are proposed as preview version. This means that the API\u2019s of these features and their behavior are subject to change in the next Open Inventor version.A set of engines is now available for creating a mesh approximating a surface in a 3D volume and then extracting the corresponding voxels in as a new volume. Volume unfolding is an essential technique for creating a dental \u201cpanoramic\u201d image from 3D volume data. For material science and other markets, unfolding can be used to create a \u201cflattened\u201d view of the voxels corresponding to any cylinder, spiral or curved path in the input volume. \u00a0In some cases, particularly for a \u00a0dental panoramic, unfolding based on a surface which is simply extruded from a curve does not give the highest possible image quality. Therefore a surface fitting engine is provided that automatically adjusts the vertices of an input surface to follow the shape of the structures in the 3D volume. \u00a0In the dental panoramic case, the fitted surface corresponds to the shape of the patient\u2019s teeth, jaw and facial bones.<\/p>\n<ul>\n<li class=\"rtejustify\"><a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_poly_line_resampler_approximation3d.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>SoPolylineResamplerApproximation3d <\/strong><\/em><\/a>to resample a given polyline with a fixed segment size.\u00a0For example, to convert a polyline created interactively by the user into a regularly sampled smooth curve based on spline fitting.<\/li>\n<li><a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_polyline_extrusion_approximation.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>SoPolylineExtrusionApproximation<\/strong><\/em><\/a>\u00a0to create a quadrilateral mesh surface by extruding an input polyline in the specified direction.<\/li>\n<li><em><strong><a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_surface_fitting_approximation3d.html\" target=\"_blank\" rel=\"noopener noreferrer\">SoSurfaceFittingApproximation3d<\/a><\/strong><\/em> to fit a mesh with a cost function given in a volume, e.g. representing the distance to the outside of a wall<\/li>\n<li><a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_so_surface_unfolding_processing3d.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>SoSurfaceUnfoldingProcessing3d<\/strong><\/em><\/a> to resample a volume by extracting voxels within a specified distance from a mesh surface and create a new volume based on a \u201cflattened\u201d version of the surface<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p style=\"padding-left: 40px;\">The unfolding can be tested with the new <strong>MedicalDentalSurfaceUnfolding<\/strong> demo added in folder $OIVHOME\/examples\/bin\/arch-&lt;xxx&gt;-Release\/Medical\/Dental in the <strong>Open Inventor<\/strong>\u00a0package.<\/p>\n<h3><a id=\"automaticpanoramic\" name=\"automaticpanoramic\"><\/a>Automatic Panoramic<\/h3>\n<p style=\"text-align: justify;\">Added in Open Inventor 9.9.4,\u00a0the <em><strong><a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_dental_panoramic_extractor.html\" target=\"_blank\" rel=\"noopener noreferrer\">DentalPanoramicExtractor<\/a> <\/strong><\/em>new class proposes a high level API dedicated to automatic\u00a0dental panoramic extraction from a 3D CBCT volume (based on engines listed above). Contrarily to the already existing low level API, this new class allows to build a dental panoramic with only few line of codes.<\/p>\n<p>The panoramic extractor can be tested with the new medicalDentalAutomaticPanoramic demo added in folder $OIVHOME\/examples\/bin\/arch-&lt;xxx&gt;-Release\/Medical\/Dental in the Open Inventor package (only C++).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-242 aligncenter\" src=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/panoramic_dental.png\" alt=\"\" width=\"850\" height=\"469\" \/><\/p>\n<hr \/>\n<h3><a id=\"MeshVizXLM\" name=\"MeshVizXLM\"><\/a>MeshVizXLM<\/h3>\n<ul>\n<li><a id=\"XLMNetEoS\" name=\"XLMNetEoS\"><\/a>MeshVizXLM .NET end of support<br \/>\n<u>Open Inventor 9.9 will be the last\u00a0version including the .NET version of MeshVizXLM<\/u>. Starting from here, source will be frozen and no new feature will be added to this module in its .NET version. Starting with Open Inventor 10.0, MeshViz XLM .NET is no longer available.<strong>Please note<\/strong>\u00a0 MeshVizXLM can still be used in .NET applications through the MeshVizXLM C++ API.Also note that the MeshVizXLM Java API is still supported. We have made this change because, unlike other components in Open Inventor which are simply \u201cwrapped\u201d, MeshVizXLM is natively implemented in each target language.\u00a0 Using MeshVizXLM C++ for both C++ and .NET applications allows us to spend more tuning and optimizing performance.<\/li>\n<\/ul>\n<ul>\n<li><a id=\"XLMcombining\" name=\"XLMcombining\"><\/a><strong>Combining data sets (C++)<\/strong><br \/>\nUntil <strong>Open Inventor 9.9<\/strong>\u00a0MeshViz XLM was only able to take into account one dataset to map a value into a color (single color mapping). This new version introduces the capability to combine several dataset into colors. In order to combine several datasets a\u00a0new class <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_mo_combine_color_mapping.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>MoCombineColorMapping<\/strong><\/em><\/a> has been added to the public API.In order to explain how to use the new feature, you can start with the tutorial example provided in <em><strong>OIVHOME\\examples\\source\\MeshVizXLM\\mapping\\tutorials\\ColorMapping\\Combine<\/strong><\/em>MeshViz XLM used to support\u00a0only one color mapping: the dataset that was used to map a value into a color was defined by the field <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_mo_mesh_representation.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>MoMeshRepresentation<\/strong><\/em><\/a>::<em><strong>colorScalarSetId<\/strong><\/em>. This field's value\u00a0represents the occurence of the dataset node inherited in the scene graph during a traversal\u00a0(0 means that the skin uses the first node <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_mo_scalar_set.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>MoScalarSet<\/strong><\/em><\/a>* found). This behaviour is still fully supported in this new version. However, as the combine color mapping uses several scalar sets, the value of the field <em><strong>colorScalarSetId<\/strong><\/em> is ignored by any mesh representation when using a <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_mo_combine_color_mapping.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>MoCombineColorMapping<\/strong><\/em><\/a> .Actually we can describe how MeshViz selects the list of dataset used to color any representation of a mesh in this way<\/li>\n<\/ul>\n<ul>\n<li>If a single color mapping is used (any class inherited from <em><strong><a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_mo_color_mapping.html\" target=\"_blank\" rel=\"noopener noreferrer\">MoColorMapping<\/a><\/strong><\/em>), the dataset used to compute color is selected according the field <em><strong>colorScalarSetId<\/strong><\/em><\/li>\n<li>if a combine color mapping (<a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_mo_combine_color_mapping.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>MoCombineColorMapping<\/strong><\/em><\/a> ) is used , the representation class (<a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_mo_mesh_skin.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>MoMeshSkin <\/strong><\/em><\/a>for instance) will search for all <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_mo_scalar_set.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>MoScalarSet<\/strong><\/em><\/a> objects found in the state during the scene graph traversal. Thus a list of scalar set is built, and a sub set of this scalar sets are extracted. Then for each vertex or polygon extracted, the list of scalar values extracted are combined into a single color by using the <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_mi_color_mapping.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>MiColorMapping<\/strong><\/em><\/a><em>&lt;std::vector&lt; double &gt;&gt;<\/em>::<em><strong>getColor <\/strong><\/em>method.<\/li>\n<\/ul>\n<p style=\"padding-left: 40px;\"><u><strong>Known limitation<\/strong><\/u>: The <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_mo_legend.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>MoLegend<\/strong><\/em><\/a> class supports only single color mapping, so it logically ignores the <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_mo_combine_color_mapping.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>MoCombineColorMapping<\/strong><\/em><\/a> class.<\/p>\n<ul>\n<li><a id=\"CurvilinearMeshImprovement\" name=\"CurvilinearMeshImprovement\"><\/a><strong>Curvilinear mesh performance improvement (C++)<br \/>\n<\/strong>Thanks to a new multi-threaded implementation of internal algorithms, the time needed to extract a skin, a slab, or a slice on a curvilinear volume mesh has been drastically reduced in Open Inventor 9.9.(Reminder: A curvilinear mesh can be used to efficiently represent a grid in which all adjacent cells share their corner points. For example, a reservoir model that does not contain \u201cfaults\u201d.)The first chart below shows the performance improvement for the first extraction (i.e. the one building internal caches required to handle active cells). It shows different use cases on a grid containing 50 millions cells. Please note this benchmark has been run on a 12 core CPU.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-228 aligncenter\" src=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/Curvilinear_mesh_performance_improvement.png\" alt=\"\" width=\"850\" height=\"403\" \/><br \/>\nThe following chart shows that even better improvements occur for subsequent extractions (subsequent extractions are done when a parameter of the rendering has changed like new position of a slab, new filtering criteria, etc.).<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-229 aligncenter\" src=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/Curvilinear_mesh_performance_improvement_2.png\" alt=\"\" width=\"850\" height=\"402\" \/><br \/>\nFinally, the chart available at <a href=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/Curvilinear_mesh_performance_improvement_3.png\" target=\"_blank\" rel=\"noopener noreferrer\">this address<\/a> shows that even memory consumption has benefited from this new algorithm implementation.<\/li>\n<\/ul>\n<h4><a id=\"XLMmomeshvector\" name=\"XLMmomeshvector\"><\/a>MoMeshVector improvement (C++ \/ Java)<\/h4>\n<p>The class\u00a0<em><strong><a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_mo_mesh_vector.html\" target=\"_blank\" rel=\"noopener noreferrer\">MoMeshVector<\/a><\/strong><\/em> has the new capability to shift each vector of the vector field representation along the direction of the vector. A typical use case is to allow either to render each vector as pointing into the target point (usually the mesh node or the center of each cell), or to render each vector starting from the target point.<\/p>\n<p style=\"text-align: center;\">For this, a\u00a0new field <em><strong><a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_mo_mesh_vector.html#a6582cd86861495f1cfb59f8e86a9f71f\" target=\"_blank\" rel=\"noopener noreferrer\">MoMeshVector::shiftFactor<\/a><\/strong><\/em> has been added to define the factor of shift. It is relative to each vector direction. The following image illustrates the effect of\u00a0<em><strong>shiftFactor<\/strong><\/em> (3 different\u00a0values are shown) on a vector field defined PER_CELL (target points are the center of each cell)<\/p>\n<table class=\" aligncenter\" style=\"width: 1000px;\" border=\"0\" cellspacing=\"2\" cellpadding=\"0\" align=\"center\">\n<tbody>\n<tr>\n<td><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-243 aligncenter\" src=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/shiftFactor_1.png\" alt=\"\" width=\"195\" height=\"152\" \/><\/td>\n<td><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-244 aligncenter\" src=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/shiftFactor_2.png\" alt=\"\" width=\"195\" height=\"152\" \/><\/td>\n<td><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-245 aligncenter\" src=\"https:\/\/developer.openinventor.com\/wp-content\/uploads\/2019\/08\/shiftFactor_3.png\" alt=\"\" width=\"195\" height=\"152\" \/><\/td>\n<\/tr>\n<tr>\n<td class=\"rtecenter\" style=\"width: 333px; text-align: center;\"><strong><sup>shiftFactor = 0<\/sup><\/strong><\/td>\n<td class=\"rtecenter\" style=\"width: 333px; text-align: center;\"><strong><sup>shiftFactor = -1<\/sup><\/strong><\/td>\n<td class=\"rtecenter\" style=\"width: 333px; text-align: center;\"><strong><sup>shiftFactor = -0.5<\/sup><\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h3><a id=\"RemoteViz\" name=\"RemoteViz\"><\/a>RemoteViz<\/h3>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>An H.264 encoder using <strong>OpenH264 library<\/strong> (CPU encoding) has been introduced in this new version of RemoteViz. Compared to the existing Nvidia video encoder (NvEnc), this new encoder does not require any specific hardware to be used. The demo <em><strong>$OIVHOME\/examples\/source\/RemoteViz\/HelloConeH264\u00a0<\/strong><\/em>has been updated to show how to implement a fallback from NvEnc to OpenH264 encoder.<\/li>\n<li>The class <a href=\"http:\/\/developer98.openinventor.comhttps:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_remote_viz_1_1_rendering_1_1_bandwidth_settings.html\"><strong><em>BandwidthSettings<\/em><\/strong><\/a> has been removed and replaced by the class <em>NetworkPerformance<\/em>. The new class <em>NetworkPerformance<\/em> contains the same methods as the old class <a href=\"http:\/\/developer98.openinventor.comhttps:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_remote_viz_1_1_rendering_1_1_bandwidth_settings.html\"><strong><em>BandwidthSettings<\/em><\/strong><\/a> except for the method <strong><em>setBandwidth<\/em>() that has been removed<\/strong>: The client bandwidth value can now be modified by using the existing method <em><strong><a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_remote_viz_1_1_rendering_1_1_client_settings.html\" target=\"_blank\" rel=\"noopener noreferrer\">ClientSettings<\/a><\/strong>::setBandwidth<\/em>().<\/li>\n<li>TypeScript is an open-source programming language developed and maintained by Microsoft. It is a strict syntactical superset of JavaScript, and adds optional static typing to the language. A TypeScript declaration file is provided in order to use the RemoteViz client API in a TypeScript application (see <em><strong>$OIVHOME\/remotevizHTML5\/RemoteVizClient.d.ts<\/strong><\/em>).In addition to the existing JavaScript web client of the RemoteViz example <em><strong>ClientWorkBench<\/strong><\/em>, a web client coded in TypeScript and using the framework Angular has been added (see <em><strong>$OIVHOME\/examples\/source\/RemoteViz\/ClientWorkbench\/Clients\/HTML5\/TypeScript-Angular<\/strong><\/em>)<\/li>\n<li>In RemoteViz 9.8, the frame quality was calculated from the FPS (frames per second) and the bandwidth defined for the connection. The drawnback\u00a0of this calculation is that when the bandwidth of the connection is modified, the only variable parameter is the frame quality. FPS value is always considered as constant.In RemoteViz 9.9, we introduced new policies for FPS and frame quality calculation:\n<ul>\n<li><a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_remote_viz_1_1_rendering_1_1_keep_frame_quality_policy.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>KeepFrameQualityPolicy<\/strong><\/em><\/a> (default behavior): This policy privileges the frame quality over the FPS. The frame quality is kept constant as possible, the adjustable parameter is the FPS.<\/li>\n<li><a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_remote_viz_1_1_rendering_1_1_keep_frames_per_second_policy.html\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>KeepFramesPerSecondPolicy<\/strong><\/em><\/a>: This policy privileges the FPS over the frame quality. FPS is kept constant as possible, the adjustable parameter is the frame quality<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p class=\"rteindent1\" style=\"padding-left: 40px;\">The policy used by a connection can be defined using the method <a href=\"https:\/\/developer.openinventor.com\/refmans\/9.9\/RefManCpp\/class_remote_viz_1_1_rendering_1_1_connection_settings.html#a98a821ef99160efb0949b9974f8afae2\" target=\"_blank\" rel=\"noopener noreferrer\"><em><strong>ConnectionSettings::setFrameEncodingPolicy<\/strong><\/em><\/a>.<\/p>\n<p>&nbsp;<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>The following document contains the release notes for Open Inventor 9.9. Bugs fixed by this release can be reviewed\u00a0on this&hellip;<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-31","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/developer9.openinventor.com\/index.php\/wp-json\/wp\/v2\/pages\/31","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/developer9.openinventor.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/developer9.openinventor.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/developer9.openinventor.com\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/developer9.openinventor.com\/index.php\/wp-json\/wp\/v2\/comments?post=31"}],"version-history":[{"count":5,"href":"https:\/\/developer9.openinventor.com\/index.php\/wp-json\/wp\/v2\/pages\/31\/revisions"}],"predecessor-version":[{"id":165,"href":"https:\/\/developer9.openinventor.com\/index.php\/wp-json\/wp\/v2\/pages\/31\/revisions\/165"}],"wp:attachment":[{"href":"https:\/\/developer9.openinventor.com\/index.php\/wp-json\/wp\/v2\/media?parent=31"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}