\chapter{Interface}
\label{cha:Interface}

\section{Fenêtre principale}
\label{section:mainWindow}

La fenêtre principale de \emph{CloudCompare} est constituée des éléments
suivants :\\


\begin{center}
\includegraphics[width=0.9\textwidth]{images/Partie2_Interface/MainWindow}\\
\end{center}

\par
\textbf{\textcolor{red}{1}} : \index{menus, barre de}Barre de menus de l'application\\
Cette barre permet d'accéder à la majorité des fonctions de \emph{CloudCompare} ainsi qu'aux paramètres
de l'application et à divers outils de gestion de l'interfaçe graphique. En fonction des objets sélectionnés,
certains des menus ou sous-menus ne sont pas accessibles (par exemple, les menus << Edit >> et << Tools >>
restent inactifs tant qu'aucun objet n'est sélectionné et le sous-menu << Scalar fields >> du menu << Edit >>
ne sera accessible que si l'entité sélectionnée possède au moins un champ scalaire).\\

\par
\textbf{\textcolor{red}{2-5}} : \index{outils, barre de}Barres d'outils\\
Les différentes icônes de ces barres permettent d'accéder
rapidement aux fonctions principales de \emph{CloudCompare}. Ces fonctions sont généralement aussi
accessibles via les menus situés au dessus (voir \textbf{\textcolor{red}{1}}) mis à part les deux
outils de modifiation interfactive des entités 3D (segmentation et transformation) et certains
outils de modification de l'affichage 3D (zoom, centre de rotation, points de vue prédéfinis, etc.).
\begin{itemize}
\item la barre \textbf{\textcolor{red}{2}} (\emph{Main tools}) contient des icônes des fonctions de traitement
des entités 3D.
\item la barre \textbf{\textcolor{red}{3}} (\emph{Scalar field tools}) contient des icônes de fonctions de
traitement des champs scalaires.
\item la barre \textbf{\textcolor{red}{4}} (\emph{Plugins}) contient les icônes des plugins. La première partie est
consacrée aux plugins de type \emph{OpenGL filters} (shaders) et la seconde aux plugins standards (algorithmes). Cette
barre est remplie dynamiquement en fonction des plugins chargés par le programme au lancement.
\item la barre \textbf{\textcolor{red}{5}} (\emph{Viewing tools}) permet de modifier les paramètres de visualisation 3D.
\\
\end{itemize}
Toutes ces barres sont déplaçables (par \emph{glisser-déplacer} ou \emph{drag \& drop} en anglais).
Leur visibilité peut être modifiée via le sous-menu << Display > Toolbars >>.\\

\par
\textbf{\textcolor{red}{6}} : \index{Arbre de navigation|see{navigation}}Arbre de navigation\\
Dans cette zone apparaît une représentation graphique de la \emph{base de données} actuellement en mémoire. Elle permet de visualiser sous forme d'arborescence l'ensemble des entités chargées ou créées par l'application (voir section \ref{Arbre-de-navigation}). Il est notamment possible de sélectionner une ou plusieurs entités en cliquant sur leur nom dans cet arbre (l'autre manière de sélectionner des entités est de cliquer sur leur représentation dans la vue 3D associée - voir \textbf{\textcolor{red}{8}}). Lorsque une entité est sélectionnée, des informations et options sont affichées dans la vue \textbf{\textcolor{red}{7}} (voir ci-dessous).\\

\par
\textbf{\textcolor{red}{7}} : \index{propriétés, fenêtre de}Fenêtre de propriétés\\
Si une seule entité est sélectionnée, cette vue contient des informations et certaines
options d'affichage notamment (voir section \ref{Fenetre_proprietes}).\\

\par
\textbf{\textcolor{red}{8}}: \index{Vues 3D}Vues 3D\\
Ces vues permettent de visualiser en trois dimensions les entités géométriques
(nuages, maillages, etc.). \emph{CloudCompare} offre la possibilité de créer plusieures vues
3D à la fois. Ces vues peuvent être gérées via le menu dédié << 3D Views >>. Chaque entité
peut-être affectée à une vue 3D particulière via ses propriétés (voir la liste déroulante
\emph{Current Display} des propriétés communes en section \ref{subsection:commonProperties}).\\

\par
\textbf{\textcolor{red}{9}} : \index{console}console\\
Cette zone contient l'historique des informations liées à l'exécution de \emph{CloudCompare}
(typiquement des informations supplémentaires non estentielles délivrées par les algorithmes).
Elle peut être affichée ou masqué via la commande \emph{Console} du menu << Display >>
(raccourci clavier : F8).\\

\par
Dans la suite de cette section, nous allons détailler les fonctionnalités relatives à la manipulation et à la visualisation des différentes entités de la base de données de \emph{CloudCompare}. L'utilisateur pourra se référer directement au chapitre suivant (Chapitre~\ref{cha:Fonctions}) pour obtenir des informations détaillées sur les fonctions et algorithmes applicables à ces entités.\\



\section{Base de données}

\subsection{Arbre de navigation\label{Arbre-de-navigation}\index{navigation, fenêtre de}}

\begin{center}
\includegraphics[width=0.4\textwidth]{images/Partie2_Interface/DBTree}
\end{center}

\par
Comme nous l'avons vu précédemment, \emph{CloudCompare} affiche l'ensemble des entités disponibles
(chargées ou créees par l'application) dans l'arbre de navigation qui se trouve par défaut dans la
partie supérieure gauche de la fenêtre principale.\\

\par
On peut y trouver les éléments suivants :\\
\begin{tabular}{>{\raggedright}m{0.05\textwidth}>{\raggedright}m{0.95\textwidth}}
\includegraphics[height=15px]{images/Partie2_Interface/hObjectSymbol}  & Un groupe d'entités.
Cet élément peut correspondre par exemple à un fichier ouvert (auquel cas il contient toutes les entités
chargées à partir de ce fichier). Il peut aussi être créé et peuplé manuellement (voir plus bas).\tabularnewline
\includegraphics[height=15px]{images/Partie2_Interface/CloudSymbol}  & Un nuage de points.\tabularnewline
\includegraphics[height=15px]{images/Partie2_Interface/MeshSymbol}  & Un maillage triangulaire simple.\tabularnewline
\includegraphics[height=15px]{images/Partie2_Interface/MeshGroupSymbol}  & Un ensemble de maillages triangulaires partageant
les mêmes sommets (qui sont alors contenus dans un seul nuage de points, qu'on retrouve toujours plus bas dans l'arborescence
sous le nom << vertices >>).\tabularnewline
\includegraphics[height=15px]{images/Partie2_Interface/OctreeSymbol} & Une structure de type \textit{octree}.\tabularnewline
\includegraphics[height=15px]{images/Partie2_Interface/SensorSymbol} & Un objet de type capteur laser terrestre.\tabularnewline
\includegraphics[height=15px]{images/Partie2_Interface/ImageSymbol} & Une photo non calibrée.\tabularnewline
\includegraphics[height=15px]{images/Partie2_Interface/calibratedImageSymbol} & Une photo calibrée.\tabularnewline
\includegraphics[height=15px]{images/Partie2_Interface/labelSymbol} & Une étiquette 2D standard (associée à un ou plusieurs point).\tabularnewline
\includegraphics[height=15px]{images/Partie2_Interface/rectLabelSymbol} & Une étiquette \textit{zone 2D} (associée à un point de vue).\tabularnewline
\includegraphics[height=15px]{images/Partie2_Interface/dbSymbol} & Un tableau de données partagé par plusieurs entités (des normales par exemple).\tabularnewline
\includegraphics[height=15px]{images/Partie2_Interface/materialSymbol} & Un ensemble de matériaux (généralement associé à un ou plusieurs maillages).\tabularnewline
\includegraphics[height=15px]{images/Partie2_Interface/viewportSymbol} & Un point de vue 3D (avec les paramètres de visualisation associés).\tabularnewline
\end{tabular}\\

\par
De manière classique, l'\index{arborescence|see{navigation}}arborescence peut être
développée ou repliée en cliquant respectivement sur les boutons \includegraphics{images/Partie2_Interface/Button+}
et \includegraphics{images/Partie2_Interface/Button-} situés à gauche des jonctions de l'arbre.\\
\par
La case à cocher située à gauche du nom d'un élément permet elle d'activer ou de désactiver la branche de l'arbre qui en part. La notion de désactivation est plus forte qu'un simple affichage/masquage de l'entité (toute entité affichable dans une vue 3D possède une propriété générique \emph{Visible} qui permet de gérer ceci - voir plus loin). La désactivation d'une entité s'applique à l'entité elle-même et à toutes les entités qui lui sont ratachées dans l'arboresence). Ces entités ne sont pas affichées et ne sont pas non plus concernées par certaines opérations (comme la segmentation graphique interactive, voir section\ref{subsection:graphicalSegmentation}).\\
\par
Remarque : les groupes d'entités sont juste des \emph{conteneurs}. Ils n'aggrégent pas les caractéristiques des éléments qu'ils contiennent (un groupe de nuage n'est pas considéré comme un nuage). Typiquement, un groupe ne peut pas être utilisé comme entrée pour les fonctions de \emph{CloudCompare} : il ne sert que de classeur.\\

\subsection{Sélectionner des entités\index{sélectionner!des entités}}

