:topic: Visualization Views Overview

.. index::
   triple: DREAM3D-NX; Visualization; Render Window Overview

.. _RenderWindowOverview:

Visualization Views Overview
##############################

**In this tutorial we will detail all the important features that can be
accessed from the Visualization tab.**

The main purpose of *Visualization* tab is to display the geometries in
a *Render Window* or *Spreadsheet* and provide various tools for interacting with that
geometry.

Visualization View Interaction Toolbar
=======================================

**You must have at least one view at all times.** (If you
wish to **remove** data from the last *view* you can do so
by **right-clicking** the items in the *Visualization* Browser tree and
selecting **Delete**.)

The image below shows all buttons included within the *View Interaction* group:

.. figure:: Images/30_VisualizationViewsOverview/AdditionalButtonsToolbar.png
   :alt: Additional Buttons Toolbar

   Additional Buttons Toolbar

These buttons and their functionality will be detailed below:

1. **Render Window Splitting** :

   The *Render Window* splitting feature will create a new *view* and 
   **place it next to the existing one** (the placement of the copy 
   depends on whether you split *horizontally* or *vertically*).
   There are two options for splitting. The *Render View* option 
   will create a new render window for visualization the data and the 
   *Spreadsheet View* option will create a new spreadsheet view for
   viewing the raw data in a table format. **You can split as many 
   times as you like.** You can **resize** the *view* after splitting 
   by **hovering over the space that separates** two
   *views* until the **mouse icon changes**, then
   **left-click and hold while dragging** the mouse back and forth to
   reach the desired sizing. The new *views* will have the data 
   hidden by default. You can turn on/show the data in the *view* by 
   clicking on the *view* you would like the data to appear in and 
   clicking the closed eye icon ( |eye closed| )
   next to the data view item in the tree until it appears 
   open ( |eye open| ). Click the icon again to hide the data.

   Before continuing, **it is important to know how to identify the
   current view** and what that means as far as the options
   available in the *Render Properties* view (located to the right of
   the *Visualization* tab by default). The **current view
   is signified by a blue (dark theme) or orange (light theme) border**. By 
   *default*, there will only be *one* *view* and it will be selected as the current one.
   The details shown in the *Render Properties* view represents the
   data for the current *Render Window*. This means that if you have
   performed a split you can **click back and forth between multiple
   Render Windows** and the data in the *Render Properties* view will
   change to match that of the current *Render Window*.

   -  The **Split Horizontally** Button ( |Split Horizontally Button|
      ): This will put the new *view* **horizontally** next
      to the current *view*

   -  The **Split Vertically** Button ( |Split Vertically Button| ):
      This will put the new *view* **vertically** next to
      the current vi*view*ew.

   -  The **Close View** Button ( |Close Render Window Button| ): 
      This will remove the current *view*.  

Interacting with the Render Window
===================================

This section covers the basics of how to interact with the camera’s
viewpoint in the *Render Window*. This allows users to visualize data
from different angles and perspectives. There are *three* basic
operations one can perform on the camera’s view to do this:

-  **rotating**
-  **translating**
-  **zooming**

**It is important to emphasize that these operations are being performed
on the camera’s viewpoint and not the data itself.** Meaning when you
perform a rotation, you are not rotating the geometry through space, you
are rotating the camera to view the geometry from a different
perspective.

Rotating the Perspective
-------------------------

In order to rotate the perspective, left-click and hold anywhere in the
*Render Window*. While you are **still holding** the click, *drag* your
mouse around until you find the desired perspective. You may have to
perform several of these in order to reach the perspective you are
looking for. You should also notice a **small axis label** in the bottom
left hand corner of the *Render Window* (shown below) which will show
you the orientation of your geometry with respect to each of the three
x, y, and z axes.

.. figure:: Images/30_VisualizationViewsOverview/OrientationMarkerWidget.png
   :alt: Axes Orientation Marker

   Axes Orientation Marker

Translating the Perspective
-----------------------------

There are two ways to perform a translation of perspective:

1. **Click down and hold on the scroll wheel** anywhere in the *Render
   Window* and while you are still **holding the click drag your mouse
   around** until you find the desired perspective.
2. **Press and hold the shift key** on your keyboard, then while you are
   **holding the shift key left-click and hold anywhere in the Render
   Window**. Then, while you are holding the *shift* key and the
   left-click, **drag your mouse** around until you find the desired
   perspective.

Zooming
-------------------------

There are two ways to perform a zoom operation:

1. **Hover your mouse anywhere in the Render Window** and use the
   **scroll wheel** to zoom in and out.
