Types de systèmes de coordonnées

Windows GDI+ utilise trois espaces de coordonnées : monde, page et appareil. Lorsque vous effectuez l’appel myGraphics.DrawLine(&myPen, 0, 0, 160, 80), les points que vous passez à la méthode Graphics::D rawLine ( 0, 0) et (160, 80) – se trouvent dans l’espace de coordonnées du monde. Avant que GDI+ puisse tracer la ligne à l’écran, les coordonnées passent par une séquence de transformations. Une transformation convertit les coordonnées mondiales en coordonnées de page, et une autre transformation convertit les coordonnées de page en coordonnées d’appareil.

Supposons que vous souhaitiez utiliser un système de coordonnées dont l’origine se trouve dans le corps de la zone cliente plutôt que dans le coin supérieur gauche. Supposons, par exemple, que vous souhaitiez que l’origine soit à 100 pixels du bord gauche de la zone cliente et à 50 pixels du haut de la zone cliente. L’illustration suivante montre un tel système de coordonnées.

capture d’écran d’une fenêtre contenant des axes de coordonnées étiquetés

Lorsque vous effectuez l’appel myGraphics.DrawLine(&myPen, 0, 0, 160, 80), vous obtenez la ligne illustrée dans l’illustration suivante.

capture d’écran de la fenêtre précédente, mais avec une ligne bleue qui s’étend en diagonale à partir de l’origine

Les coordonnées des points de terminaison de votre ligne dans les trois espaces de coordonnées sont les suivantes :

Espace Coordonnées du point de terminaison
World (Monde) (0, 0) à (160, 80)
Page (100, 50) à (260, 130)
Appareil (100, 50) à (260, 130)

 

Notez que l’espace de coordonnées de page a son origine dans le coin supérieur gauche de la zone cliente ; ce sera toujours le cas. Notez également que, comme l’unité de mesure est le pixel, les coordonnées de l’appareil sont identiques aux coordonnées de page. Si vous définissez l’unité de mesure sur autre chose que des pixels (par exemple, pouces), les coordonnées de l’appareil seront différentes des coordonnées de page.

La transformation qui mappe les coordonnées du monde aux coordonnées de page est appelée transformation du monde et est gérée par un objet Graphics . Dans l’exemple précédent, la transformation mondiale est une traduction de 100 unités dans le sens x et de 50 unités dans le sens y. L’exemple suivant définit la transformation mondiale d’un objet Graphics , puis utilise cet objet Graphics pour dessiner la ligne illustrée dans la figure précédente.

myGraphics.TranslateTransform(100.0f, 50.0f);

myGraphics.DrawLine(&myPen, 0, 0, 160, 80);

La transformation qui mappe les coordonnées de page aux coordonnées de l’appareil est appelée transformation de page. La classe Graphics fournit quatre méthodes pour manipuler et inspecter la transformation de page : Graphics::SetPageUnit, Graphics::GetPageUnit, Graphics::SetPageScale et Graphics::GetPageScale. La classe Graphics fournit également deux méthodes, Graphics::GetDpiX et Graphics::GetDpiY, pour examiner les points horizontaux et verticaux par pouce de l’appareil d’affichage.

Vous pouvez utiliser la méthode Graphics::SetPageUnit de la classe Graphics pour spécifier une unité de mesure. L’exemple suivant trace une ligne de (0, 0) à (2, 1) où le point (2, 1) est de 2 pouces à droite et de 1 pouce vers le bas du point (0, 0).

myGraphics.SetPageUnit(UnitInch);

myGraphics.DrawLine(&myPen, 0, 0, 2, 1);

Notes

Si vous ne spécifiez pas de largeur de stylet lors de la construction de votre stylet, l’exemple précédent dessine une ligne d’un pouce de large. Vous pouvez spécifier la largeur du stylet dans le deuxième argument du constructeur de stylet :

Pen myPen(Color(255, 0, 0, 0), 1/myGraphics.GetDpiX()).

 

Si nous partons du principe que le périphérique d’affichage a 96 points par pouce dans le sens horizontal et 96 points par pouce dans la direction verticale, les points de terminaison de la ligne de l’exemple précédent ont les coordonnées suivantes dans les trois espaces de coordonnées :

Espace Coordonnées du point de terminaison
World (Monde) (0, 0) à (2, 1)
Page (0, 0) à (2, 1)
Appareil (0, 0, to (192, 96)

 

Vous pouvez combiner les transformations du monde et de la page pour obtenir divers effets. Par exemple, supposons que vous souhaitiez utiliser des pouces comme unité de mesure et que l’origine de votre système de coordonnées se trouve à 2 pouces du bord gauche de la zone client et à 1/2 pouce du haut de la zone cliente. L’exemple suivant définit les transformations de monde et de page d’un objet Graphics , puis dessine une ligne de (0, 0) à (2, 1).

myGraphics.TranslateTransform(2.0f, 0.5f);
myGraphics.SetPageUnit(UnitInch);
myGraphics.DrawLine(&myPen, 0, 0, 2, 1);

L’illustration suivante montre le système de ligne et de coordonnées.

capture d’écran de la fenêtre précédente, mais plus large, avec les axes positionnés à gauche et étiquetés différemment

Si nous partons du principe que le périphérique d’affichage a 96 points par pouce dans le sens horizontal et 96 points par pouce dans la direction verticale, les points de terminaison de la ligne de l’exemple précédent ont les coordonnées suivantes dans les trois espaces de coordonnées :

Espace Coordonnées du point de terminaison
World (Monde) (0, 0) à (2, 1)
Page (2, 0,5) à (4, 1,5)
Appareil (192, 48) à (384, 144)