Tipi di sistemi di coordinate

Aggiornamento: novembre 2007

In GDI+ vengono utilizzati tre spazi di coordinate: complessivo, pagina e periferica. Le coordinate complessive vengono utilizzate per la modellazione di un particolare grafico e in .NET Framework vengono passate ai metodi. Le coordinate di pagina fanno riferimento al sistema di coordinate utilizzato su una superficie di disegno, ad esempio form o controllo. Le coordinate di periferica vengono utilizzate dalla periferica fisica su cui si disegna, ad esempio uno schermo o un foglio di carta. Quando si effettua una chiamata myGraphics.DrawLine(myPen, 0, 0, 160, 80), al metodo DrawLine vengono passati i punti (0, 0) e (160, 80) inclusi nello spazio di coordinate complessivo. Prima che in GDI+ sia possibile tracciare le linee sullo schermo, le coordinate subiscono una sequenza di trasformazioni. Una trasformazione, chiamata trasformazione complessiva, converte le coordinate complessive in coordinate di pagina, mentre un'altra trasformazione, chiamata trasformazione di pagina, converte le coordinate di pagina in coordinate di periferica.

Trasformazioni e sistemi di coordinate

Si supponga che sia necessario effettuare operazioni con un sistema di coordinate la cui origine si trova nel corpo dell'area client anziché nell'angolo superiore sinistro. Si supponga ad esempio che l'origine desiderata si trovi a 100 pixel di distanza dal margine dell'area client e a 50 pixel di distanza dall'estremità superiore dell'area client. Nell'immagine seguente viene mostrato tale sistema di coordinate.

Sistema di coordinate

Quando si effettua una chiamata myGraphics.DrawLine(myPen, 0, 0, 160, 80), si ottengono le linee visualizzate nell'immagine seguente.

Sistema di coordinate

Le coordinate dei punti finali della linea nei tre spazi di coordinate sono le seguenti

World

Da (0, 0) a (160, 80)

Page

Da (100, 50) a (260, 130)

Periferica

Da (100, 50) a (260, 130)

Si noti che l'origine dello spazio di coordinate della pagina si trova nell'angolo superiore sinistro dell'area client. Tale valore sarà sempre costante. Si noti inoltre che le coordinate della periferica corrispondono alle coordinate della pagina, poiché l'unità di misura utilizzata è il pixel. Se si utilizza un'unità di misura diversa dai pixel (ad esempio i pollici), le coordinate della periferica non corrisponderanno alle coordinate della pagina.

La trasformazione complessiva, che consente di associare le coordinate complessive alle coordinate della pagina, è contenuta nella proprietà Transform della classe Graphics. La trasformazione complessiva riportata nell'esempio precedente consiste in una traslazione di 100 unità nella direzione x e 50 unità nella direzione y. L'esempio seguente consente di impostare la trasformazione complessiva di un oggetto Graphics e di utilizzare tale oggetto per tracciare la linea mostrata nell'immagine precedente:

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

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

La trasformazione di pagina consente di associare le coordinate della pagina alle coordinate della periferica. Nella classe Graphics sono disponibili le proprietà PageUnit e PageScale per la modifica della trasformazione di pagina. Nella classe Graphics sono inoltre disponibili due proprietà di sola lettura, DpiX e DpiY, che consentono di esaminare i punti in orizzontale e verticale per pollice della periferica di visualizzazione.

È possibile utilizzare la proprietà PageUnit della classe Graphics per specificare un'unità di misura diversa dal pixel.

Nota:

Non è possibile impostare la proprietà PageUnit su World, in quanto non si tratta di un'unità fisica e verrà generata un'eccezione.

L'esempio seguente consente di tracciare una linea che unisce il punto (0, 0) e il punto (2, 1), dove il punto (2, 1) si trova 2 pollici a destra e 1 un pollice sotto rispetto al punto (0, 0):

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

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

Se quando si costruisce la penna non si specifica alcuno spessore, la linea tracciata nell'esempio seguente avrà spessore pari a un pollice. È possibile specificare lo spessore della penna nel secondo argomento del costruttore Pen.

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

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

Se si suppone che nella periferica di visualizzazione siano disponibili 96 punti per pollice in direzione orizzontale e 96 punti per pollice in direzione verticale, i valori relativi ai punti finali della linea dell'esempio nei tre spazi di coordinate saranno i seguenti:

World

Da (0, 0) a (2, 1)

Page

Da (0, 0) a (2, 1)

Periferica

Da (0, 0) a (192, 96)

Si noti che le coordinate di pagina corrispondono alle coordinate complessive, poiché l'origine dello spazio di coordinate complessivo si trova nell'angolo superiore sinistro dell'area client.

È possibile combinare trasformazioni complessive e di pagina per ottenere svariati effetti. Si supponga ad esempio che si desideri utilizzare i pollici come unità di misura e che l'origine del sistema di coordinate si trovi a 2 pollici dal margine sinistro dell'area client e a 1/2 pollice dall'estremità superiore dell'area client. L'esempio seguente consente di impostare le trasformazioni complessiva e di pagina di un oggetto Graphics e di tracciare una riga dal punto (0, 0) al punto (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);

Nell'immagine seguente vengono mostrati la linea e il sistema di coordinate.

Sistema di coordinate

Se si suppone che nella periferica di visualizzazione siano disponibili 96 punti per pollice in direzione orizzontale e 96 punti per pollice in direzione verticale, i valori relativi ai punti finali della linea dell'esempio nei tre spazi di coordinate saranno i seguenti:

World

Da (0, 0) a (2, 1)

Page

Da (2, 0,5) a (4, 1,5)

Periferica

Da (192, 48) a (384, 144)

Vedere anche

Concetti

Rappresentazione tramite matrici delle trasformazioni

Altre risorse

Sistemi di coordinate e trasformazioni