Title: Cours Vtk
1Cours Vtk
- Marcela Hernández Hoyos
- CREATIS
- Janvier 2000
2Contenu
- Quest-ce que cest ?
- Pourquoi VTK?
- Documentation
- Syntaxe
- POO Quelques concepts de base
- Modèles d'objets VTK
- Modèle de visualisation
- Modèle graphique
- Modèle de traitement
- Exemple d'une application
- Tcl/Tk Vtk C
3Qu'est-ce que c'est ?
Visualization ToolKit
Composant de communication avec des langages
interpretés Tcl/Tk, Java, Python
Niveau d'application (C,Tcl/Tk)
VTK
Librairie de classes C (compilée)
Librairie graphique (openGL)
4Pour quoi VTK?
- Gratuit
- Code source C
- Vous avez le contrôle
- POO
- Extensible
- Possibilité de création de nouvelles classes
- Plate-forme/librairie indépendante
- Algorithmes avancés et très utiles
- Conversion des données en images
- Nombreux utilisateurs liste de discussion
5Documentation
- Livres
- The VisualizationToolkit, 2nd edition
- Schroeder, Martin, Lorenson. Prentice Hall.
- VTK User's Guide
- Schroeder, Martin. Kitware, Inc.
- Page web
- http//www.kitware.com /vtk.html
- Software, FAQs, listes de discussion, exemples,
links, etc - Autres exemples
- Répertoire d'installation VTK
- graphics/examplesTcl
D. Fibroulet
6Syntaxe utilisée dans ces notes
- Pour les méthodes (fonctions)
- Description d'une méthode
- Pseudo-syntaxe de la méthode
- code Tcl/Tk
- Exemple
- Ajouter / Supprimer un renderer
- AddRenderer (vtkRenderer)
- RemoveRenderer (vtkRenderer)
- vtkRendererWindow myWindow
- vtkRenderer myRenderer
- myWindow AddRenderer myRenderer
7POO ???
VTK
Librairie de classes C (compilée)
8Programmation Orientée Objet
9POO Quelques concepts de base
Structure de données Champs
Fonctions
Programmation procedurale
Variables
Classe
POO
Méthodes
Attributs
Objet
10Exemple - Programmation procédurale
Structure de données
point2D p2D point3D p3D . . . p2D malloc
p3D malloc . . . printPoint2D(p2D) printP
oint3D(p3D)
typedef struct int x int y
point2D typedef struct int x int y
int z point3D void printPoint2D(point2D p)
printf("xd, yd",p-gtx, p-gty) void
printPoint3D(point3D p) printf("xd,
yd,zd",p-gtx, p-gty,p-gtz)
Variable
Champs
Fonction
Appel aux fonctions
11Exemple - POO
point2D p2D point2D New point3D p3D
point3D New . . . . . . p2D -gt
print() p3D-gtprint()
Classe
class point2D public void print()
point2D New() protected int x int
y class point3D public void print()
point3D New() protected int x int y
int z
Objets
Méthodes
Attributs
Appel aux méthodes
12VTKUn système de Visualisation Orienté Objet
13Exemple - Sphère
catch load vtktclsource vtkInt.tclsource
colors.tcl vtkSphereSource sphere sphere
SetRadius 5 sphere SetThetaResolution 36
sphere SetPhiResolution 18 vtkPolyDataMapper
isoMapper isoMapper SetInput sphere
GetOutput isoMapper ScalarVisibilityOn vtkAc
tor isoActor isoActor SetMapper isoMapper
eval isoActor GetProperty SetColor
peacock vtkRenderer ren1 ren1 AddActor
isoActor ren1 SetBackground 1 1
1 vtkRenderWindow renWin renWin AddRenderer
ren1 renWin SetSize 500 500 vtkRenderWindowIn
teractor iren iren SetRenderWindow renWin
iren Initialize
Source
Mapper
Actor
Renderer
Render Window
14Exemple - Volume
15Vtk - Système de Visualisation
- Lecture, traitement et affichage de données sous
la forme d'images - Deux étapes
- Conversion de données en primitives graphiques
- Points, lignes, triangles,
- Conversion de données graphiques en images
- Affichage des primitives graphiques à l'écran
- Les objets VTK sont organisés en trois modèles
- Modèle de visualisation
- Étape 1 Représentation géométrique des données
- Modèle graphique
- Étape 2 Rendu de la représentation géométrique
- Modèle de traitement
- Traitement d'images
16Vtk - Système de Visualisation
Modèle de Visualisation
Données
Source (Procedural)
Création de nouvelles données
Modèle graphique
Modèle de Traitement
Source (Reader)
Mapper
Lecture
Transformation des données en primitives
graphiques
Filter
Affichage
Mapper (Writer)
Écriture
17Modèle de Visualisation
18Modèle de visualisation
- Objectif
- Transformer les données en primitives graphiques
- Construire la représentation géométriques des
objets à afficher - Basé sur un paradigme "pipeline"
- La transformation des données est décomposée en
modules - Chaque module réalise une opération précise sur
les données (transformation) - Les modules sont connectés entre eux pour former
un réseau ou pipeline - Les données circulent à l'intérieur du pipeline,
en passant d'un module à l'autre
19Modèle de visualisation
- Deux types d'objets
- Objets "data"
- Données qui circulent dans le pipeline
- Appelés datasets
- Objets "process"
- Modules ou composants algorithmiques du pipeline
Process A
Process B
Process C
entrée
sortie
dataset A
dataset B
20Objets Process
Objet Process
Source
Filter
Mapper
- Démarre le pipeline
- Lecture de données externes (images)
- Génération de nouvelles données (graphiques)
- Traite les objets donnée
- Reçoit une ou plusieurs entrées
- Génère une ou plusieurs sorties
- Finit le pipeline
- Génère des primitives graphiques
- Communique le pipeline de visualisation avec le
modèle graphique
? 1 entrée
aucune entrée
? 1 entrée
Source
Filter
Mapper
? 1 sortie
? 1 sortie
aucune sortie
21Pipeline de visualisation
Source
Filter
objet data
objet data
Modèle graphique
Mapper
Source
Filter
Filter
objet data
objet data
objet data
22Exemple
catch load vtktclsource vtkInt.tclsource
colors.tcl vtkSphereSource sphere sphere
SetRadius 5 sphere SetThetaResolution 36
sphere SetPhiResolution 18 vtkPolyDataMapper
isoMapper isoMapper SetInput sphere
GetOutput isoMapper ScalarVisibilityOn vtkAc
tor isoActor isoActor SetMapper isoMapper
eval isoActor GetProperty SetColor
peacock vtkRenderer ren1 ren1 AddActor
isoActor ren1 SetBackground 1 1
1 vtkRenderWindow renWin renWin AddRenderer
ren1 renWin SetSize 500 500 vtkRenderWindowIn
teractor iren iren SetRenderWindow renWin
iren Initialize
Source
Mapper
Actor
Renderer
Render Window
23Objets Data ou Datasets
objet data ou dataset
- Un dataset est composé de
- Structure topologique (liste de cells)
- Détermine la forme de l'objet (triangle, sphère,
maillage, etc.) - Ne varie pas avec certaines transformations
géométriques (translation, rotation et changement
d'échelle) - Un objet contient une ou plusieurs cells
- Structure géométrique (liste de points)
- Instanciation de la structure topologique
- Coordonnées des points qui conforment les cells
- Attributs
- Information complémentaire associée aux points ou
aux cells (température en un point, masse d'une
cell, etc)
24Cells
- Atomes qui conforment un dataset
- Une cell est une organisation topologique de
points (coordonnées x,y,z) - Définie par
- Type
- Liste ordonnée de points
Tétraèdre
Hexaèdre
25Types de cells
- Vertex
- Polyvertex
- Line
- Polyline
- Triangle
- Triangle Strip
- Quadrilateral
- Pixel
- Polygon
- Tetrahedron
- Hexahedron
- Voxel
26Types de Datasets
Points structurés
Grille rectiligne
vtkStructuredPoints Images 2D et 3D
vtkRectilinearGrid Maillage carré
Grille structurée
Données polygonales
vtkStructuredGrid Maillage 2D
vtkPolyData Points, lignes, polygones
Grille non structurée
vtkUnstructuredGrid Maillage 2D / 3D non structuré
27Exemples de maillages
- Les cells peuvent avoir des différentes formes et
tailles - 2D triangles, quadrilatéraux, ...
- 3D tétraèdres, hexaèdres, pyramides,
- Les maillages peuvent contenir un ou plusieurs
type de cells
28Type des attributs associés aux points et aux
cells d'un dataset
Scalaire
Vecteur
Normal
vtkScalars Valeur simple
vtkVectors Magnitude et direction (3D)
vtkNormals Direction (3D)
s
(u,v,w)
(nx,ny,nz) n 1
Coordonnée de texture
Tenseur
t
vtkTCoords Correspondance entre un indice et une
carte de textures
vtkTensors Matrice n x n
2D (u,v) 3D (u,v,w)
s
Tableau de données
Tableau 0
Tableau 1
Tableau n-1
. . .
vtkFieldData Tableau de tableaux Chaque tableau
peut être de différent type
29Modèle Graphique
30Modèle graphique
- Objectif
- Transformer des données graphiques en images et
les afficher à l'écran - Regroupe les caractéristiques d'un système
graphique 3D (infographie) - Les principales classes VTK du modèle graphique
- Render Window
- Renderer
- Light
- Camera
- Actor
- Property
- Transform
- Mapper
31Modèle graphique
Render Window
Renderer
Camera Light
Actor
Property Transform Mapper
32Render Window
Renderer
- Gère la(s) fenêtre(s) dans laquelle on va
afficher les images ou les objets graphiques - Fonctionnalité par défaut d'une fenêtre windows
- Indépendante des dispositifs graphiques
- Gère l'ensemble de renders contenus dans la
fenêtre - Plusieurs renderers peuvent dessiner dans une
même fenêtre (render window) pour créer une scène
(image finale)
33Classe vtkRenderWindow
- Méthodes
- Ajouter / Supprimer un renderer
- AddRenderer (vtkRenderer)
- RemoveRenderer (vtkRenderer)
- Configuration de l'écran
- FullScreenOn ()
- FullScreenOff ()
- BordersOn ()
- BordersOff ()
34Renderer
- Coordonne la(s) source(s) de lumière, la camera
et les actors pour générer l'image d'une scène - Une scène comporte
- Au moins un actor, une camera et une source de
lumière - Si les objets camera et light ne sont pas
définis, ils sont créés automatiquement par le
renderer
Light représente et manipule l'éclairage de la
scène (en 3D)
Actor ce que l'on voit
Camera détermine comment projeter une
géométrie 3D sur une image 2D
35Classe vtkRenderer
- Méthodes
- Ajouter/Supprimer des actors et des lights
- AddActor (vtkActor) / RemoveActor (vtkActor)
- AddLight (vtkLight) / RemoveLight (vtkLight)
- Déterminer la camera à utiliser pour le rendu
- SetActiveCamera (vtkCamera)
- Créer l'image résultant du rendu
- Render
- Conversion de coordonnées
- ViewToWorld (float, float, float) / void
WorldToView (float, float, float)
y
y
Monde
Vue
x
x
z
36Classe vtkLight
- Méthodes
- Fixer la couleur de la lumière
- SetColor (float ,float ,float) / GetColor ()
- Déterminer la position de la source
- SetPosition (float ,float ,float ) / GetPosition
() - Définir l'intensité (de 0 à 1)
- SetIntensity (float ) / GetIntensity ()
- Allumer / Éteindre
- SwitchOn ()
- SwitchOff ()
37Classe vtkCamera
- Méthodes
- Fixer la position de la camera en coordonnées
monde - SetPosition (float ,float ,float ) / GetPosition
() - Déterminer la position du point focal de la
camera - SetFocalPoint (float ,float ,float ) /
GetFocalPoint () - Calculer la distance entre la position de la
camera et celle du point focal - ComputeDistance ()
Plan arrière de clipping
Direction de projection
Point focal
Position
Plan frontal de clipping
38Actor
Actor
- Objet dessiné par un renderer dans une scène
- Un actor ne représente pas directement sa
géométrie ni son apparence - Celles-ci sont définies en termes de
- Property
- Mapper
- Transform
39Classe vtkActor
- Méthodes
- Associer l'objet property qui détermine les
propriétés d'apparence de l'actor - SetProperty (vtkProperty) / GetProperty ()
- Un objet property est crée par défaut
- Plusieurs actors peuvent partager le même objet
property - Associer l'objet mapper qui détermine la
géométrie de l'actor - SetMapper (vtkMapper) / GetMapper ()
- Définir la matrice de transformations qui
détermine l'échelle, la position et l'orientation
de l'actor - SetUserMatrix (vtkMatrix4x4 )
- Généralement
- Il ne faut pas définir explicitement les
propriétés ni les transformations. Des valeurs
par défaut son déterminées lors de la création de
l'actor
40Property
- Détermine l'apparence de la surface d'un actor
- Classe VTK vtkProperty
- Méthodes
- Représentation de la géométrie de la surface
- SetRepresentationToPoints ()
- SetRepresentationToWireframe ()
- SetRepresentationToSurface ()
- Déterminer la couleur de la surface
- SetColor (float ,float ,float )
- Fixer l'opacité de la surface (0 transparent, 1.0
opaque) - SetOpacity (float )
41Mapper
- Chargé du rendu (rendering)
- Lie le modèle de visualisation et le modèle
graphique - Détermine la géométrie de l'actor
- Combinaison de points (sommets), lignes,
polygones, etc - Définit la couleur des sommets
- Fait référence à une palette de couleurs
- Tout actor doit avoir un mapper associé pour
pouvoir être affiché à l'écran - Classes VTK vtkMapper, vtkPolyDataMapper,
vtkDataSetMapper
42Classe vtkPolyDataMapper
- Méthodes
- Spécifier les données d'entrée au mapper (données
à afficher) - SetInput (vtkPolyData)
- Associer la palette de couleurs
- SetLookupTable (vtkLookupTable)
- Créer une palette de couleurs par défaut
- CreateDefaultLookupTable ()
- Déterminer si le rendu est fait de manière
immédiate ou pas - ImmediateModeRenderingOn ()
- ImmediateModeRenderingOff ()
43Transform
- Garde une pile de matrices de transformation
- Une seule matrice courante de transformation
- Fournit de méthodes pour effectuer les opérations
de translation, changement d'échelle et rotation
ë
û
Translation (tx,ty,tz)
Chgt d'échelle (sx,sy,sz)
Rotation q autour de x
44Classe vtkTransform
- Méthodes
- Créer d'une matrice identité
- Identity ()
- Créer une matrice de rotation et la concaténer
avec la matrice courante de transformation - RotateX (float), RotateY (float ), RotateZ (float
) - Changer d'échelle la matrice courante de
transformation - Scale (float ,float ,float )
- Déplacer la matrice courante de transformation
- Translate (float ,float ,float )
- Transposer la matrice courante de transformation
- Transpose ()
- Invertir la matrice courante de transformation
- Inverse ()
45Modèle de Traitement
46Modèle de traitement
- Objectif
- Traitement d'images
- Implémentation particulière du pipeline de
visualisation pour le traitement de datasets de
type "Points structurés" (vtkStructuredPoints) - 2D
- Images
- Bitmaps
- 3D
- Volumes (piles de datasets 2D)
- Classes spécialisées pour
- Lecture
- Ecriture
47Lecture d'images (2D et 3D)
- vtkImageReader
- Lecture de n'importe quel type d'image
- Il faut indiquer les dimensions et le type de
l'image (pour sauter l'entête) - Les volumes sont lus comme une séquence d'images
- Possibilité de lire un région d'intérêt (ROI/VOI)
- vtkBMPReader
- Images BMP
- vtkTIFFReader
- Images TIFF
48Exemple de lecture
- vtkImageReader monReader
- monReader SetDataByteOrderToLittleEndian
- monReader SetDataExtent 0 255 0 255 34 85
- monReader SetFilePrefix "000"
- monReader SetFilePattern "sd.ima"
- monReader SetDataScalarTypeToUnsignedShort
- monReader Update
49Écriture d'images
- vtkImageWriter
- Ecriture de n'importe quel type d'image
- Le type de l'image à sauvegarder est le même que
celui de l'image en entrée - Les dimensions déterminent si les données doivent
être sauvegardés en plusieurs fichiers - vtkBMPWriter
- vtkTIFFWriter
50Affichage d'images
- Mapper
- vtkImageMapper
- vtkDataSetMapper
- vtkPolyDataMapper
- vtkVolumeMapper
- Actor
- vtkActor
- vtkActor2D
- Renderer
- vtkRenderer
51Traitement
- vtkImageAnisotropicDiffusion2D/3D
- Lissage par la méthode de diffusion anisotrope
- vtkImageContinuousDilate3D (vtkImageContinuousErod
e3D) - Opérations morphologiques de dilatation/érosion
- vtkImageCityBlockDistance
- Carte de distances 1,2 or 3D
- vtkImageFFT
- Transformée de Fourier
- vtkImageGaussianSmooth
- Filtrage gaussien
52Traitement
- vtkImageGradient
- Gradient de l'image
- vtkImageMarchingCubes
- Génération d'isosurfaces (rendu de surfaces)
- vtkImageMedian3D
- Filtrage médian
- vtkImageResample
- Re-échantillonnage d'une image avec interpolation
linaire - vtkImageSkeleton2D
- Squelettisation d'images 2D
53Traitement
- vtkImageSobel2D/3D
- Opérateur de sobel
- vtkImageThreshold
- Seuillage
- vtkVolumeRayCastIsosurfaceFunction
- Rendu surfacique d'un volume
- vtkVolumeRayCastMIPFunction
- Création de l'image MIP (maximum intensity
projection) d'un volume
54Exemple d'une Application
55Tcl/Tk VTK C
56Vtk C
- VTK est une librairie de classes C
- Aucun problème de communication
- Pour programmer
- Inclure les fichier "headers" correspondants (.h)
- Programmer en C
include "vtk.h" include "vtkImageReader.h" incl
ude "vtkImageData.h" include "vtkImageCache.h" i
nclude "vtkScalars.h" extern "C" include
"idvol.h"
Pour programmer en même temps avec libido (C)
57VTK et Tcl/Tk
VTK
Composant de communication avec des langages
interpretés Tcl/Tk, Java, Python
Tcl/Tk
Librairie de classes C (compilée)
- En Tcl
- Charger la librairie (load vtktcl)
- Pour chaque classe VTK
- Il existe une nouvelle commande Tcl pour créer
les objets - Une fois l'objet est crée, le nom de l'objet
devient une commande pour appeler ses méthodes
58Exemple
Charger la librairie
- load vtktcl
- vtkActor actorToto
- actorToto print
- actorToto SetDebug 1
- puts actorToto GetDebug
- set property actorToto GetProperty
- property Print
- property SetColor 1 0 0
- puts property GetColor
Commande Tcl vtkActor
Nouvelle commande actorToto
Nouvelle commande property
59Interface graphique du logiciel
- Normalement
- Les "Render Window" sont des fenêtres
indépendantes - Le logiciel aura une fenêtre séparée pour chaque
render window - Pour combiner les Render Window (de VTK) et les
objets graphiques d'interface Tk dans une seule
fenêtre - Widget vtkTkRenderWidget
- C'est un widget Tk comme les autres
- Possède une méthode spéciale pour communiquer
avec VTK
vtkRenderer monRenderer vtkTkRenderWidget
.maFenetre -width 300 -height 300 set RenWin
.maFenetre GetRenderWindow RenWin AddRenderer
monRenderer
60Communication avec DLLs
Logiciel Tcl/Tk
DLL C avec VTK
Création d'un objet VTK en Tcl/Tk et manipulation
en C
- Récupérer le pointeur de l'objet (adresse) avec
la méthode print - Passer l'adresse à la fonction de la dll (avec le
cast correspondant)
VTK
VTK