# Architecture Overview

The top level object in HOOPS Envision for Web is the `CloudSession`. All apps must initialize this before they start using HOOPS Envision for Web. The CloudSession object manages all the `Viewer` in use, and also handles the rendering and background processing of all changes in a `requestAnimationFrame()` callback. A `Viewer` is tied to a HTML5 Canvas element. A `Viewer` can have one or more `Views`.

## Models

A view is capable of showing 0..N models. You can combine different types of models in a view to create compound visualizations.

## Unstruct Grid Module (cee.ug)

The `RemoteModel` implements all features required to create a full post-processing experience in a browser. It uses a server (UgServer) to read and process the CAE model, and uses 3D Progressive Object Streaming to quickly send the relevant visualization data to the client. The user focuses on specifying what to show (result, states, cutting planes, etc) and the RemoteModel handles all the interaction with the server and all the visualization.

See `cee.ug` for more information.

## Constant Unstruct Grid Module (cee.cug)

The `ConstantRemoteModel` provides a constant remote model designed for viewing CAE models. The `ConstantRemoteModel` can show any visualization that the `RemoteModel` can show, but with limited options for modifying the current setup. States, result selection, feature extraction etc. is fixed, but the model can be animated, interacted with, parts can be shown or hidden and model mesh can be turned on or off.

The big benefit of the CUG model is that it only requires a stateless REST-API based server which consumes very little resources on the server side, independent of the model size. It will also start streaming immediately, independent of the model size.

See `cee.cug` for more information.

## Unstruct Surface Grid Module (cee.usg)

The `UnstructGridModel` is a client side (in browser) FEA model for surface elements. It is suited for any size FEA surface models (as long as the part count is <10k), and supports any kind of surface elements (1..N nodes per element). The model is defined by elements and nodes, and support scalar, vector, displacement and transformation results. The model has support for any number of states (time steps). Supports calculation of element-aware surface normals and element mesh lines as well as model outline. It also supports ray intersection at the element level. The model features all draw styles (surface, surface mesh, outline, lines, points, transparent surface). The model handles only one result of each type at any given time, so you will have to handle the result database in application code. Components for implementing a stateless server for progressive streaming of models as well as a reference implementation will soon be available.

See `cee.usg` for more information.

## Visualization Streamer Module (cee.vs)

The `StreamModel` provides a stream model designed to be efficiently streamed from the Visuzalization Streamer Service (VizService). The `StreamModel` can visualize all sorts of 3D data and has some direct control of what is shown, e.g. which frame in a sequence of frames to show. The overall interaction with the model is handled on the server side, by pushing different data into the VizService. The VizService can have multiple streams active, and one StreamModel is connected to a single stream. The connection to the VizService and different streams is handled through the class `ServerSession`.

See `cee.vs` for more information.

## Geometry Module (cee.geo)

The `geometry model` is a client side (in browser) model suited for models with only geometry or simple scalar results. This modes does rebatching of parts and has an optimize renderer capable of handling >300k parts. This is the only HOOPS Envision for Web model with this capability. Can be used with the GeoServer for 3D Progressive Object Streaming of models. This stateless, REST API based server comes with support for file and Redis based storage, and can also be extended with other DataStores.

See `cee.geo` for more information.

## Markup Module (cee.mrk)

The `markup model` supports rendering of labels and more simple geometry. It is useful for creating annotations and other markup of the 3D model.

See `cee.mrk` for more information.

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...