:tocdepth: 2

##############
Envision 6.0
##############

June 1, 2026

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

****************
Breaking Changes
****************

CAE-1636 Add support for Node.js 24 |web|
==================================================================

This release adds the support for Node.js v24 as well as deprecates the support for Node.js 20. 
Note that we will remove the support for Node.js 20 in one of the upcoming releases. 
Consequentially, we have updated all of the internal and external npm dependencies to their latest possible versions. 

Possibly breaking changes: 

- All npm dependencies for the servers have been updated.
- GeoServer: Static method ``ModelImportCgeo.importFromArrayBuffer`` now has an ``ArrayBufferLike`` parameter type, instead of ``ArrayBuffer``.
- UgServer, GeoServer: changed import type for the ``uuid`` package.
- Removed the deprecated ``Buffer`` constructor and replaced it with static factory methods in various server's distributed source files (not a public API change).
- Part pieces for the UgServer are now grouped in packets using a single binary attachment, to get around socket.io's newly imposed limit of 10 binary attachments per packet. 

CAE-1690 Upgraded to oneTBB 2022.3.0 on all supported platforms |desktop| |web|
=================================================================================

Upgraded to oneTBB 2022.3.0 for all supported platforms. Support for oneTBB on Intel Mac has now been dropped.

CAE-1658 Removed ``ug.Case`` class from the public API |web|
==================================================================

The ``ug.Case`` class has been removed from the public API since it has very limited usage in its current form.

CAE-1691 Removed info-box packet from UG streaming protocol and moved content generation to client |web|
========================================================================================================

Packet-format updates removed the dedicated info-box packet and moved info-box construction to the client.
The info box now shows current frame counts when animation is not running, and stable animation-wide values (min/max when varying)
during playback. The public property ``RemoteModel.modelInfoString`` has been removed.


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

CAE-1580 Added support for Python 3.14 |desktop|
==================================================

Envision Desktop has updated its Python support to additionally include Python 3.14. 


CAE-1626 New ``cee.pt`` module and PtServer for particle visualization |web|
==============================================================================

A new ``cee.pt`` module enables client-side visualization of time-stepped particle simulation data.
The module introduces:

- ``cee.pt.ParticleModel`` - main model class for streaming pre-computed particle frames from the PtServer.
- ``cee.pt.Animation`` - frame-based animation controller with playback and seeking.
- **PtServer** - a stateless REST-based Node.js server (default port 8999) powered by the ``CeeParticleAddon``
  native addon. Unlike UgServer's socket-based architecture, PtServer uses HTTP REST endpoints, enabling
  horizontal scaling and multi-session support without server-side state.

Supported file formats:

- **PTFX** - Ceetron binary particle format optimized for fast sequential frame access.
- **VTP** - VTK PolyData XML format (particle subset).
- Additional formats can be added via reader plugins (``cpt_*`` shared libraries) discovered from
  ``CEW_PT_READER_PLUGIN_FOLDER``.

REST API endpoints (enabled via ``CEW_PT_ENABLE_REST_API_QUERY`` / ``CEW_PT_ENABLE_REST_API_UPLOAD``):

- ``GET /api/v1/models`` - list available models.
- ``GET /api/v1/models/:modelKey/info`` - dataset metadata (frame count, fields, bounding box).
- ``GET /api/v1/models/:modelKey/frame/:frameIndex`` - fetch a particle frame (binary, with optional decimation).
- ``PUT /api/v1/models/:modelKey/scalar/:fieldName`` - select active scalar field.
- ``DELETE /api/v1/models/:modelKey/scalar`` - clear scalar selection.
- ``POST /api/v1/models`` - upload a model (multipart).
- ``DELETE /api/v1/models/:modelKey`` - remove an uploaded model.

Configuration is done via ``CEW_PT_*`` environment variables (port, HTTPS, CORS, cache limits, plugin folder, upload limits).

**Limitations vs UgServer:** PtServer streams pre-computed particle frames only. Server-side analytics
(isovolumes, cutting planes, particle-trace computation) are not supported - use ``cee.ug.RemoteModel``
with UgServer for those use cases.

See the Programming Guide section :doc:`/guide/server-particle-model` for setup instructions and full configuration reference.


CAE-1641 New ``cee::pt::ParticleModel`` C++ library |desktop|
===============================================================

A new ``cee::pt`` component provides a C++ library for reading, writing, and rendering particle simulation data:

- ``cee::pt::ParticleModel`` - main model class (inherits ``cee::vis::Model``) for loading time-stepped
  particle datasets and iterating frames.
- ``cee::pt::PtfxDatasetWriter`` - writes particle data to the PTFX binary format, enabling conversion
  from custom simulation outputs.
- ``cee::pt::ParticleDatasetReader`` - abstract interface for implementing custom format readers. Pass a
  custom reader to ``ParticleModel::open(std::unique_ptr<ParticleDatasetReader>)`` for in-process format support.
- ``cee::pt::ParticleReaderPluginManager`` - runtime discovery and loading of reader plugins using the
  ``cpt_*`` naming convention and the C plugin ABI defined in ``ParticleReaderPluginApi.h``.
- Built-in readers: ``PtfxDatasetReader`` (PTFX) and ``VtpDatasetReader`` (VTP).

See the Programming Guide topic :doc:`/topics/particle/index` for usage examples and API details.


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

CAE-1627 Fixed assert when using wrong geometry for precomputed feature extractions |desktop|
=============================================================================================

An assert could occur when using precomputed feature extractions (such as isosurfaces or cutting planes) if the 
geometry data provided during extraction did not match the geometry in the model. 

This is a regression introduced in 5.0 (CAE-1561).

CAE-1673 Fixed missing nullptr check when accessing cutting plane data |desktop|
================================================================================

An access violation could occur when accessing cutting plane data ``CuttingPlaneData`` if source triangle and lines 
data was missing. This could occur when reading VTFx model files containing precomputed cutting planes.

CAE-1379 Fixed rayIntersect returning incorrect values for intersectPoint on a cutting plane |web|
======================================================================================================

On a cutting plane generated from a complex scene including boundary parts, the intersector could sometimes
overestimate a line thickness to an amount so big that its result would be picked instead of the closest result to
the intersection point. This bug could also cause some empty parts of the cutting plane to appear to have results.

CAE-1689 Fixed bug in CuttingPlane::alsoComputeFromUndeformedModel() |desktop|
================================================================================

Fixed a bug in the method ``cee::ug::CuttingPlane::alsoComputeFromUndeformedModel()`` which caused it to sometimes return an incorrect value.

CAE-1661 Fixed the gradient background sometimes not being captured in renderViewToImage() |desktop|
=====================================================================================================

Fixed an internal rendering issue sometimes occurring when capturing a view with a gradient background to an image using ``renderViewToImage()``.
The gradient background could be lost and replaced by a black background if the model was internally modified during the capture, causing the render
sequence to be recomposed mid-capture and retargeting the background pass away from the offscreen framebuffer. 

