# Envision 1.2

January 27, 2023 - SHA: 18704d8b

Envision for Web Envision for Desktop

## New Features

### CAE-782 Camera changed callback

Added `cee.Camera.setViewChangeHandler()` that sets a handler to be invoked each time the camera view changes.

### CAE-802 Enable/disable mirroring per part

Added an option in `UnstructGrid` `PartSettings` to control if a part should be mirrored or not.

Added `cee::ug::PartSettingsDisableMirroring()` method (desktop) and `cee.ug.PartSettings.disableMirroring` property (Web).

### CAE-810 Specify a background color for color legends

Desktop: Added support for a background for color legends. This helps making text more readable in some situations. The background color and opacity, as well as border color can be specified.

Added `setDrawLegendBackground()`, `setLegendBackgroundColor()`, `setLegendBackgroundOpacity()` and `setLegendBackgroundBorderColor()` to `cee::ug::ScalarSettings`

### CAE-882 Vectors fields visualization: optionally display a vector a a point when length is 0

Desktop: Added an option to draw vectors with zero length (null vectors) as a point or a sphere.

### CAE-918 Add visible property to cug.ParticleTraceGroup

The visibility of particle trace groups can now be controlled in the `ConstantRemoteModel`.

Added `cee.cug.ParticleTraceGroup.visible` property.

### CAE-919 Add method for getting BoundingBox for single part in ConstantRemoteModel

You can now get the bounding box of a part in the `ConstantRemoteModel`.

Added `cee.cug.ConstantRemoteModel.getBoundingBoxForPart()`

### CAE-926 Add support for computing fit view eye position from a bounding box

Added a new method to `Camera` to compute the fitView eye position based on a given bounding box.

Added `cee.Camera.computeFitViewEyePosition()`

### CAE-931 Web: Query to get feature extraction data

Added a new query to get the display model of a feature extraction item (cutting plane, isosurface or isovolume). Triangle and lines with the corresponding per vertex scalar result is provided as a result of the query. This is useful for client-side post processing of the feature extraction, as well as to visualize it in various ways.

Added `cee.ug.QueryFeatureExtraction`

### CAE-949 Improve “Assertion failed” reporting mechanism

Added support for specifying an assertion failed handler that is invoked if a code assert fails on the client.

Added `cee.setAssertFailedHandler()`.

### CAE-953 Add support for custom view layouts

Added support for specifying a custom layout of views within a viewer. This enables using many views in one viewer, and thus working around the limit of only 16 WebGL canvases on one page.

Added `cee.View.setViewport()`

Here is an example with 28 views with different models on one page (within one viewer):

### CAE-971 VTK: Reader option to provide all vector results as displacements

Added an option for the VTK (vtu/pvtu) reader to treat all results as displacements, and thus making them available as displacements, vectors and individual scalar results.

Added `cee::imp::cae::ReaderSettingsVtk& ReaderSettings::vtk()` with `setReadVectorsAsDisplacements()`.

Added VTK setting `ALL_VECTORS_AS_DISPLACEMENT` to be used in the `cee.ug.RemoteModel.setReaderOptions()` method.

Example:

    this.m_model.setReaderOptions("VTK", {
        "ALL_VECTORS_AS_DISPLACEMENT": true,
    });

### CAE-988 Add support for supplying license code as environment variable to CugComposer

Added use of the environment variable `CEW_TECH_SOFT_LICENSE_CODE` in the CugComposer and the UgServer. There are now 4 ways to provide a license to the CugComposer:

1. `- license` command line option
2. `CEW_TECH_SOFT_LICENSE_CODE` environment variable
3. `-licenseFile` command line option
4. `CEW_TECH_SOFT_LICENSE_FILE` environment variable

### CAE-1008 Added option to disable spatial partitioning when optimizing parts in UnstructGridModel

Added an option to specify only to merge equal parts based on appearance and not do spatial partitioning into equal sized chunks.

Added new parameter to `cee.ug.ModelSettings.setOptimizePartRendering(bool optimize, bool spatiallyPartitionParts = false)`

Default is now to only merge parts with equal appearance.

### CAE-1035 Added support for CrinkleCut cutting planes of 2d elements

