
.. _overview-page:

#############
Main Concepts
#############

.. image:: ../../images/overlays.png
    :height: 350
    :align: right
    
The most central concepts to |ProductName| are the View and a Model. The view being a render area
and the model being the visual representation of your data.

*****
View
*****

The view offers a rendering area within the user control or widget, facilitating the visualization of models and overlay 
items, such as color legends, text boxes, or a navigation cube. Importantly, a single view has the capability to display 
multiple models concurrently.

Each view is paired with a :class:`Camera <cee::vis::Camera>`, which defines how the model is observed within the view. 
The Camera's settings encompass the viewport, projection, eye position, and view reference point. Additionally, the 
Camera handles the input interactions, which can be either one of the built-in handlers or a custom-made input handler. 
Furthermore, the Camera offers useful features, including functions like :func:`fitView() <cee::vis::Camera::fitView>` 
and :func:`rubberbandZoom() <cee::vis::Camera::rubberbandZoom>`, to enhance user interaction.


.. image:: ../../images/uml_view.png

See: :ref:`view-page`

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

*****
Model
*****

A :class:`Model <cee::vis::Model>` serves as the visual representation of your data source and provides advanced 
features like cutting planes and isosurfaces.

:class:`UnstructGridModel <cee::ug::UnstructGridModel>`, a subclass of :class:`Model <cee::vis::Model>`, extends these 
capabilities by introducing specialized structures and functions tailored for scientific and engineering models, such as 
finite element data. Other model options include :class:`MarkupModel <cee::vis::MarkupModel>`, which allows you to 
incorporate annotations and markups in the view, and :class:`GeometryModel <cee::geo::GeometryModel>`, designed for 
efficient management of a large number of parts.

It's important to note that each view can accommodate one or more models, and a single model can be shared across multiple views.

The :class:`Model <cee::vis::Model>` is an abstract base class and all other model types implements this interface.

.. image:: ../../images/uml_model.png


See: :ref:`model-page`


