Condividi tramite


Tipi di sistemi di coordinate

GDI+ usa tre spazi di coordinate: mondo, pagina e dispositivo. Le coordinate mondiali sono le coordinate usate per modellare un particolare mondo grafico e sono le coordinate passate ai metodi in .NET Framework. Le coordinate della pagina si riferiscono al sistema di coordinate utilizzato da una superficie di disegno, ad esempio una form o un controllo. Le coordinate del dispositivo sono le coordinate utilizzate dal dispositivo fisico su cui viene disegnato, ad esempio uno schermo o un foglio di carta. Quando si effettua la chiamata myGraphics.DrawLine(myPen, 0, 0, 160, 80), i punti passati al metodo DrawLine,(0, 0) e (160, 80), si trovano nello spazio delle coordinate mondiali. Prima che GDI+ possa disegnare la linea sullo schermo, le coordinate passano attraverso una sequenza di trasformazioni. Una trasformazione, denominata trasformazione globale, converte le coordinate del mondo in coordinate di pagina e un'altra trasformazione, denominata trasformazione pagina, converte le coordinate della pagina in coordinate del dispositivo.

Trasformazioni e sistemi di coordinate

Supponiamo che tu voglia lavorare con un sistema di coordinate con origine nel centro dell'area cliente anziché nell'angolo superiore sinistro. Si supponga, ad esempio, che si desideri che l'origine sia 100 pixel dal bordo sinistro dell'area client e 50 pixel dalla parte superiore dell'area client. La figura seguente mostra un sistema di coordinate di questo tipo.

Illustrazione di un sistema di coordinate.

Quando si effettua la chiamata myGraphics.DrawLine(myPen, 0, 0, 160, 80), si ottiene la riga illustrata nella figura seguente.

Illustrazione di una linea nel sistema di coordinate.

Le coordinate degli endpoint della linea nei tre spazi di coordinate sono le seguenti:

Spazio delle coordinate Coordinate del punto finale
Mondo (0, 0) a (160, 80)
Pagina (100, 50) a (260, 130)
Dispositivo (100, 50) a (260, 130)

Si noti che lo spazio delle coordinate della pagina ha l'origine nell'angolo superiore sinistro dell'area client; sarà sempre così. Si noti anche che poiché l'unità di misura è il pixel, le coordinate del dispositivo sono uguali alle coordinate della pagina. Se si imposta l'unità di misura su un valore diverso da pixel(ad esempio pollici), le coordinate del dispositivo saranno diverse dalle coordinate della pagina.

La trasformazione globale, che mappa le coordinate del mondo alle coordinate della pagina, è contenuta nella proprietà Transform della classe Graphics. Nell'esempio precedente, la trasformazione globale è una conversione di 100 unità nella direzione x e 50 unità nella direzione y. Nell'esempio seguente viene impostata la trasformazione del mondo di un oggetto Graphics e quindi viene utilizzato l'oggetto Graphics per disegnare la linea illustrata nella figura 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 della pagina mappa le coordinate della pagina a quelle del dispositivo. La classe Graphics fornisce le proprietà PageUnit e PageScale per la manipolazione della trasformazione della pagina. La classe Graphics fornisce anche due proprietà di sola lettura, DpiX e DpiY, per esaminare i punti orizzontali e verticali per pollice (dpi) del dispositivo di visualizzazione.

Puoi usare la proprietà PageUnit della classe Graphics per specificare un'unità di misura diversa dal pixel.

Annotazioni

Non è possibile impostare la proprietà PageUnit su World, perché non si tratta di un'unità fisica e genererà un'eccezione.

L'esempio seguente disegna una linea da (0, 0) a (2, 1), dove il punto (2, 1) è 2 pollici a destra e 1 pollice verso il basso dal 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)

Annotazioni

Se non si specifica una larghezza della penna quando si costruisce la penna, nell'esempio precedente verrà disegnata una linea larga di un pollice. È possibile specificare la larghezza della penna nel secondo argomento per il costruttore Pen:

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

Se si presuppone che il dispositivo di visualizzazione abbia 96 punti per pollice nella direzione orizzontale e 96 punti per pollice nella direzione verticale, gli endpoint della linea nell'esempio precedente hanno le coordinate seguenti nei tre spazi di coordinate:

Spazio delle coordinate Coordinate del punto finale
Mondo (0, 0) a (2, 1)
Pagina (0, 0) a (2, 1)
Dispositivo (0, 0) a (192, 96)

Si noti che poiché l'origine dello spazio delle coordinate del mondo si trova nell'angolo superiore sinistro dell'area client, le coordinate della pagina sono le stesse delle coordinate del mondo.

È possibile combinare le trasformazioni del mondo e della pagina per ottenere un'ampia gamma di effetti. Ad esempio, si supponga di voler utilizzare i pollici come unità di misura e che l'origine del sistema di coordinate sia a 2 pollici dal bordo sinistro dell'area del client e a 1/2 pollice dall'alto dell'area del client. Nell'esempio seguente vengono impostate le trasformazioni del mondo e della pagina di un oggetto Graphics e quindi viene tracciata una linea da (0, 0) a (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)

La figura seguente illustra il sistema di linee e coordinate.

Illustrazione di una linea e di un sistema di coordinate.

Se si presuppone che il dispositivo di visualizzazione abbia 96 punti per pollice nella direzione orizzontale e 96 punti per pollice nella direzione verticale, gli endpoint della linea nell'esempio precedente hanno le coordinate seguenti nei tre spazi di coordinate:

Spazio delle coordinate Coordinate del punto finale
Mondo (0, 0) a (2, 1)
Pagina (da 2, 0,5) a (4, 1,5)
Dispositivo (192, 48) a (384, 144)

Vedere anche