Crinkle-cut cutting planes now also work as expected for 2d elements, showing the entire 2d element if intersected by the cutting plane.

### CAE-1046 CugServer: Support absolute paths for CONFIGURE_EXPRESS_APP_JS_FILE

The app config file for the CugServer can now be specified with an absolute path.

## Fixed Bugs

### CAE-920 UgModule is missing some exports

`DisplacementSettingsProperties`, `ScalarSettingsProperties`, `VectorSettingsProperties` were missing from the `UgModule` TypeScript d.ts file.

### CAE-921 UgServer is sometimes confused about the current state id after applying a VTFx case

When applying cases from VTFx files, in some cases the current state was not properly synced between client and server, needing an extra update to get in sync.

### CAE-925 PVD/VTM/VTU: Displacement vector fields are not interpreted as displacements result unless their name starts with “displacement”

The VTK reader now will use any result with the word “displacement” as part of the result name as a displacement result. See CAE-971 for an option to treat all vector results in VTK files as displacements.

### CAE-947 UgServer: Memory is not freed by the c++ heap manager on Linux

Added option to trim heap memory usage on Linux/gcc using `malloc_trim()`. The feature can be enabled by setting the environment variable `CEW_UG_ENABLE_MEMORY_TRIM`

This functionality was added after getting reports of growing memory usage (and eventually crash) when running Linux version of ugServer in a Docker container. When enabled, the feature performs regular calls to `malloc_trim()` to manually do “garbage collection” on the c/c++ heap manager. Note that doing this could probably has a negative impact on performance.

### CAE-962 Updating a cug model + removing another causes assert error

Fix assert error that occurs on update a CUG model then remove another.

### CAE-964 Assert error on update cug part then call getBoundingBoxForPart()

Fix assert error that occurs on update CUG model then call `getBoundingBoxForPart()`

### CAE-984 CugComposer crashes on VTFx files with IndexedFaceSets

The CugComposer did not handle (legacy) VTFx files with Indexed Face Sets

### CAE-1019 Reference counting did not work properly from Python

Reference counting is now handled properly in the Python bindings for Envision for Python in the same way as for C#.

### CAE-1039 ExportVTFx uses wrong vendor code, can’t open in Viewer

The VTFx files exported from Envision for Desktop is now properly signed and can be viewed in the CEETRON 3D Viewer.

### CAE-1049 CugComposer cannot pass unicode characters in arguments paths

The CugComposer now handles unicode filenames, both for input VTFx files and output folder/files.

## Patches

### Envision 1.2.1

February 16, 2023 - SHA: d026d7a8

#### CAE-1065 Can get null reference on mouse wheel while RemoteModel is loading

Using the mouse wheel early when the model is loading and having `mouseWheelZoomAndWalkBehavior` set to other than `TO_CENTER` might cause a throw and thus error logs in the console.

#### CAE-1067 ImportCAE OpenFOAM reader crashes on models with polyhedron elements

The built-in OpenFOAM reader in ImportCAE might cause a crash when opening models with polyhedron elements. This fixes a regression introduced in Envision 1.1

#### CAE-1071 VTFx component: Exported file can’t be opened in the viewer (wrong vendor id)

Files exported with the VTFx components (standalone export) was not signed properly and thus not able to open in the free desktop 3D viewer.

#### CAE-1072 Simple null vectors would sometimes not be positioned correctly on some hardware platforms

In some rare cases on some hardware platforms the null vectors could be drawn in the wrong position.

### Envision 1.2.2

March 20, 2023 - SHA: 147c9502

#### New version of Ceetron Access

Updated Ceetron Access (file readers) to patch version 1.0.7

Conversation saved
HOOPSY BETA

### Hello! I'm HOOPSY

Your multilingual generative AI assistant for documentation. Ask me anything about HOOPS Envision for Web in your own language, or choose a sample question below to start a conversation:

What is HOOPS Envision for Web?
What are the latest release notes for HOOPS Envision for Web?
How do I start evaluating HOOPS Envision for Web?
How do I write my first sample application?
How can I get assistance?

HOOPSY may store conversations according to OpenAI's policy. Responses may not always be accurate.

HOOPSY is thinking...