Types de systèmes de coordonnées

GDI+ utilise trois espaces de coordonnées : monde, page et appareil. Les coordonnées du monde sont les coordonnées utilisées pour modéliser un monde graphique particulier et sont les coordonnées que vous passez à des méthodes dans le .NET Framework. Les coordonnées de page font référence au système de coordonnées utilisé par une surface de dessin, telle qu’un formulaire ou un contrôle. Les coordonnées de l’appareil sont les coordonnées utilisées par l’appareil physique en cours de dessin, comme un écran ou une feuille de papier. Lorsque vous effectuez l’appel myGraphics.DrawLine(myPen, 0, 0, 160, 80), les points que vous passez à la DrawLine méthode et(0, 0)(160, 80)sont dans l’espace de coordonnées du monde. Avant que GDI+ puisse dessiner la ligne sur l’écran, les coordonnées passent par une séquence de transformations. Une transformation, appelée transformation mondiale, convertit les coordonnées du monde en coordonnées de page, et une autre transformation, appelée transformation de page, convertit les coordonnées de page en coordonnées d’appareil.

Transformations et systèmes de coordonnées

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

Illustration of a coordinate system.

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

Illustration of a line in the coordinate system.

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

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

Notez que l’espace de coordonnées de page a son origine en haut à gauche de la zone cliente ; ce sera toujours le cas. Notez également que, étant donné que 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 une valeur autre que les pixels (par exemple, pouces), les coordonnées de l’appareil sont différentes des coordonnées de la page.

La transformation mondiale, qui mappe les coordonnées du monde aux coordonnées de page, est conservée dans la Transform propriété de la Graphics classe. Dans l’exemple précédent, la transformation mondiale est une traduction de 100 unités dans la direction x et 50 unités dans la direction y. L’exemple suivant définit la transformation mondiale d’un Graphics objet, puis utilise cet Graphics objet pour dessiner la ligne indiquée dans la figure précédente :

myGraphics.TranslateTransform(100, 50);
myGraphics.DrawLine(myPen, 0, 0, 160, 80);
myGraphics.TranslateTransform(100, 50)
myGraphics.DrawLine(myPen, 0, 0, 160, 80)

La transformation de page mappe les coordonnées de page aux coordonnées de l’appareil. La Graphics classe fournit les propriétés et PageScale les PageUnit propriétés permettant de manipuler la transformation de page. La Graphics classe fournit également deux propriétés en lecture seule, et DpiY, DpiX pour examiner les points horizontaux et verticaux par pouce de l’appareil d’affichage.

Vous pouvez utiliser la PageUnit propriété de la Graphics classe pour spécifier une unité de mesure autre que le pixel.

Remarque

Vous ne pouvez pas définir la PageUnit propriété Worldsur , car il ne s’agit pas d’une unité physique et provoquera une exception.

L’exemple suivant dessine une ligne de (0, 0) à (2, 1), où le point (2, 1) est de 2 pouces à droite et de 1 pouce à partir du point (0, 0) :

myGraphics.PageUnit = GraphicsUnit.Inch;
myGraphics.DrawLine(myPen, 0, 0, 2, 1);
myGraphics.PageUnit = GraphicsUnit.Inch
myGraphics.DrawLine(myPen, 0, 0, 2, 1)

Remarque

Si vous ne spécifiez pas de largeur de stylet lorsque vous construisez 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 Pen constructeur :

Pen myPen = new Pen(Color.Black, 1 / myGraphics.DpiX);
Dim myPen As New Pen(Color.Black, 1 / myGraphics.DpiX)

Si nous partons du principe que l’appareil d’affichage a 96 points par pouce dans la direction horizontale 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 de coordonnées Coordonnées de point de terminaison
Monde (0, 0) à (2, 1)
Page (0, 0) à (2, 1)
Device (0, 0) à (192, 96)

Notez que, étant donné que l’origine de l’espace de coordonnées du monde se trouve en haut à gauche de la zone cliente, les coordonnées de page sont identiques aux coordonnées mondiales.

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

myGraphics.TranslateTransform(2, 0.5f);
myGraphics.PageUnit = GraphicsUnit.Inch;
myGraphics.DrawLine(myPen, 0, 0, 2, 1);
myGraphics.TranslateTransform(2, 0.5F)
myGraphics.PageUnit = GraphicsUnit.Inch
myGraphics.DrawLine(myPen, 0, 0, 2, 1)

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

Illustration of a line and coordinate system.

Si nous partons du principe que l’appareil d’affichage a 96 points par pouce dans la direction horizontale 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 de coordonnées Coordonnées de point de terminaison
Monde (0, 0) à (2, 1)
Page (2, 0,5) à (4, 1,5)
Device (192, 48) à (384, 144)

Voir aussi