:tocdepth: 2

############
Envision 2.2
############

May 29, 2024 - SHA: 3c2a0344

**Updated Supported Platforms**

Envision is now build on the following configuration:

====================    ==========================      ===========================
Supported platforms     Operating system                Compiler
====================    ==========================      ===========================
Windows                 Windows 10                      MSVC 2019 (142 toolset)
Linux                   Rocky 8.9 (glibc 2.28)          gcc 8.5
====================    ==========================      ===========================


------------------------------------------------

|web| Envision for Web        |desktop| Envision for Desktop


*************
New Features
*************

CAE-1181 Operator Mechanism and Operator Examples |web|
=======================================================

Operators allow developers to more easily hook into the browser event loop and fire custom actions in response to user 
inputs. They encapsulate the logic of handling ``Viewer`` user input in a single place, and to make it easier to switch 
between different modes of interaction (i.e. - Navigation, Picking, Transformations). Before operators, these 
interactions were either hard-coded and internal to the product, or setup by a developer using DOM event listeners.
Multiple operators can be written and used together in your application. Any operator on a ``View.operatorStack`` will 
be active for your scene, meaning it will respond to any input event you may have set up for it. The ``operatorStack`` 
can push, pop, set, find, and reorder any number of operators, so you can quickly enable and manage different modes of 
interaction in your scene.

You can read more about Operators and how to use them on our Operators documentation page:
https://docs.techsoft3d.com/hoops/latest/envision-web/operators.html

There is also a exploratory app in Examples/Operators where you can find sample code for different operators we have 
written, and how they may be used in a scene.

.. image:: ../images/release-notes/cae1181.png


CAE-1355 Create Envision distributions on Rocky Linux |web| |desktop|
=====================================================================

Linux versions of Envision Web and Envision Desktop are now built on Rocky Linux 8.9 with glibc 2.28 and gcc 8.5.
You can read more about Rocky Linux here: https://rockylinux.org/


CAE-1310 New navigation type: rotate around x, y, z axes |web|
==============================================================

This ticket allows a specified keyboard key to be held and activate a navigation mode that rotates the model about a 
desired axis. In the feature request, it is described that they would like to hold the x key to rotate about the model 
X axis, the y key to rotate about the model Y axis, and the z key to rotate about the model Z axis.

To demonstrate this, we used the work done on operators to extend and customize our ``NavigationOperator``. The main 
change to the API allows the user to specify an arbitrary axis of rotation to rotate about. The ``TrackballManipulator`` 
will look to see if a valid rotation vector is provided, and if so, will use that as the rotation axis for the rotate 
operation. If it is undefined or null, the rotation behaves as before.

Using operators, a user can extend the Navigation operator to detect ``onKeyDown`` and ``onKeyUp`` inputs and set the 
desired input keys and rotation axes. In the case of the support request, we look for key presses for X, Y, and Z and 
if held, will set the rotation axis to (1, 0, 0), (0, 1, 0), and (0, 0, 1) respectively. If released, the rotation 
vector is reset to undefined and behaves as default.


CAE-1312 Updated internal XML parser library |web| |desktop|
============================================================

To remove a CVE we have removed an internal xml parser library, TinyXML, which has been discontinued. The xml parser has 
been replaced with pugixml 1.14. (https://pugixml.org/)

This is an internal implementation used for reading/writing Envision VTFx files and should not cause any changes for 
Envision users.

Note! The CeeReport component still uses TinyXML. This will be addressed in a later release.


CAE-1340 Add state group support on Web |web|
=============================================

State groups are extracted from the states which are flagged as groups and sent to the client 
(``ModelDirectory.stateGroupInfoArray``).
The user can inspect the state groups and set them as needed in ``ModelSpec.stateIdArray`` to setup an animation.


CAE-1361 Extended and documented LOD controls for streaming in RemoteModel |web|
================================================================================

Extended and documented LOD controls for streaming in RemoteModel


------------------------------------------------

***********
Fixed Bugs
***********

CAE-1308 view.getBoundingBoxVisibleParts() not working when there are invisible parts with opacity |web|
========================================================================================================

The ``getBoundingBoxVisibleParts()`` now handles invisible parts with opacity.


CAE-1309 Expanded beams: Draw Style set to LINES make beams invisible |desktop|
===============================================================================

This fix allows for the visualization of expanded elements as lines using ``DrawStyle.LINES`` (or any other lines 
based drawstyle, such as ``HIDDEN_LINES_REMOVED``). Prior to this change, using these draw styles resulted in no 
rendering of the element, since triangles were not being generated/displayed, and lines were not supported. 


CAE-1308 Invalid bounding box for an empty view |web|
=====================================================

``RemoteModel.getBoundingBox`` and ``View.getBoundingBox`` are now correctly returning an invalid bounding box when 
all the parts are hidden (the view is empty).


CAE-1342 Switching case from case with animation to the one with no animations produces an error |web|
======================================================================================================

- Fixed an error when repopulating ``ModelDirectory`` after switching a VTFx case
- Fixed a bug when switching from a VTFx case with animation to a case without one


CAE-1353 Assert failures in BoundingBox functions when all parts hidden |web|
=============================================================================

Now support sending an invalid bounding box to client, in the event all parts are hidden and the computed bounding box 
is empty. This was an issue introduced in Envision 2.0 with the update to bounding box handing.


CAE-1362 OpenFOAM: Crash in Data Provider for dataset with sampled surfaces |web| |desktop|
===========================================================================================

The support for multi-dimensional results for sampled surfaces were not fully implemented in the OpenFOAM data provider.
Improvements were done to the sampled surfaces and node-averaged multi-dimensional (vector, tensor) results.


CAE-1363 Exclude undefined values from global maximum in QueryResultMinMax |web|
================================================================================

Ignore undefined results by default for global min/max in QueryResultMinMax


CAE-1366 Displacement results show wrong scaleFactor on Web |web|
=================================================================

When applying the default case to a model with a displacement result, that displacement will have its ``scaleFactor`` 
set by default to 3.4028234663852886e+38 (if it's not set otherwise from the VTFx file). This fix makes sure that the 
scale factor defaults in this scenario to 1.


CAE-1367 VTU: Not correctly identifying file as vtu file |web| |desktop|
========================================================================

The file interface for VTU files did not always correctly identify the VTU file. This logic has been improved.