:tocdepth: 2

##############
Envision 3.2
##############

Apr 30, 2025 - SHA: 5a46dff9

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

.. note::

    Starting with this release, Envision no longer supports macOS on Intel-based systems. 
    Support for macOS on ARM64 (Apple Silicon) continues to be available.


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

CAE-1410 New component: Visualization Streamer |web|
========================================================================

The Visualization Streamer is a cutting-edge addition to the Envision Web toolkit. It enables seamless 
streaming of ready-to-render display models from server-side services, such as legacy desktop applications, directly 
to web applications. Additionally, it supports advanced workflows, including microservices that perform machine 
learning tasks on CAD or CAE models and deliver modified display models to web applications.

It consists of several parts:

- VizStreamer Service - A server application with a gRPC interface capable of receiving CAE display data and streaming 
  it to the Stream Model client model.
- VizStreamer Proxy - A C++ proxy (header files + static lib) to make it easy to send data from a C++ application to 
  the VizStreamer Service.
- Stream Model - A Envision Web client-side model capable of rendering the 3D models sent from the VizStreamer 
  Service.

Read more about the Visualization Streamer in the documentation:
https://docs.techsoft3d.com/hoops/latest/envision-web/viz-streamer/index.html

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


CAE-1237 Enable filling of cutting planes on surfacic objects |desktop|
========================================================================

This feature introduces the ability to triangulate and fill cross-sectional geometry for surfacic objects.

It employs a callback-based design pattern, enabling users to define custom triangulation algorithms without altering 
the core codebase.

To implement this feature, users can derive a class from the ``ug::CuttingPlaneTriangulationCallback`` base class and 
override the ``generateTriangles()`` method. The custom callback is then passed to the underlying toolkit, where it is 
adapted for use.

The central component of this feature is the ``generateTriangles()`` virtual method in the 
``CuttingPlaneTriangulationCallback`` class.

**Input: CuttingPlaneContourData**

- ``contourVertices``: A list of 3D points defining the contour boundary.
- ``contourEdges``: Edge connectivity, represented as indices into ``contourVertices``.
- ``planeNormal``: The normal vector of the cutting plane.

**Output: CuttingPlaneTriangulationData**

- ``triangleIndices``: Indices defining the generated triangles (groups of 3).
- ``triangleVertices``: The vertices used in the triangulation process.

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

Below is an example of a basic implementation that generates a single triangle:

.. code:: cpp

    class SimpleTriangulationCallback : public cee::ug::CuttingPlaneTriangulationCallback
    {
    public:
        bool generateTriangles(const cee::ug::CuttingPlaneContourData& contourData, cee::ug::CuttingPlaneTriangulationData* result) override
        {
            if (contourData.contourVertices.size() < 3)
            {
                return false;
            }

            // pick a node from the start, 1/3, and 2/3 of the contour
            result->triangleIndices.push_back(0);
            result->triangleIndices.push_back(1);
            result->triangleIndices.push_back(2);

            result->triangleVertices.push_back(contourData.contourVertices[0]);
            result->triangleVertices.push_back(contourData.contourVertices[contourData.contourVertices.size() / 3]);
            result->triangleVertices.push_back(contourData.contourVertices[2 * contourData.contourVertices.size() / 3]);

            return true;
        }
    };


CAE-1333 Add Acknowledgement pages to Envision |web| |desktop|
========================================================================

This feature introduces a new Acknowledgements page in the Envision documentation. This page provides a comprehensive
overview of the open-source software and third-party components used in Envision, along with their respective 
licenses.


CAE-1494 Updated to newer RapidJSON  |web| |desktop|
========================================================================

This update integrates a newer version of RapidJSON (25.03.2025), ensuring compatibility with modern C++ standards and 
improving performance and stability. The upgrade includes fixes for known issues and enhancements to JSON parsing and 
serialization.


CAE-1497 Resolved GCC 13 compiler support |web| |desktop|
========================================================================

This update resolves all known compiler errors on GCC 13, ensuring full compatibility and stable performance.