2. **Right-click and hold anywhere in the Render Window**, and while you
   are still holding the click **drag your mouse** vertically up and
   down to zoom in and out respectively.

Render Window Toolbar Buttons Overview
---------------------------------------

This section will go over all the buttons that can be found in the
toolbars along the left hand side of the *Render Window* 
and what each of these buttons do.

.. figure:: Images/30_VisualizationViewsOverview/VisualizationToolbarButtons.png
   :alt: VisualizationToolbarButtons

   Visualization Toolbar Buttons

1. The **Snap to Plane** buttons

   -  **Reset Camera** button ( |reset camera button| ): Resets the 
      camera to fit the data to the render window
      
   -  **Camera Presets** button: Opens a menu 
      from which the user can add, remove, and apply a custom camera 
      angle/view direction

   -  **Rotate Clockwise** button ( |rotate clockwise| ): Rotates the 
      data in the view clockwise by 90 degrees. 
      
   -  **Rotate Counterclockwise** button ( |rotate counterclockwise| ): 
      Rotates the data in the view counterclockwise by 90 degrees. 
   
   -  **View Direction Shortcuts** button: Opens a menu with the  
      following camera view shortcuts: 

         -  **X-up** button ( |x up button| ): Snaps the camera view to the
            positive x direction

         -  **X-down** button ( |x down button| ): Snaps the camera view to
            the negative x direction

         -  **Y-up** button ( |y up button| ): Snaps the camera view to the
            positive y direction

         -  **Y-down** button ( |y down button| ): Snaps the camera view to
            the negative y direction

         -  **Z-up** button ( |z up button| ): Snaps the camera view to the
            positive z direction

         -  **Z-down** button ( |z down button| ): Snaps the camera view to
            the negative z direction

2. **Point/Cell Hover Info** :
   
   The point ( |point hover button| ) and cell ( |cell hover button| )
   hover features allows the user to hover over points and cells in the 
   *Render Window* and display id and field data associated with them. 
   The hovered point/cell will be highlighted in the *Render Window*
   and the data will be displayed in a popup window underneath the mouse.
   Right or left clicking the hovered point/cell will print the details 
   out to the DREAM3D-NX output window and copy the details to the 
   clipboard in csv format.

3. The **3D/2D** button ( |3D/2D Button| ) :

   This will **lock or unlock** the *Render Window* to the current
   camera angle.

   -  **3D** means you can rotate the camera view using the methods
      outlined in the *Rotating the Perspective* section of this page.
   -  **2D** means you **cannot** rotate the camera view (you can
      however still translate and zoom using the methods outlined in the
      *Translating the Perspective* and *Zooming* sections of this page)

3. The **focal point** buttons

   -  **Show/Hide Focal Point** button ( |focal point button| ): Shows or hides
      the focal point of the camera.
   
   -  **Reset Focal Point** button ( |reset focal point button| ): Resets the 
      focal point of the camera back to the center of the bounding box of the visible data.
   
   -  **Pick Focal Point** button ( |pick focal point button| ): Pick a custom focal point for the camera


Additional Features (Render Window Context Menu Options)
---------------------------------------------------------

On top of mouse/keyboard interactions with the *Render Window* and the
toolbar buttons described in the previous sections, there are also a
number of additional features that are available via a **Context Menu**
in the *Render Window*. You can access this menu by **right-clicking**
anywhere in the *Render Window*.

.. figure:: Images/30_VisualizationViewsOverview/RenderWindowContextMenuBasic.png
   :alt: Basic Render Window Context Menu Options

   Basic Render Window Context Menu Options


Geometry Context Menu Options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
There are two additional geometry specific options available in the Render Window:

-  **Show All**: This will show all available data views from the model in the 
   selected Render Window

-  **Hide All**: This will hide all data views currently being rendered in the 
   selected Render Window


General Context Menu Options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
There are four basic options that are available via the context menu in
the Render Window and are independent of any geometries in the Render
Window:

- **Link Cameras** :

   This feature allows you to **link** the cameras from **two different
   Render Windows** so that any changes to the camera made in one will
   also happen to the camera in the other. To activate this feature,
   select the **Link Cameras** option from the *Context Menu* in one of
   the *Render Windows* you wish to link. Then **left-click** in the
   other *Render Window* you wish **to link**. The cameras in these two
   *Render Windows* should now be in sync. To **unlink the cameras**,
   **right-click** again in either of the two **linked Render Windows**
   and click the **Unlink Cameras** option.

   **Only two Render Windows can be linked at once.** It is recommended
   that you unlink any cameras before linking again to a different
   *Render Window* camera.