Pour sélectionner une entité, deux possibilités s'offrent à l'utilisateur : cliquer avec le bouton gauche de la souris soit sur l'entrée correspodante dans l'arbre de navigation, soit sur sa représentation dans la vue 3D (ceci est vraie pour certaines entités seulement : nuages, maillages et étiquettes 2D). Dans les deux cas, l'entrée correspondante dans l'arbre de navigation apparaît surlignée et l'entité est entourée d'une \index{boîte englobante} boîte englobante dans \index{Vue 3D}la vue 3D où apparaît l'entité. Lorsqu'un élément est sélectionné,
les informations qui s'y rapportent apparaissent dans la fenêtre de propriétés (voir section \ref{Fenetre_proprietes}).\\
\par
Il est possible de sélectionner plusieurs entités en ayant recours aux méthodes classiques de \index{sélection multiple|see{sélectionner}}sélection multiple :
\begin{itemize}
\item sélection des entités une par une en cliquant dessus (dans l'arbre de navigation ou dans une vue 3D) tout en maintenant la touche CTRL enfoncée. Pour dé-sélectionner un objet tout en conservant ceux qui ont déjà été sélectionnés, il faut cliquer une nouvelle fois dessus tout en maintenant la touche CTRL enfoncée.
\item sélection d'une série continue d'entités avec la touche MAJ (dans l'arbre de navigation uniquement) : sélectionner la première entité, presser et maintenir la touche MAJ enfoncée tout en sélectionnant la dernière entité.
\item toujours dans l'arbre de navigation, on peut enfin survoler les objets à sélectionner en maintenant le bouton gauche de la souris enfoncé.\\
\end{itemize}

\par
La plupart des fonctions de \emph{CloudCompare} ne s'appliquent qu'aux entités sélectionnées.
Les entrées des menus correspondantes ne sont d'ailleurs actives que lorsque l'utilisateur a sélectionné
le type et le nombre d'entités appropriés (par exemple, deux nuages ou un nuage et un maillage pour le
calcul de distances).\\

\subsection{Intéractions avancées avec l'arbre de navigation}

Il est possible de déplacer les entités dans l'arbre de navigation par \emph{drag \& drop} (pour les regrouper dans un même << groupe >> par exemple). Les << groupes >> sont crées automatiquement lors du chargement depuis un fichier (auquel cas le groupe prend le nom du fichier) mais ils peuvent aussi être créés par clic sur un élément de l'arbre de navigation (ou dans une partie vide pour créer le groupe à la racine).\\

Attention : déplacer ainsi les entités change leurs relations hiérarchiques (ce qui peut avoir des conséquences importantes lors de certaines actions, comme la sauvegarde ou la suppression de l'entité parente). De plus les entités ne peuvent pas être déplacées n'importe où pour maintenir la cohérence interne de la base de données.\\

\begin{center}
\includegraphics[width=0.4\textwidth]{images/Partie2_Interface/contextMenuRightClick}
\end{center}

\par
Un clic droit sur un élément de l'arbre de navigation fait apparaitre un menu contextuel (dont le contenu dépend de l'entité). On retrouve toujours les entrées suivantes :
\begin{itemize}
\item \emph{Toggle} - inverse l'état d'activation de l'entité
\item \emph{Delete} - supprime l'entité
\item \emph{Add empty group} - rajoute un << groupe >> (sous l'entité)\\
\end{itemize}

\par
Si l'entité est affichable en 3D (nuage, maillage, étiquette 2D, etc.), des options supplémentaires permettent d'inverser l'état de \emph{visibilité} de l'entité elle-même et de ses composantes éventuelles (couleurs, normales, champ scalaire, etc.).\\
\par
Enfin, si l'entité possède plusieurs sous-entités dans l'arbre, des options permettant la réorganisation
de ces sous-entités peuvent apparaitre (tri automatique par nom, ou tri par type).\\

\subsection{Entités particulières}

\subsubsection{L'octree}\index{octree}

L'octree est une structure destinée à accélérer les traitements sur des données spatiales.
Il s'agit d'un découpage récursif et hiérarchique de l'espace (en \emph{cubes}).
\emph{CloudCompare} associe les nuages de points avec une telle structure dans de très nombreux cas pour accélerer ses traitements. C'est un type d'octree particulier qui est particulièrement rapide à construire, et optimisé pour la recherche de plus proches voisins (\textit{ce n'est par contre pas un octree efficace pour l'affichage de type L.O.D. - level of detail - typiquement}).\\
\par
D'un point de vue général, l'octree est défini par \emph{niveaux de subdivison} :
\begin{itemize}
\item Le premier niveau (niveau 0) est le plus petit cube englobant entièrement
le nuage de points (une version \textit{cubifiée} de la boite englobante).
\item Au niveau $N+1$, l'octree est construit en subdivisant chacun des cubes du
niveau $N$ en 8 sous-cubes de même taille (en pratique on ne se souvient que des
sous-cubes contenant au moins un point).\\
\end{itemize}
\par
Il n'est pas inintéressant pour l'utilisateur de comprendre le principe de cette structure, puisqu'elle occupe une place centrale dans \emph{CloudCompare}.\\
\par
Plus le niveau d'octree est élevé :
\begin{itemize}
\item plus le nombre de cubes à traiter est élevé : potentiellement $8^{N}=2^{3N}$
cubes au niveau $N$. Pour un ordre d'idées, et bien que cela soit très peu probable, on peut donc
avoir jusqu'à $2^{21}=2~097~152$ de cubes au niveau 7 de l'octree. Au niveau 10, on a
$2^{30}$ cubes, soit un peu plus d'un milliard ! (là encore, cela est extrêmement peu
probable ... d'autant plus qu'il faudrait au moins autant de points). En pratique, beaucoup
de cubes sont vides et ne sont donc pas conservés en mémoire, d'où une structure
généralement beaucoup plus compacte. Enfin, \emph{CloudCompare} utilise un codage spécial
de l'octree qui fait que sa taille est toujours égale au nombre de points du
nuage, et ne dépend donc pas de la répartition spatiale de celui-ci. \textbf{C'est aussi pour cette
raison que le niveau maximal d'un octree est fixé à 10 dans la version actuelle de \emph{CloudCompare}} (ce qui permet de coder la position de chaque point et pour tous les niveaux de l'octree sur 3*10 = 30 bits, ce qui tient dans une valeur entière de 4 octets = 32 bits, soit un codage par point pas trop gourmand en mémoire).
\item plus les cubes sont petits : si $a_{N}$ est la taille d'une arête
du cube au niveau $N$ (donc $a_{0}$ est la taille du cube initial), $a_{N}=\frac{a_{0}}{2^{N}}$.
En effet, par construction, on divise par deux la taille des cubes selon chaque dimension lorsque l'on descend d'un niveau. Par exemple, les cellules de l'octree au niveau 5 d'un octree sont 32 fois plus petites que la cellule initiale englobant tout le nuage (au niveau 0).
\item plus le nombre de points par cube est faible : intuitivement, les cubes étant plus petits, ils contiennent (statistiquement) moins de points.
\item plus l'enveloppe de l'octree (la surface globale qui serait formée par l'ensemble des surfaces externes des cubes) est proche du nuage de points originale.\\
\end{itemize}

\begin{figure}[!htb]
\begin{center}
\includegraphics[width=0.3\textwidth]{images/Partie2_Interface/OctreeLevel1}\hfill{}\includegraphics[width=0.3\textwidth]{images/Partie2_Interface/OctreeLevel3}\hfill{}\includegraphics[width=0.3\textwidth]{images/Partie2_Interface/OctreeLevel6}\\
\caption{\label{fig:octreeLevel}Cellules à différents niveaux d'octree : niveau
1 (gauche), 3 (milieu) et 6 (droite).}
\end{center}
\end{figure}

Les 3 captures d'écran de la figure~\ref{fig:octreeLevel} donnent un aperçu de la répartition
et de la taille des cellules d'octree à differents niveaux de subdivision.\\

Beaucoup de traitements sur les nuages de points ont recours à un octree. Lorsque cela est possible, le niveau d'octree optimal pour les calculs à effectuer est déterminé de manière automatique par \emph{CloudCompare}. Toutefois, certains algorithmes peuvent demander à l'utilisateur de spécifier un niveau spcifique à utiliser. Dans ces situations, il s'agit généralement pour l'utilisateur de trouver un niveau qui aboutisse au meilleur compromis entre le nombre de cubes à traiter (qu'on ne veut généralement pas trop grand, donc une valeur de niveau pas trop élevée) et le nombre moyen de points par cube (qu'on ne veut généralement le plus petit possible, donc une valeur de niveau ... pas trop faible). Trouver le bon niveau peut parfois nécessiter une certaine expérience.\\


\subsubsection{Etiquettes 2D et annotation graphique\index{etiquettes}\label{etiquettes_2D}}

CloudCompare permet d'annoter\index{annotation} un ensemble d'entités 3D via des étiquettes (\textit{2D labels}) de différents types.\\
\par
Remarque : ces étiquettes peuvent être sauvées via le format binaire propre à CloudCompare (BIN).\\

\par
\textbf{Etiquette standard}\label{subsection:standardLabel}\\

\begin{figure}[!htb]
\begin{centering}
\includegraphics[width=0.8\textwidth]{images/Partie2_Interface/standardLabels}
\caption{\label{fig:standardLabels}Etiquettes standards}
\end{centering}
\end{figure}

Le premier type, \emph{2D label}, correspond aux étiquettes (mobiles) rattachées à un ou plusieurs points :
\begin{itemize}
\item un point : l'étiquette continent les coordonnées du point, son indice dans le nuage et les valeurs de ses différents champs (couleur, normale, champ scalaire affiché)
\item deux points (segment) : l'étiquette contient les coordonnées de chaque point et leur indice respectif dans le(s) nuage(s) ainsi que la distance entre les deux points
\item trois points (triangle) : l'étiquette contient les coordonnées de chaque point et leur indice respectif dans le(s) nuage(s), l'aire du triangle ainsi défini, la normale au triangle, et enfin l'angle au niveau du premier point (\textsl{l'ordre de sélection des points est donc important})\\
\end{itemize}

\par
La représentation graphique des étiquettes standards peut être modulée en fonction des besoins : leur titre peut être affiché en 3D à côté du ou des points auxquelles elles sont associées, tandis que leur représentation 2D peut être soit affichée totalement, soit affichée de manière condensée soit encore cachée. La représentation 2D a de plus une transparence réglable (via les paramètres d'affichage généraux de CloudCompare - voir section\ref{subsection:displaySettings}). A l'instar des nuages de points ou les maillages, les étiquettes standards peuvent être sélectionnées à l'écran (sélection multiple ou individuelle).\\
\par
Les étiquettes rattachées à un unique point peuvent être créées très facilement (\textit{à la volée}) par un simple clic sur le point en maintenant la touche SHIFT enfoncée. Autrement, tous les autres type d'étiquettes peuvent être crées avec l'outil 'Point Picking' (Cf. section \ref{subsection:pointPicking}).\\

\par
\textbf{Etiquette \emph{zone 2D}}\label{subsection:zoneLabel}\\

\begin{figure}[!htb]
\begin{centering}
\includegraphics[width=0.5\textwidth]{images/Partie2_Interface/zoneLabels}
\caption{\label{fig:standardLabels}Etiquettes \emph{zone 2D}}
\end{centering}
\end{figure}

\par
Le second type d'étiquette, \emph{2D area label}, correspond aux étiquettes fixes rattachées à un point de vue. Ce sont des zones rectangulaires (définies par l'utilisateur à l'écran) associées à un commentaire textuel.\\

\par
Etant donné que ce qui apparaît dans la zone délimitée par l'étiquette dépend du point de vue (orientation de la caméra, etc.), l'étiquette n'apparait que lorsque la caméra est dans la même position (et avec les mêmes paramètres) que lorsqu'elle a été créée (seuls certains paramètres peuvent être compensés automatiquement, comme le zoom ou le panning en mode orthographique). Pour simplifier la tâche de l'utilisateur, les étiquettes \emph{zone 2D} sont donc capables de rétablir ces paramètres dans la vue 3D associée (un bouton \emph{Apply} se trouve dans les propriétés de l'étiquette - voir section \ref{subsection:zoneLabelProp}).


\section{Affichage des entités}

\subsection{Vues 3D\label{Contexte-graphique}\index{Vue 3D}}

\subsubsection{Présentation}

Les vues 3D (voir figure~\ref{fig:Context3D}) sont les sous-fenêtres dans lesquelles sont affichées les entités.
Elles possèdent un fond (qui peut-être un dégradé de couleur ou une couleur unique - voir les paramètres d'affichage
généraux en section \ref{subsection:displaySettings}), par dessus lequel sont affichées les entités 3D (nuages, maillages,
etc.) et encore par dessus, des éléments d'interface ou des entités 2D (étiquettes, échelle de couleur, etc.).\\

Voici les éléments standards qui composent une vue 3D :
\begin{itemize}
\item \textbf{\textcolor{red}{1}} : les entités 3D, éventuellement encadrées par leur boite englobante\footnote{Aussi appellée \textit{bounding-box}. Il s'agit du plus petit parallélépipède rectangle aligné avec les axes principaux (X,Y,Z) et qui contienne l'intégralité des entités sélectionnées} si elles sont sélectionnées).
\item \textbf{\textcolor{red}{2}} : l'\index{echelle@échelle!de distances}échelle fournit une référence pour
l'estimation des dimensions. Sa longueur est exprimée dans l'unité \textit{impliticte} courante (i.e. l'unité implicite des coordonnées de la ou des entités affichées, telles qu'elles ont été chargées depuis leur fichier d'origine - \emph{CloudCompare} n'utilise pas d'unité explicite).
\item \textbf{\textcolor{red}{3}} : le \index{trièdre d'orientation}trièdre d'orientation représente l'orientation
courante des trois axes principaux : X (rouge), Y (vert) et Z (bleu).
\item \textbf{\textcolor{red}{4}} : nom du \index{champ scalaire}champ scalaire actif et sa
\index{rampe de couleurs}\index{echelle@échelle!de couleurs|see{rampe de couleurs}}rampe de couleurs associée.
\item \textbf{\textcolor{red}{5}} : informations temporaires concernant l'affichage ou l'action en cours. Il peut s'agir de la dimension courante de la vue 3D (en pixels - après un redimensionnement de la fenêtre), du type de projection utilisé, etc.
\item \textbf{\textcolor{red}{6}} : \index{étiquette 2D}étiquette 2D standard (ici associée à un point 3D d'un nuage). Ces étiquettes s'affichent toujours par dessus les objets 3D (leur transparence est réglable). Pour plus d'information, Cf. section\ref{etiquettes_2D}.
\item \textbf{\textcolor{red}{7}} : \index{Annotation}étiquette \textit{zone 2D}. Ces étiquettes particulières
permettent d'annoter une zone précise de l'écran et sont donc liées à un point de vue (qu'elles sont capable de rétablir sur demande) et non à une entité.\\
\end{itemize}

\begin{figure}[!htb]
\begin{centering}
\includegraphics[width=0.8\textwidth]{images/Partie2_Interface/View3D}
\caption{\label{fig:Context3D}Eléments standards d'une vue 3D}
\end{centering}
\end{figure}

Seuls l'échelle et le trièdre d'orientation sont visibles en permanence.
Les autres informations dépendent de l'état courant de l'application.\\

\subsubsection{Interagir avec une vue 3D\label{subsection:Interactivité}}

Vous pouvez intéragir avec une vue 3D en utilisant la\index{souris} souris (figure \ref{fig:mouseButtons}) :\\

\begin{figure}[!htb]
\begin{centering}
\includegraphics[width=0.4\textwidth]{images/Partie2_Interface/Souris}
\caption{\label{fig:mouseButtons}Commandes via la souris (L : [SELECTION/ROTATION], M : [ZOOM], R : [PAN])}
\end{centering}
\end{figure}


\begin{itemize}
\item \textbf{\textcolor{red}{L}} - clic gauche court : [SELECTION] cliquez sur un objet
dans la vue 3D pour le sélectionner.
\item \textbf{\textcolor{red}{L}} - clic gauche maintenu : [ROTATION] maintenez le bouton gauche
de la souris enfoncé et déplacez la souris pour effectuer une rotation
du point de vue autour du \textit{pivot} courant (cf. sections
\ref{subsection:centeredPerspective} et \ref{subsection:viewerPerspective} ou encore
les paramètres caméras en section \ref{subsection:cameraSettings} ou enfin l'outil de
picking du centre de rotation en section \ref{Options-affichage}).
\item \textbf{\textcolor{red}{M}} - roulement : [ZOOM] faites rouler la molette
vers l'avant (ou vers \og le haut \fg{}) pour effectuer un \index{zoom}zoom positif
dans la vue 3D et inversement, faites rouler la molette vers l'arrière (ou \og le
bas \fg{}) pour effectuer un zoom négatif.
\item \textbf{\textcolor{red}{R}} - clic droit court : sur les étiquettes 2D, un clic droit court
permet de la condenser ou inversement de rétablir son extension maximale.
\item \textbf{\textcolor{red}{R}} - clic droit maintenu : [PANNING] maintenez le bouton droit
de la souris enfoncé et déplacez la souris pour effectuer une translation du point de vue
dans le plan écran.\\
\end{itemize}

Par défaut, la visualisation se fait selon une projection orthographique (sans perspective) et le
centre de rotation est positionné sur le centre de la boite englobant toutes les entités affichées
dans la vue 3D. Lors du changement de point de vue (rotation, translation), les gros
nuages de points ou les gros maillages sont temporairement sous échantillonnés de manière à permettre
le rendu interactif des mouvements (ce comportement est paramètrable - voir section\ref{subsection:displaySettings}).\\

\subsubsection{Utiliser plusieurs vues 3D\label{Environnement-multi-contextes}}

Dans CloudCompare, un nombre quelconque de vues 3D peut être créé, et chaque entité peut être
assignée séparémment à une vue 3D particulière.\\

Pour créer une nouvelle vue 3D, cliquez sur la commande
\emph{New} dans le menu << 3D views >>, ou utilisez le raccourci clavier
CTRL+F3. Une nouvelle fenêtre apparaît alors (par défaut elle sera maximisée).\\

\par
Pour partager l'espace d'affichage entre les différentes vues 3D,
différents choix s'offrent à l'utilisateur :
\begin{itemize}
\item \emph{Tile} (partitionnement) : chaque fenêtre occupe une portion
"équivalente de l'espace disponible, les fenêtres ne se chevauchent pas.
\item \emph{Cascade}  : chaque fenêtre occupe la même portion d'espace
prédéfinie, elles sont décalées de manière régulière en se chevauchant.
\item redimensionnement manuel : de manière classique chaque vue 3D
peut-être déplacée et redimensionnée, en s'aidant notamment des boutons \includegraphics{images/Partie2_Interface/ReduceContext}(minimiser
la vue) et \includegraphics{images/Partie2_Interface/MinimizeContext}(réduire
la vue) disponibles en haut à droite de chaque fenêtre.\\
\end{itemize}

\par
Il est aussi possible de naviguer entre les différentes vues via les commandes
\emph{Next} et \emph{Previous} du menu << 3D views >>, ou en accédant directement
à la vue désirée en cliquant sur son nom dans ce même menu.\\

\par
Pour fermer une vue 3D, utilisez l'entrée \emph{Close} du menu << 3D views >> (après
avoir activé cette fenêtre en cliquant dessus) ou plus simplement utilisez le bouton \includegraphics{images/Partie2_Interface/CloseContext} de la fenêtre.\\

\par
Enfin, pour changer la \index{afficher!des objets}vue 3D dans laquelle une entité
apparaît, sélectionnez cette entité puis modifiez la valeur courante de la liste
déroulante \emph{Current Display} dans la fenêtre de propriétés.

\begin{center}
\includegraphics[width=0.4\textwidth]{images/Partie2_Interface/ChangeContext}
\par
\end{center}

Remarque : il est possible de n'afficher une entité dans aucune vue 3D en choisissant
\emph{None} comme \textit{contexte} de destination.\\


\subsubsection{Camera link\label{subsection:cameraLink}}

Les vues 3D sont indépendantes les unes des autres, et les changements de point de vue dans une vue 3D particulière n'ont a priori aucune répercussion sur les autres vues 3D. Toutefois, il est possible de synchroniser les mouvements de caméra pour qu'ils soient appliqués à toutes les \index{Vues 3D} vues 3D en même temps. Pour ce faire il suffit de cocher l'option
\emph{Camera link} située juste sous l'arbre de navigation.

\begin{center}
\includegraphics[width=0.4\textwidth]{images/Partie2_Interface/CameraLink}\\

\par\end{center}


\subsection{Options d'affichage\label{Options-affichage}}

\subsubsection{Barre d'outils \textit{Viewing Tools}}

Un certain nombre d'icônes et d'outils permettent à l'utilisateur de contrôler l'affichage courant.
La majeure partie d'entre eux sont accessibles via la \index{outils, barre de}barre d'outils \emph{Viewing tools} :
\begin{center}
\begin{tabular}{>{\centering}m{0.05\textwidth}>{\raggedright}m{0.95\textwidth}}
\multicolumn{2}{c}{\includegraphics[height=21px]{images/Partie2_Interface/ViewToolBar}}\tabularnewline
\includegraphics[height=15px]{images/Partie2_Interface/cc_settings} & Changer les paramètres \index{eclairage@éclairage}d'affichage généraux (couleurs, matériaux, taille de la police, précision numérique des valeurs affichées, etc. - voir section\ref{subsection:displaySettings}).\tabularnewline
\includegraphics[height=15px]{images/Partie2_Interface/Camera} & Changer les paramètres de caméra de la fenêtre 3D courante (orientation et centre de rotation, etc. - voir section\ref{subsection:cameraSettings}).\tabularnewline
\includegraphics[height=15px]{images/Partie2_Interface/ZoomGlobal} & \index{zoom}Zoomer et recentrer la \index{point de vue}caméra pour rendre visibles toutes les entités affichées dans la vue 3D courante.\tabularnewline
\includegraphics[height=15px]{images/Partie2_Interface/cc_pickCenter} & Sélection du centre de rotation par picking d'un point à l'écran.\tabularnewline
\includegraphics[height=15px]{images/Partie2_Interface/ZoomCenter} & Zoomer et recentrer la caméra sur la ou les entités sélectionnées. Aucun effet si aucun objet n'est sélectionné.\tabularnewline
\includegraphics[height=15px]{images/Partie2_Interface/ChangeView} & Les 6 derniers boutons permettent de basculer entre différents points de vue prédéfinis (dans l'ordre où les boutons apparaissent : haut, avant, gauche,
arrière, droit, bas). Ces points de vue sont définis par rapport au \index{trièdre d'orientation}trièdre d'orientation. \tabularnewline
\end{tabular}\\
\end{center}

\subsubsection{Menu \textit{Display}}

D'autres fonctionnalités relatives à l'affichage sont accessibles via le menu \emph{Display} :
\begin{itemize}
\item \emph{Full screen} : basculer la fenêtre principale entre l'affichage standard et l'affichage \index{plein écran}plein
écran (raccourci clavier: F11).
\item \emph{Refresh} : forcer l'actualisation de l'affichage (raccourci clavier : F5).
\item \emph{Test frame rate} : lancer un test d'estimation du \index{rafraîchissement, taux de}taux de rafraîchissement
(exprimé en 'f.p.s' = \textit{frame per second} ou images par seconde en français) pour la vue 3D courante. En théorie, plus il y a de triangles ou de points à afficher, plus le taux de rafraîchissement devrait être faible. Il est admis qu'en deçà d'une vingtaine d'images par seconde, l'humain perçoit l'affichage comme étant saccadé (au delà de 24 f.p.s, l'affichage est perçu comme étant fluide).
\item \emph{Toggle centered perspective} : basculer entre la projection par défaut (parallèle orthographique) et la projection perspective avec le centre de rotation de la caméra placé par défaut sur le centre de la boite englobant toutes les entités affichées (raccourci clavier : F3).
\item \emph{Toggle viewer based perspective} : basculer entre la projection par défaut (parallèle orthographique) et la projection perspective avec le centre de rotation de la caméra placé par défaut en son centre optique (l'oeil virtuel de l'utilisateur) (raccourci clavier : F4).
\item \emph{Light > Toggle sun light} : activer ou \index{eclairage@éclairage}désactiver
la lumière globale (raccourci clavier : F6).
\item \emph{Light > Toggle custom light }: activer ou désactiver
la lumière personnalisée (raccourci clavier : F7). Cette source de lumière peut être déplaçée en maintenant la touche CTRL
enfoncée tout en faisant un \emph{pan} avec la souris à l'écran - voir section\ref{subsection:Interactivité}).\\
\end{itemize}

\par
Remarque : les effets d'ombrage permis par les normales d'un nuage ou d'un maillage ne sont visibles que si au moins une source lumineuse est active.\\

\subsubsection{Taille des points 3D\label{pointSizeModification}}

La taille des points affichés dans une vue 3D est modifiable via des \textit{interacteurs} qui apparaissent
directement en surimpression de la vue lorsque la souris survole son coin haut-gauche.

\begin{center}
\includegraphics[width=0.3\textwidth]{images/Partie2_Interface/PointSizeDlg}
\par\end{center}

Pour modifier la \index{taille des points}taille d'affichage des points, il suffit de cliquer sur '-' ou '+'. Un point de référence à la taille courante apparaît entre les deux interacteurs.\\



\section{Fenêtre de propriétés}\index{propriétés, fenêtre de}\label{Fenetre_proprietes}

La fenêtre de propriétés contient toutes les informations sur l'entité sélectionnée, ainsi que des options modifiables par l'utilisateur (visiblité de certains composants, etc.).

\subsection{Propriétés communes des entités affichables}\label{subsection:commonProperties}

Certains champs sont communs à (presque) toutes les entités affichables. On les retrouve dans la section \emph{CC Object} :
\begin{center}
\includegraphics[width=0.4\textwidth]{images/Partie2_Interface/CommonProperties}
\par\end{center}
\begin{itemize}
\item \emph{Name} : \index{renommer}nom de l'entité. Il peut être modifié en cliquant sur l'entrée correspondant à l'entité dans l'arbre de navigation (voir \ref{Arbre-de-navigation}) ou encore en utilisant le raccourci clavier F2.
\item \emph{Unique ID} : toutes les entités CloudCompare sont représentées en interne par un identifiant unique.
\item \emph{Children} : le nombre de sous-éléments (ou \textit{enfants}) rattachés à cette entité. Dans la capture ci-dessus par exemple, l'objet sélectionné est un groupe de maillages regroupant 758 sous-maillages, un nuage de points et un tableau de normales compressées, soit 760 sous-entités au total).
\item \emph{Visible} : spécifie si l'entité doit être affichée dans la vue 3D associée ou non. La propriété 'Visible' n'est pas héréditaire (contrairement à l'état d'activation de l'entité, qui correspond à la case à cocher présente au niveau de l'arbre de navigation et qui concerne toutes les entités présentes dans le reste de la branche). Si l'entité est sélectionnée, la boite englobante reste visible même si la propriété \emph{Visible} est désactivée.
\item \emph{Colors} (optionnelle) : si l'entité sélectionnée possède des couleurs, une case à cocher \emph{Colors} apparait ici. Elle permet de spécifier si ces couleurs doivent être utilisées lors de l'affichage de l'entité ou non. Remarque : la propriété \emph{Scalar field} (voir ci-dessous) est toujours prioritaire par rapport à \emph{Colors}.
\item \emph{Normals} (optionnelle) : si l'entité sélectionnée possède des normales, une case à cocher \emph{Normals}  apparait ici. Elle permet de spécifier si ces normales doivent être utilisées lors de l'affichage de l'entité ou non. Les normales\index{normales}\index{eclairage@éclairage} permettent d'obtenir un rendu visuel semi-réaliste des objets en faisant varier la teinte des points ou facettes associéess en fonction de la position de l'éclairage. Si les normales sont désactivées, la surface de l'objet est affichée dans une couleur uniforme (effet \og silhouette \fg{}, avec une perte de la perception des profondeurs). \textit{Le plugin \emph{qEDL} (voir section\ref{qEDL}) est une excellente alternative aux normales. Il simule en temps réel un éclairage encore plus réaliste, sans information autre que la position des points ou des objets.}
\item \emph{Scalar field} (optionnelle) : si l'entité sélectionnée possède un ou plusieurs champs scalaires, une case à cocher \emph{Scalar field}  apparait ici. Elle permet de spécifier si le champ scalaire couramment affiché (voir la liste déroulante \emph{Current} dans la section \emph{Scalar field} des proprités) doit être utilisé lors de l'affichage de l'entité ou non. Si un champ scalaire courant est défini dans la liste déroulante \emph{Current}, alors ce champ scalaire sera toujours affiché en priorité par rapport aux éventuelles couleurs de l'entité.
\item \emph{Current display} : cette liste déroulante permet de choisir la vue 3D dans laquelle l'objet sera affiché
(cf. section \ref{Environnement-multi-contextes}).
\item \emph{Box dimensions} : les dimensions de la boite englobante de l'entité.
\item \emph{Box center} : le centre de la boite englobante de l'entité.\\
\end{itemize}
\par


\subsection{Propriétés propres aux nuages de points}\label{subsection:pointCloudProperties}

La section \emph{Cloud} est réservée aux nuages de points. Elle contient les champs suivants :
\begin{itemize}
\item \emph{Points} : le nombre de points du nuage.
\item \emph{Global shift}\index{centrage automatique au chargement} : la translation qui a été éventuellement appliquée au chargement du nuage par CloudCompare (généralement pour rammener ses coordonnées à des valeurs compatibles avec un stockage en flottant sur 32 bits). C'est typiquement le cas des nuages exprimés dans des systèmes de coordonnées à l'échelle d'un pays (UTM, etc.), avec des valeurs dépassant les millions. Dans ce cas, CloudCompare propose à l'utilisateur de recentrer automatiquement l'entité. Cette translation est conservée tout au long de la vie de l'entité puis elle sera éventuellement ré-appliquée aux points lors la sauvegarde de l'entité (si le format le permet).
\\
\end{itemize}

\begin{center}
\includegraphics[width=0.5\textwidth]{images/Partie2_Interface/PointCloudProperties}
\end{center}

\subsection{Propriétés propres aux maillages ou groupes de maillages}\label{propMaillages}

\begin{center}
\includegraphics[width=0.4\textwidth]{images/Partie2_Interface/MeshProperties}\\
\end{center}

\index{maillage}
Les entités maillages ou groups de maillages deux types d'entités partagent les mêmes propriétés :
\begin{itemize}
\item \emph{Faces} : le nombre de facettes composant le maillage. Dans le cas d'un groupe de maillages, ce nombre correspond au nombre total de facettes de tous les sous-maillages rattachés à ce groupe.
\item \emph{Wireframe} : \index{fil de fer, rendu}\index{WireFrame|see{fil de fer}}permet
d'activer le rendu en \og fil de fer \fg{} du maillage (seules les arrêtes des triangles sont affichées et non l'intérieur - voir figure \ref{fig:MeshWireframeRendering}).\\
\end{itemize}

\begin{figure}[!htb]
\begin{center}
\includegraphics[width=0.6\textwidth]{images/Partie2_Interface/MeshWireframeRendering.png}
\caption{\label{fig:MeshWireframeRendering}Exemple de rendu en \textit{fil de fer} d'un maillage}
\end{center}
\end{figure}


\subsection{Propriétés communes aux nuages et maillages}


\subsubsection{Champs scalaires (Scalar fields)\label{Champs-scalaires}\index{champ scalaire}}

Certains traitements effectués sur les nuages de points permettent d'associer à chaque point une valeur numérique (un \textit{scalaire}). L'ensemble de ces valeurs scalaires constitue une structure appelée \emph{Champ Scalaire}
(ou \emph{Scalar field}). Les champs scalaires sont toujours rattachés à un nuage de points. Néanmoins, pour une meilleure ergonomie, les maillages dont les sommets portent des champs scalaires se comportent comme s'ils portaient eux-même ces champs scalaires (ils sont d'ailleurs aussi capables de les utiliser lors de leur affichage 3D). Les propriétés propres à ces champs scalaires apparaissent donc de la même manière au niveau d'un nuage de point qu'au niveau d'un maillage dont les sommets portent un champ scalaire.\\

\begin{center}
\includegraphics[width=0.4\textwidth]{images/Partie2_Interface/SFProperties}\\
\end{center}

Il est possible de rattacher plusieurs champs scalaires à un même nuage, mais un seul peut être actif (i.e. \textit{affiché}) à un instant donné. Le nombre de champs scalaires associés à une entité correspond d'ailleurs à la première entrée (\emph{Number}) de la section \emph{Scalar Field}.
\par
En dessous se trouve une liste déroulante (\emph{Current}) permettant de spécifier le champ scalaire actif. Chaque champ scalaire à un nom unique. Celui-ci peut-être modifié par l'utilisateur via la commande << Edit > Scalar fields > Rename >> (Cf. section\ref{subsection:sfRename}).
\par
Ensuite vient l'entrée \emph{Color ramp} permettant de choisir la rampe de couleur\index{rampe!de couleurs} utilisée pour l'affichage du champ scalaire sous forme de fausses couleurs (voir la section suivante pour plus de détails). Elle est suivie de l'entrée \emph{Color ramp steps} qui permet de spécifier le nombre de couleurs différentes utilisées pour l'affichage en fausses couleurs. Par exemple, utiliser un nombre très faible de couleurs sur une entité dense permet d'obtenir un effet \textit{lignes de niveau}.
\par
Enfin, la dernière entrée de la section \emph{Scalar Field} est la case à cocher \emph{Postive} qui permet de spécifier si le champ scalaire doit être considéré comme strictement positif (auquel cas toutes les valeurs négatives sont considérées comme étant des valeurs invalides, de type \emph{NaN} = \textit{not a number}). Sinon, CloudCompare considère toutes les valeurs comme étant valides. Cette propriété influe directement sur la manière dont la correspondance \textit{valeur scalaire - couleur} est calculée (voir ci-dessous).

\subsubsection{Rampe de couleurs (SF Scale)\label{Rampe-de-couleurs}\index{Rampe de couleur}}

La section \emph{SF Scale} est consacrée à l'affichage du champ scalaire actif en fausses couleurs. Elle est en pratique toujours présente si un champ scalaire est activé (i.e. sélectionné dans la liste déroulante \emph{Current} - voir ci-dessus).\\

Différentes \index{rampes de couleurs} rampes de couleurs (ou encore \textit{échelles de couleurs}) sont disponibles. Chacune correspond à un dégradé de couleurs, la première couleur étant associée à la valeur minimale \emph{de saturation} du champ scalaire et la dernière couleur à la valeur maximale \emph{de saturation}. Les couleurs intermédiaires sont associées aux valeur scalaires équivalentes de manière linéaire.\\
\par
Remarque : dans le cas d'un champ scalaire non strictement positif, il est possible de spécifier une échelle de couleur avec saturation \emph{absolue}, auquel cas l'échelle de couleur courante est coupée en deux et est utilisée de manière symétrique pour les valeurs négatives ou positives (voir plus bas).

\begin{center}
\begin{tabular}{>{\raggedright}p{0.15\textwidth}>{\centering}p{0.8\textwidth}}
 & valeur minimale\hfill{}valeur maximale\tabularnewline
Bleu à rouge : & \includegraphics[angle=270,width=0.7\textwidth]{images/Partie2_Interface/ScalarRampBlueRed}\tabularnewline
Niveaux de gris : & \includegraphics[angle=270,width=0.7\textwidth]{images/Partie2_Interface/ScalarRampGrey}\tabularnewline
Rouge à jaune : & \includegraphics[angle=270,width=0.7\textwidth]{images/Partie2_Interface/ScalarRampYellowRed}\tabularnewline
Rouge à blanc : & \includegraphics[angle=270,width=0.7\textwidth]{images/Partie2_Interface/ScalarRampRedWhite}\tabularnewline
\end{tabular}
\par
\end{center}

\emph{CloudCompare} permet à l'utilisateur de paramétrer finement \index{plage!de saturation}\index{plage!d'affichage} la manière dont les valeurs du champ scalaire courant sont affichées en fausses couleurs (et ce de manière dynamique). Quatre valeurs clés sont modifiables interactivement :
\begin{center}
\includegraphics[width=1\textwidth]{images/Partie2_Interface/SFViewerCursors}
\par\end{center}
\begin{itemize}
\item \textbf{\textcolor{red}{1}} : \index{min!displayed value|see{plage d'affichage}}
Valeur minimale affichée (\textsl{min displayed value}). Toutes les valeurs scalaires inférieures sont ignorées (et sont alors considérées comme étant de type \emph{NaN} - voir plus bas).
\item \textbf{\textcolor{red}{2}} : \index{min!saturation value|see{plage de saturation}}
Valeur minimale de saturation (\textit{min saturation value}). Tous les valeurs inférieures (et donc comprises entre \textit{min displayed} et \textit{min saturation}) sont affichées avec la (même) couleur, \og la
plus faible \fg{} de la rampe (ici en bleu).
\item \textbf{\textcolor{red}{3}} : \index{max!saturation value|see{plage de saturation}}
Valeur maximale de saturation (\textit{max saturation value}). Tous les valeurs supérieures (et donc comprises entre \textit{max saturation} et \textit{max displayed}) sont affichées avec la (même) couleur, \og la
plus forte \fg{} de la rampe (ici en rouge).
\item \textbf{\textcolor{red}{4}} : \index{max!displayed value|see{plage d'affichage}}
Valeur maximale affichée (\textit{max displayed value}). Toutes les valeurs scalaires supérieures sont ignorées (et sont alors considérées comme étant de type \emph{NaN} - voir plus bas).\\
\end{itemize}
\par
La manière dont sont traitées les \index{NaN|see{valeurs ignorées}}\index{valeurs ignorées}valeurs de type \emph{NaN} (valeurs invalides ou volontairement ignorées par l'utilisateur via le réglagle des valeurs \textit{min displayed} \textbf{\textcolor{red}{(1)}} et \textit{max displayed}) \textbf{\textcolor{red}{(4)}} se règle via la case à cocher \emph{Nan in grey}. Si celle-ci est cochée, les points associés à ces valeurs scalaires sont affichés avec une couleur grise par défault. Sinon ces points ne sont pas affichés.\\

Les quatre valeurs clés présentées précédemment permettent donc de définir plusieurs plages :
\begin{itemize}
\item les valeurs affichables, pour lesquelles les points sont effectivement affichés en fausses couleurs. Le comportement en dehors de cette plage dépend de la propriété \emph{Nan in grey}.
\item la plage de saturation, en dehors de laquelle la variation des couleurs est désactivée. La borne inférieure de cet intervalle est associée à la première couleur de l'échelle, la borne supérieure à la dernière
couleur, et le reste des couleurs est réparti linéairement entre ces bornes.\\
\end{itemize}

\par
\emph{CloudCompare} vérifie en permanence la cohérence des valeurs saisies : on ne peut pas avoir \textbf{\textcolor{red}{(1)}}~$>$~\textbf{\textcolor{red}{(4)}} ni \textbf{\textcolor{red}{(2)}}~$>$~\textbf{\textcolor{red}{(3)}}. Toute modification valide d'une de ces valeurs est immédiatement répercutée sur l'affichage, de manière interactive.Par défaut les valeurs de saturation ne peuvent donc pas sortir des bornes 'min displayed value' \textbf{\textcolor{red}{(1)}} et 'max displayed value' \textbf{\textcolor{red}{(4)}}, et ces bornes sont imposées par les données elles-même (\emph{CloudCompare} calcule automatiquement ces bornes à partir des valeurs effectives du champ scalaire). Or, il arrive que pour des raisons esthétiques ou pratiques l'utilisateur veuille voir apparaitre des bornes différentes (en particulier au niveau de la représentation graphique de l'échelle de couleur dans la vue 3D), ou une saturation qui commence par exemple à partir de 0 dans tous les cas de figure. Il existe donc la propriété \emph{release boundaries} qui permet une fois activée de modifier manuellement les bornes 'min displayed' et 'max displayed' (il suffit pour cela de modifier manuellement les valeurs textuelles correspondantes en les remplaçants par les nouvelles bornes désirées).\\
\par
D'autres options sont disponibles :
\begin{itemize}
\item l'option \emph{log scale} permet d'afficher les fausses couleurs (et les valeurs textuelles correspondantes à l'écran) selon une échelle logarithmique.
\item comme évoqué plus haut, dans le cas d'un champ scalaire non strictement positif, une option \emph{absolute saturation} apparait. Si l'utlisateur la coche, alors les valeurs 'min staturation' \textbf{\textcolor{red}{(2)}} et 'max saturation' \textbf{\textcolor{red}{(3)}} changent de sens : elles deviennent forcément positives et concernent à la fois les valeurs négatives et les valeurs positives (par symétrie). La variation automatique des couleurs ne se passera donc qu'entre -'max saturation' et -'min stauration' et entre +'min stauration' et +'max stauration'. Les couleurs stagneront en dessous de -'max saturation' (couleur \textit{minimale} de la rampe - \textbf{bleu} typiquement), entre  -'min stauration' et +'min stauration' (couleur \textit{centrale} de la rampe - \textbf{vert} typiquement) et enfin au dessus de +'max saturation' (couleur \textit{maximale} de la rampe - \textbf{rouge} typiquement).\\
\end{itemize}

\par
Enfin, la rampe de couleurs avec les valeurs numériques remarquables associées (min, max, valeurs de saturation, etc.) peut être affichée à côté des entités dans la même vue 3D (cf. figure de la section \ref{Contexte-graphique}). Il faut cocher la case \emph{display scale} en fin de section \emph{SF scale}. Une seule rampe de couleur peut-être affichée à la fois. De plus, si l'entité associée est cachée ou désactivée, la rampe de couleur ne sera pas affichée.
\par


\subsection{Propriété de l'octree\index{octree, propriétés}\label{subsection:octreeProp}}

L'octree est indissociable du nuage de points auquel il est rattaché. Il s'agit d'une structure abstraite, disponible dans l'interface de \emph{CloudCompare} et affichable uniquement à titre informatif (elle peut aussi être supprimée pour libérer de la mémoire si besoin). L'affichage de la structure proposé par \emph{CloudCompare} ne permet de visualiser qu'un niveau à la fois. Vous pouvez changer le \index{octree}niveau d'affichage de l'octree en incrémentant/décrémentant le champ \emph{Display level} de la section \emph{Octree}.

\begin{center}
\includegraphics[width=0.4\textwidth]{images/Partie2_Interface/OctreeDisplayLevel}\\
\par
\end{center}

Les niveaux qui peuvent être affichés vont de 1 à 10. Le niveau 0 ne peut être sélectionné (il n'est dailleurs en pratique jamais utilisé, pas même pour les calculs, puisque l'octree au niveau 0 correspond ni plus ni moins au nuage dans son intégralité, contenu dans une unique cellule).\\
\par
Il se peut que l'affichage ralentisse considérablement au delà d'un certain niveau de subdivision (en fonction des capacités de l'ordinateur sur lequel le programme s'exécute), à cause du nombre conséquent d'éléments à afficher.\\
\par
L'octree peut être visualisé sous différentes formes :
\begin{itemize}
\item Fil de fer (Wire) : \index{fil de fer, rendu}seules les arrêtes des cubes sont représentées (attention : lourd).
\item Points : chaque cube est représenté par le centre de gravité des points qui y sont inclus.
\item Surfacique (Plain cubes) : la surface des cubes est affichée intégralement (attention : très lourd).\\
\end{itemize}
Le mode d'affichage courant de l'octree est controllé par la liste déroulante \emph{Display type}.

\begin{center}
\includegraphics[width=0.4\textwidth]{images/Partie2_Interface/OctreeDisplayType}\\
\par
\end{center}

\subsection{Popriétés des étiquettes standards\index{etiquette standard, propriétés}\label{subsection:stdLabelProp}}

Les étiquettes 2D \textit{standards} sont des étiquettes graphiques qui s'affichent en surimpression de la vue 3D et qui peuvent être associées à un ou plusieurs points (voir section \ref{subsection:standardLabel}).\\

\begin{center}
\includegraphics[width=0.4\textwidth]{images/Partie2_Interface/StandardLabelProperties}\\
\end{center}

Outre les options standards des objets affichables dans les vues 3D (voir section \ref{subsection:commonProperties}), ces étiquettes possèdent plusieurs champs regroupés dans la section \emph{Label} :
\begin{itemize}
\item \emph{Body} - le corps de l'étiquette (généré automatiquement). Pour information (et pour export, via copier-coller, si nécessaire).
\item \emph{Show 2D label} - permet de cacher la partie 2D de l'étiquette
\item \emph{Show 3D legend(s)} - permet de cacher la rappel du nom de l'étiquette à côté du ou des points associés en 3D
\end{itemize}

\subsection{Popriétés des étiquettes zone 2D\index{etiquette zone, propriétés}\label{subsection:zoneLabelProp}}

Les étiquettes \textit{zone 2D} sont des étiquettes graphiques qui s'affichent en surimpression de la vue 3D et qui sont associée à un point de vue (voir section \ref{subsection:zoneLabel}).\\

\begin{center}
\includegraphics[width=0.4\textwidth]{images/Partie2_Interface/ZoneLabelProperties}\\
\end{center}

Les étiquettes \textit{zones 2D}, outre leur nom (qui apparaît en dessous du rectangle correspondant à l'étiquette - ce nom est d'ailleurs modifiable comme pour toute entité) n'ont qu'un bouton \emph{Apply} dans leurs propriétés. Celui-ci provoque l'application des paramètres de caméra associés à l'étiquette dans la vue 3D (et donc cela force l'apparition de l'étiquette, qui ne se dessine à l'écran que si les paramètres de caméra courants coïncident avec ceux de la caméra lors de la création de l'étiquette).

\subsection{Popriétés des points de vues\index{point de vue, propriétés}\label{subsection:viewportProp}}

Il est possible à tout moment de sauver le point de vue courant (avec tous les paramètres de visualisation associés, comme la taille des points, etc.) via la commande << Display > Save viewport as object >> ou le raccourci clavier Ctrl+V. L'objet correspondant \textit{Viewport} se comporte exactement comme une étiquette zone (mis à part qu'il n'a pas de représentation associée).\\

\subsection{Popriétés des images\index{image}\label{subsection:imageProp}}

Des images (calibrées ou non) peuvent être associées aux entités 3D. Dans le cas des images calibrées (i.e. pour lesquelles on dispose de toutes les informations de calibrage intrinsèques et extrinsèques par rapport aux données) il est possible de les afficher en surimpression de la vue 3D.\\
\par
Ces images peuvent être importées via les formats E57, ICM ou encore via l'import de fichiers Bundler (OUT).\\

\begin{figure}[!htb]
\begin{center}
\includegraphics[width=0.9\textwidth]{images/Partie2_Interface/CalibratedImageGlobal}
\caption{\label{fig:CalibratedImageFig}Vue d'une image calibrée en surimpression d'un nuage}
\end{center}
\end{figure}

\par
Les images ont toutes en commun la section \emph{Image} :
\begin{itemize}
\item \emph{Width} - largeur de l'image (en pixels)
\item \emph{Height} - hauteur de l'image (en pixels)
\item \emph{Alpha} - curseur permettant de régler la transparence (entre 0 et 100\%)
\end{itemize}

\par
La section \emph{Calibrated Image} est par contre reservée aux images calibrées :
\begin{itemize}
\item \emph{Apply viewport} - change les paramètres de la vue 3D associée à l'image pour coïncider avec ceux de l'appareil
\item \emph{f.o.v.} - \textit{field of view} ou ouverture angulaire (en degrés)
\item \emph{Optical center} - centre optique
\item \emph{Orientation} - direction de visée
\item \emph{Angle} - Angle de rotation autour de l'axe de visée (en degrés)\\
\end{itemize}

\subsection{Popriétés des capteurs laser (terrestres)\index{capteur, propriétés}\label{subsection:sensorProp}}

Les objets capteurs terrestres (\textit{Ground Based Lidar sensor}) ont une représentation \textit{in situ} symbolique (un cube sur un trépied). Ils ont aussi une section propre dans la fenêtre de propriétés (section \emph{GBL sensor}) :
\begin{itemize}
\item \emph{dPhi} - le pas angulaire selon l'axe de rotation principal (en radians)
\item \emph{dTheta} - le pas angulaire selon l'axe de rotation secondaire (en radians)
\item \emph{Uncertainty} - l'incertitude en profondeur (utilisée lors de la comparaison de nuages de points)
\item \emph{Display scale} - échelle relative de la représentation symbolique
\end{itemize}

\begin{figure}[!htb]
\begin{center}
\includegraphics[width=0.8\textwidth]{images/Partie2_Interface/gblSensorProperties}\\
\caption{\label{fig:gblSensorPropertiesFig}Représentation symbolique d'un capteur laser terrestre}
\end{center}
\end{figure}


\section{Modification interactive des entités}

\subsection{Segmentation manuelle}\index{segmentation manuelle}
\label{subsection:graphicalSegmentation}

L'outil \textit{segmentation manuelle} (ou \textit{segmentation graphique interactive}) est accesible via l'icône \includegraphics[height=15px]{images/Partie2_Interface/BtnSegment.png} de la barre d'outils supérieure (\textit{Main toolbar}). Il permet de "découper" manuellement à l'écran la ou les entités sélectionnées.
\\
\par
Cet outil permet en effet de définir un contour à l'écran (voir figure~\ref{fig:graphicalSegmentationExample}), puis de choisir si l'ont veut "garder" les points ou les triangles présents à l'intérieur ou à l'extérieur de
ce contour. Le processus est répétable à volonté, et les points/triangles rejetés sont cachés au fur et à mesure.
Si l'utilisateur valide sa segmentation, les entités sélectionnées sont chacune divisées en deux : une partie correspondant aux points/triangles sélectionnés et l'autre avec les points/triangles restants.\\
\par
Note : dans le cas des maillages, les triangles présents sur la frontière du contour ne sont pas \textit{découpés} à proprement parler (on ne garde que les triangles dont les 3 sommets sont totalement inclus dans la frontière, et les autres triangles sont considérés comme étant \textit{à l'extérieur}).\\
\par
Deux types de contours sont disponibles :
\begin{itemize}
\item contour de type 'polyligne' : l'utilisateur peut définir les sommets successifs d'une polyligne par clics gauches successifs à l'écran. Une fois le premier clic effectué, CloudCompare fait apparaitre en temps réel la forme de la polyligne en suivant le pointeur de la souris comme si celui-ci correspondait à un nouveau sommet. Un clic droit permet de figer le contour (nécessaire pour effectuer une segmentation - voir ci-dessous). Enfin, tout clic gauche intervenant après que le contour ait été figé réinitialise celui-ci.
\item contour de type 'rectangle' : ce mode permet de définir des contours rectangulaires à l'écran. Un simple clic droit permet de définir le premier coin du contour puis un second le coin opposé. Il n'est pas nécessaire de maintenir le bouton enfonçé entre les deux clics.\\
\end{itemize}

\begin{figure}[!htb]
\begin{centering}
\includegraphics[width=0.8\textwidth]{images/Partie2_Interface/graphicalSegmentation.jpg}
\caption{\label{fig:graphicalSegmentationExample}Outil de segmentation manuelle}
\end{centering}
\end{figure}

\par
En pratique, l'outil s'active dans la vue 3D courante (d'ailleurs seules les entités affichées dans cette vue sont pris en compte par CloudCompare). L'interface principale de CloudCompare est \textit{gelée} (la plupart des icônes et menus ne sont plus accessibles, mis à part les options d'affichage). Celle-ci est rétablie quand l'utilisateur quitte l'outil (dernière icône à droite en forme de croix rouge).\\
Une barre d'icônes apparaît dans le coin haut-droit de la vue 3D :
\begin{itemize}
\item la première icône permet de mettre en pause la segmentation (ce qui permet de récupérer le comportement normal de la souris et de faire tourner les entités 3D entre deux phases de contourage/découpe par exemple). Attention, si la segmentation est mise en pause, le contour actuellement dessiné disparaît. Et si une segmentation est validée (voir plus bas), le processus est automatiquement mis en pause.
\item l'icône suivante permet de choisir le mode de sélection (polyligne - par défaut - ou rectangulaire). En mode 'polyligne' il est toujours possible de définir un contour rectangulaire en maintenant la touche CTRL et le bouton gauche de la souris enfoncés.
\item l'icône suivante permet d'appliquer la segmentation selon le contour courant et en gardant affichés les points \emph{à l'intérieur} du contour. Les autres points sont alors cachés et la segmentation est mise en pause. Le contour doit être fermé.
\item l'icône suivante permet d'appliquer la segmentation inverse (en gardant affichés les points \emph{à l'extérieur} du contour).
\item l'icône suivante correspond à une réinitialisation complète de la sélection (tous les points redeviennent
visibles).
\item l'avant dernière icône permet de valider la segmentation globale et de quitter (les entités sélectionnées seront chacune scindées en deux).
\item enfin la dernière icône permet d'annuler la segmentation et de quitter (aucune opération ne sera effectuée).\\
\end{itemize}

\subsection{Rotation/translation manuelle}\index{translation manuelle}\index{rotation manuelle}
\label{subsection:graphicalTransformation}

L'outil \textit{transformation manuelle} (ou \textit{transformation graphique interactive}) est accessible via l'icône \includegraphics[height=15px]{images/Partie2_Interface/BtnMove.png}. Il permet d'appliquer une rotation et/ou une translation manuelle aux entités sélectionnées.\\
\par
A l'instar de l'outil de segmentation interactive (voir ci-dessus), l'outil s'active dans la vue 3D courante (et seules les entités affichées dans cette vue sont pris en compte par CloudCompare). L'interface principale de CloudCompare est aussi \textit{gelée}. Trois icônes apparaissent en haut à droite de la vue 3D :
\begin{center}
\includegraphics[width=0.15\textwidth]{images/Partie2_Interface/BtnTranslateRotate}\\
\end{center}
\begin{itemize}
\item la première permet de réinitialiser la transformation appliquées aux entités sélectionnées.
\item la seconde permet de valider la transformation et de quitter.
\item la dernière permet d'annuler la transformation et de quitter.\\
\end{itemize}

\par
La transformation se fait interactivement avec la souris, en utilisant les mêmes conventions que pour la
transformation du point de vue (Cf. section~\ref{subsection:Interactivité}) : le bouton gauche permet de tourner les entités (par rapport au centre de gravité des boites englobantes de toutes les unités sélectionnées)
et le bouton droit permet de translater les entités dans le plan de l'écran. Dans ce mode, seules les entités sélectionnées bougeront, les autres restant fixes. \\
\par
Note: si le processus est validé par l'utilisateur, la transformation effectivement appliquée est affichée dans la console (sous forme textuelle). \textit{Cette information peut-être récupérée par copier-coller.}



\section{Barres de progression}\index{progression, barre de}

Certains traitements ou opérations de \emph{CloudCompare} nécessitent un temps de traitement relativement long,
pouvant aller de quelques secondes à quelques minutes selon les capacités de l'ordinateur sur lequel l'application s'exécute, ainsi que le paramétrage de la fonction et la complexité inhérente au traitement effectué. La barre de progression est une fenêtre apparaissant durant les calculs non immédiats, donnant un aperçu de l'état d'avancement du traitement.\\

\begin{center}
\includegraphics[width=0.2\textwidth]{images/Partie2_Interface/ProgressBar}\\
\end{center}

Parmi les commandes affichant une barre de progression, certaines laissent la possibilité d'arrêter\index{arrêter un calcul} le calcul en cours d'exécution, via un bouton \emph{Cancel} (l'arrêt du processus n'est pas forcément immédiat, le système ne prenant en compte l'appui sur le bouton que lorsqu'il est suffisamment "disponible"). Lorsque ce bouton n'est pas visible, le traitement ne peut être interrompu avant la fin.

\section{Barres d'outils\index{outils, barre de}}

Vous trouverez ci dessous la liste des boutons disponibles dans les
diverses barres d'outils de \emph{CloudCompare}.

\begin{center}
\begin{longtable}{|>{\centering}m{0.07\textwidth}|>{\raggedright}m{0.4\textwidth}|>{\raggedright}m{0.5\textwidth}|}
\hline
\textbf{Bouton} & \textbf{Commande} & \textbf{Description}\tabularnewline
\hline
\endhead
\hline
\textbf{Bouton} & \textbf{Commande} & \textbf{Description}\tabularnewline
\hline
\endfirsthead
\hline
\hline
\multicolumn{3}{|c|}{Barre d'outils \emph{Main tools}}\tabularnewline
\multicolumn{3}{|c|}{\includegraphics[height=21px]{images/Partie2_Interface/MainToolBar}}\tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnOpen} & \index{ouvrir des objets}Open & cf. section \ref{subsection:openFile} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnSave} & Save & cf. section \ref{subsection:saveFile} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/pointPickingBtn} & Point picking & cf. section \ref{subsection:pointPicking}\tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/pointListPickingBtn} & Point list picking & cf. section \ref{subsection:pointListPicking}\tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnClone} & Clone & cf. section \ref{subsection:clone}\tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnFuse} & Fuse & cf. section \ref{subsection:fuse}\tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnDelete} & Delete & Supprimer les objets sélectionnés\tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnRegister} & Register & cf. section \ref{subsection:register} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnAlign} & Align & cf. section\ref{subsection:align} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnSubsample} & Subsample & cf. section \ref{subsection:subsample}\tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnSamplePts} & Sample points & cf. section \ref{subsection:samplePoints} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnCCDist} & Cloud/Cloud distance & cf. section \ref{subsection:cloud2cloudDist} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnCMDist} & Cloud/Mesh distance & cf. section \ref{subsection:cloud2meshDist} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnStatTest} & Statistical test & cf. section \ref{subsection:statisticalTest} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnLabel} & Label connected components & cf. section \ref{subsection:labelConnectedComponents} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnSegment} & Segment & cf. section \ref{subsection:graphicalSegmentation} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnMove} & Translate/Rotate & cf. section \ref{subsection:graphicalTransformation} \tabularnewline
\hline
\hline
\multicolumn{3}{|c|}{Barre d'outils \emph{Scalar Field Tools}}\tabularnewline
\multicolumn{3}{|c|}{\includegraphics[height=21px]{images/Partie2_Interface/SFToolBar}}\tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnHisto} & Show histogram & Afficher l'histogramme\index{histogramme} du champ scalaire courant\tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnComputeStat} & Compute statistical parameters & cf. section \ref{subsection:computeStatParams} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnFilterValue} & Filter by value & cf. section \ref{subsection:scalarFieldFilterByValue} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnGradient} & Gradient & cf. section \ref{subsection:scalarFieldGradient} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnGaussianFilter} & Gaussian filter & cf. section \ref{subsection:scalarFieldGaussianFilter} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnSFRemove} & Delete current scalar field & Supprimer le champ scalaire actif du nuage sélectionné\tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/BtnDiff} & Difference & cf. section \ref{subsection:scalarFieldDiff}\tabularnewline
\hline
\hline
\multicolumn{3}{|c|}{Barre d'outils \emph{Plugins}}\tabularnewline
\multicolumn{3}{|c|}{\includegraphics[height=21px]{images/Partie2_Interface/PluginToolBar}}\tabularnewline
\multicolumn{3}{|c|}{\textit{peut contenir des éléments différents que ceux listés ici (en fonction des plugins disponibles)}}\tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/cc_qEDL} & Eye Dome Lighting (shader) & cf. section \ref{subsection:qHPR} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/cc_qSSAO} & Screen Space Ambient Occlusion (shader) & cf. section \ref{subsection:qSSAO} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/cc_qHPR} & Hidden Points Removal & cf. section \ref{subsection:qHPR} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/cc_qKinect} & Kinect Cloud Capture & cf. section \ref{subsection:qKinect} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/cc_qPCL} & PCL bridge & cf. section \ref{subsection:qPCL} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/cc_qPCV} & ShadeVis Ambient Occlusion & cf. section \ref{subsection:qPCV} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/cc_qPoissonRecon} & Poisson Surface Reconstruction & cf. section \ref{subsection:qPoissonRecon} \tabularnewline
\hline
\includegraphics[height=15px]{images/Partie2_Interface/cc_qRANSAC_SD} & Ransac Shape Detection & cf. section \ref{subsection:qRansacSD} \tabularnewline
\hline
\hline
\multicolumn{3}{|c|}{Barre d'outils \emph{Viewing Tools}}\tabularnewline
\multicolumn{3}{|c|}{\includegraphics[height=21px]{images/Partie2_Interface/ViewToolBar}}\tabularnewline
\multicolumn{3}{|c|}{\textit{cette barre d'outils est présentée en détail en section \ref{Options-affichage}}}\tabularnewline
\hline
\end{longtable}
\par\end{center}

Les barres d'outils peuvent être affichées ou cachées via le sous-menu << Display > Toolbars >>.

\section{Raccourcis clavier\index{raccourcis clavier}}

Voici les raccourcis clavier disponibles dans \emph{CloudCompare} :
\begin{center}
\begin{longtable}{|>{\raggedright}p{0.1\textwidth}|>{\raggedright}p{0.15\textwidth}|>{\raggedright}p{0.45\textwidth}|>{\raggedright}p{0.15\textwidth}|}
\hline
\textbf{Touche(s)} & \textbf{Commande} & \textbf{Action} & \textbf{Remarque}\tabularnewline
\hline
\endhead
\hline
\textbf{Touche(s)} & \textbf{Commande} & \textbf{Action} & \textbf{Remarque}\tabularnewline
\hline
\endfirsthead
\hline
F1 & Help & \index{aide}affiche l'aide de \emph{CloudCompare} & \tabularnewline
\hline
F2 & Rename & \index{renommer}renomme l'entité sélectionnée & l'entité doit être sélectionnée dans l'arbre de navigation\tabularnewline
\hline
F3 & Toggle centered perspective & \index{point de vue}active / désactive la projection prespective avec centre de rotation au niveau des entités & cf. section \ref{Options-affichage}\tabularnewline
\hline
CTRL~+~F3 & New 3D View & ouvrir une nouvelle vue 3D & \tabularnewline
\hline
F4 & Toggle viewer based perspective & \index{point de vue}active / désactive la projection prespective avec centre de rotation confondu avec l'oeil de l'utilisateur & cf. section \ref{Options-affichage}\tabularnewline
\hline
CTRL~+~F4 & \index{Vue 3D}Close 3D View & fermer la vue 3D courante & \tabularnewline
\hline
F5 & Refresh & rafraîchir l'affichage & \tabularnewline
\hline
F6 & Toogle sun light & \index{eclairage@éclairage}active / désactive la source lumineuse globale & cf. section \ref{Options-affichage}\tabularnewline
\hline
F7 & Toggle custom light & active / désactive la source lumineuse secondaire & cf. section \ref{Options-affichage}\tabularnewline
\hline
F8 & Toggle console& \index{console}affiche / cache la console & \tabularnewline
\hline
F11 & Full screen & \index{plein écran}active / désactive l'affichage en plein écran & \tabularnewline
\hline
CTRL~+~O & Open & \index{ouvrir un fichier}pour ouvrir un fichier & cf. section \ref{subsection:openFile} \tabularnewline
\hline
CTRL~+~S & Open & \index{sauver un fichier}pour sauver les entités sélectionnées  & cf. section \ref{subsection:saveFile} \tabularnewline
\hline
ALT~+~C & Set Unique Color & pour appliquer une couleur unique aux entités sélectionnées  & cf. section \ref{subsection:setUniqueColor} \tabularnewline
\hline
CTRL~+~V & Save Viewport & \index{sauver un point de vue}créé un objet \emph{Point de vue} correspondant au point de vue actuel (vue 3D active)  & cf. section \ref{subsection:viewportProp} \tabularnewline
\hline
V & Toggle entity visibility & inverse l'état d'affichage des entités sélectionnées & cf. section \ref{subsection:commonProperties} \tabularnewline
\hline
N & Toggle normals visibility & inverse l'état d'affichage des normales des entités sélectionnées & cf. section \ref{subsection:commonProperties} \tabularnewline
\hline
C & Toggle normals visibility & inverse l'état d'affichage des couleurs des entités sélectionnées & cf. section \ref{subsection:commonProperties} \tabularnewline
\hline
S & Toggle normals visibility & inverse l'état d'affichage du champ scalaire (courant) des entités sélectionnées & cf. section \ref{subsection:commonProperties} \tabularnewline
\hline
Del/Suppr & Delete & \index{supprimer}supprime les entités sélectionnées & \tabularnewline
\hline
SHIFT~+~left clic & Create 2D Label & \index{etiquette, créer}créé une étiquette 2D standard associée au point désigné par le clic gauche (dans la vue 3D) & cf. section \ref{subsection:standardLabel} \tabularnewline
\hline
\end{longtable}
\par\end{center}
