3. Systèmes de coordonnées
Pour créer des graphiques 2D, on a bien sûr besoin d'un système de coordonnées qui
permet de définir un point à partir d'un couple de nombres (x,y). Dans les systèmes
graphiques classiques, on utilise un système de coordonnées écran où (x,y) sont des
nombres entiers identifiant un pixel ; l'origine du repère de coordonnées peut être le
coin supérieur gauche de l'écran ou, dans les systèmes à base de fenêtres, le coin
supérieur gauche du widget sur lequel on dessine.
Qu'en est-il dans le framework Graphics View ? Comme déjà signalé, il y a un
découplage fort entre la scène et les vues qui l'observent. Chacun de ces objets a en fait
son propre système de coordonnées.
Coordonnées scène — pour définir et positionner les éléments graphiques on
utilise le système de coordonnées de la QGraphicsScene où (x,y) sont des
nombres en virgule flottante (des float Python). L'origine et l'orientation du
repère scène n'ont pas vraiment d'importance ; ce qui compte, ce sont les positions
relatives des points les uns par rapport aux autres. Par ailleurs, les distances
calculées dans ce repère n'ont pas de sens absolu : une différence d'abscisses
valant 4 ne veut pas (forcément) dire 4 pixels.
Coordonnées vue — les QGraphicsView sont des widgets à part entière ; à ce
titre, ils ont un système de coordonnées écran classique, ayant le coin supérieur
gauche de la zone d'affichage comme origine. Les coordonnées sont entières (des
int Python) et ont pour unité le pixel.
Pour que la scène soit représentée sur une vue donnée, le framework va réaliser une
transformation de coordonnées, avant de faire le rendu graphique à l'écran.
Inversement, lorsque l'utilisateur clique sur la vue, le point (x,y) en coordonnées vue
sera traduit automatiquement en coordonnées scène (x',y') en faisant la transformation
inverse. Cette distinction entre les deux systèmes de coordonnées permet en fait de bien
séparer les choses : la scène n'est pas du tout modifiée par les opérations de défilement
ou de zoom demandées par l'utilisateur sur la vue ; cela permet notamment d'avoir
plusieurs vues sur la même scène avec, typiquement, différents facteurs de zoom.
Pour bien comprendre le positionnement des éléments QGraphicsItem sur la scène, il
reste un concept important à définir : celui de coordonnées relatives. Toute coordonnée
utilisée au sein d'un élément donné s'exprime dans un repère propre à cet élément. Pour
identifier ce repère, on utilise deux attributs définis par le programmeur sur tout
189
Précédent

- 190/494

Suivant