- **Change Background Color** :

   This feature allows you to change the current render window's background color.

- **Restore Default Background Color** :

   This feature allows you to restore the current render window's background color back 
   to the current default set by the :ref:`application preferences <ApplicationPreferences>`

- **Save Screenshot** :

   This feature will take a **screenshot** of the contents of the **current Render
   Window** and **save** it to an **image file**. After you've selected the file path
   in which to save the screenshot, a dialog will pop up allowing you to choose a background 
   for your image. You can check the checkbox to save the image with a transarent background
   or click the **Background Color** button to choose a custom background color. The selected 
   color to be used with your screenshot will be shown in the preview circle on the right hand side of the button.

   .. figure:: Images/30_VisualizationViewsOverview/ScreenshotOptions.png
      :alt: Screenshot Options

      Screenshot Options

- **Copy Screenshot** :
  
  This feature will take a screenshot of the contents of the **current Render Window**
  and copy it to the clipboard. This option is conventient for quickly pasting 
  screenshots of your results into documents, emails etc. This option does not
  allow for setting a transparent background.

- **Camera Parallel Projection** :

   Toggling this option will determine whether the **camera** should do
   a **parallel** (1) or **perspective** (2; **default**) projection.

- **Axes Grid** :

   This option will turn **on/off** an **axes grid label** for all
   geometries currently being shown in the *Render Window*. This option
   is **NOT** the same as the *Data Axes Grid* option found in the
   :ref:`Render Properties <RenderPropertiesOverview>` tab. 
   **Note: If you only have one geometry showing in the Render
   Window, the two will coincide.**

   .. figure:: Images/30_VisualizationViewsOverview/GlobalGridAxes.png
      :alt: Global Grid Axes

      Global Grid Axes


Interacting with the Spreadsheet
===================================
This section covers the basics of how to interact with the *Spreadhseet View*.
This *view* provides several options for viewing the geometry's raw data in a
table format. These options are detailed below;

1. **Attribute** : This option allows the user to toggle the table between the point data
   and the cell data for the selected geometry.

2. **Notation** : This option allows the user to change the formatting of the numbers in the table.
   The options are fixed, scientific, and auto.

3. **Precision** : This option allows the user to change the decimal point precision of the 
   numbers in the table.

4. **Export** : This option allows the user to export the current table to a csv file. You have the option
   to choose between tab or comma delimeters.


.. |3D/2D Button| image:: Images/30_VisualizationViewsOverview/3DButton.svg
.. |x up button| image:: Images/30_VisualizationViewsOverview/xup.png
.. |x down button| image:: Images/30_VisualizationViewsOverview/xdown.png
.. |y up button| image:: Images/30_VisualizationViewsOverview/yup.png
.. |y down button| image:: Images/30_VisualizationViewsOverview/ydown.png
.. |z up button| image:: Images/30_VisualizationViewsOverview/zup.png
.. |z down button| image:: Images/30_VisualizationViewsOverview/zdown.png
.. |Split Horizontally Button| image:: Images/30_VisualizationViewsOverview/SplitHorizontal.png
.. |Split Vertically Button| image:: Images/30_VisualizationViewsOverview/SplitVertical.png
.. |Close Render Window Button| image:: Images/30_VisualizationViewsOverview/CloseButton.png
.. |reset camera button| image:: Images/30_VisualizationViewsOverview/ResetCamera.svg
.. |eye open| image:: Images/30_VisualizationViewsOverview/EyeOpen.png
.. |eye closed| image:: Images/30_VisualizationViewsOverview/EyeClosed.png
.. |point hover button| image:: Images/30_VisualizationViewsOverview/PointHover.png
.. |cell hover button| image:: Images/30_VisualizationViewsOverview/CellHover.png
.. |Render Window Settings Button| image:: Images/30_VisualizationViewsOverview/Settings.png
.. |focal point button| image:: Images/30_VisualizationViewsOverview/ShowHideFocalPoint.svg
.. |reset focal point button| image:: Images/30_VisualizationViewsOverview/ResetFocalPoint.svg
.. |pick focal point button| image:: Images/30_VisualizationViewsOverview/PickFocalPoint.svg
.. |rotate clockwise| image:: Images/30_VisualizationViewsOverview/RotateClockwise.svg
.. |rotate counterclockwise| image:: Images/30_VisualizationViewsOverview/RotateCounterclockwise.svg
.. |camera presets button| image:: Images/30_VisualizationViewsOverview/CustomCameraPresets.svg
.. |Snap To Camera| image:: Images/30_VisualizationViewsOverview/SnapToCamera.svg
