# VTK/Exemple introductif

Il faudrait la ranger dans un wikilivre où elle aurait sa place.
Pour le manuel de références, on se reportera à la page

#### Interpréteur

À partir d'un interpréteur de commandes Unix, on commence par lancer l'interpréteur de commandes VTK
C'est un interpréteur Tcl, avec de nouvelles commandes propres à VTK.

#### Fenêtre de rendu

Je vais commencer par créer une fenêtre de visualisation, que je vais appeler "laFenetreDeRendu". C'est la commande "vtkRenderWindow" qui permet cette opération (classe vtkRenderWindow)
"laFenetreDeRendu" est un objet VTK. Cela signifie entre autres que c'est une commande, le premier argument de la commande étant appelée "méthode de l'objet". Avant de vraiment voir la fenêtre, on va la redimensionner et lui attacher deux rendeurs, "ren1" et "ren2".
La méthode de définition de la dimension, c'est "SetSize" :

#### Rendeurs

Affreux néologisme, mais qui évite ici toute ambiguité. C'est ce qui agit permet le rendu, c'est à dire la réalisation graphique. La commande de création des rendeurs, c'est "vtkRenderer" (classe vtkRenderer)
Il nous faut placer ces rendeurs dans la fenêtre de rendu. C'est la méthode "SetViewport" qui définit les valeurs xmin, ymin, xmax, ymax. Il est à noter que la documentation de cette méthode ne figure pas à la page "vtkRenderer" mais à la page "vtkViewport" (classe vtkViewport.html) parce que "vtkRenderer" hérite de "vtkViewport".
Pour bien visualiser les deux rendeurs, je change la couleur de fond au moyen de la méthode "SetBackground". Les arguments sont les taux de rouge, vert, bleu
Je n'ai pas encore connecté la fenêtre de rendu et ses deux rendeurs. C'est la méthode "AddRenderer" qui établit la connexion.
Maintenant, il s'agit de voir le résultat. C'est la méthode "Render" de l'objet de type "vtkRenderWindow" qui permet de vraiment montrer la fenêtre et ses deux rendeurs dont le fond est coloré.

#### Un cube

Créons maintenant un volume. Une base de départ, c'est le cube. La commande qui crée un cube, c'est "vtkCubeSource" (classe vtkCubeSource)
Au départ, ce cube est centré à l'origine et il est de largeur unité.
Ces propriétés peuvent être modifiées par les méthodes "SetXLength", "SetCenter". Il y a aussi "SetYLength" et "SetZLength". En fait, ce cube est un parallélépipède.
La classe des objets "vtkCubeSource" hérite de la classe des objets polygonaux "vtkPolyDataSource". (class vtkPolyDataSource), comme les sphères, les flèches etc. Ces objets sont abstraits. Pour les rendre concrets, il faut les passer dans une moulinette de conditionnement de la classe "vtkPolyDataMapper" (classe vtkPolyDataMapper)

#### Le conditionneur

Je crée le conditionneur
et je récupère le canal de sortie de mon cube (méthode GetOutput) pour le brancher sur le canal d'entrée du conditionneur (méthode SetInput)

#### L'acteur

Ce conditionneur est connecté au rendeur par l'intermédiaire d'un acteur, classe "vtkActor". (classe vtkActor) Cet intermédiaire permet placer à un endroit précis, avec une orientation choisie les objets conditionnés. On commence par utiliser les paramètres par défaut.

#### Résumé des connexions

En résumé, on a une chaine d'objets connectés comme suit :
Cela parait compliqué mais permet une grande souplesse de manipulation.

#### Manipulation

Supposons que je veuille observer l'effet du changement de largeur du parallèlépipède. J'ai besoin d'appeler à la fois "unCube SetXLength ..." et "laFenetreDeRendu Render". Je crée une procédure Tcl qui fait les deux :
et un curseur de manipulation
Pour la manipulation du point de vue, on peut créer un objet d'interaction de la class vtkRenderWindowInteractor (classe vtkRenderWindowInteractor)
Il faut attacher le fenêtre de rendu à l'interacteur et initialiser celui-ci
Maintenant, les 3 boutons de la souris permettent de contrôler la visualisation du cube.

#### Opérations booléennes

Passons à des opérations booléennes (classe vtkImplicitBoolean)