Tipos de sistemas de coordenadas

GDI+ usa tres espacios de coordenadas: global, página y dispositivo. Las coordenadas globales son las coordenadas usadas para modelar un mundo gráfico determinado y son las coordenadas que se pasan a los métodos del .NET Framework. Las coordenadas de página hacen referencia al sistema de coordenadas utilizado por una superficie de dibujo, como un formulario o un control. Las coordenadas de dispositivo son las que se utilizan por el dispositivo físico en el que se va a dibujar, como una pantalla o una hoja de papel. Al realizar la llamada myGraphics.DrawLine(myPen, 0, 0, 160, 80), los puntos que se pasan al método DrawLine ((0, 0) y (160, 80)) se encuentran en el espacio de coordenadas globales. Antes de que GDI+ pueda dibujar la línea en la pantalla, las coordenadas pasan por una secuencia de transformaciones. Una transformación, denominada transformación global, convierte las coordenadas globales en coordenadas de página y otra transformación, denominada transformación de página, convierte las coordenadas de página en coordenadas del dispositivo.

Transformaciones y sistemas de coordenadas

Supongamos que desea trabajar con un sistema de coordenadas que tenga su origen en el cuerpo del área cliente en lugar de en la esquina superior izquierda. Por ejemplo, quiere que el origen sea de 100 píxeles desde el borde izquierdo del área de cliente y 50 píxeles desde la parte superior del área de cliente. En la ilustración siguiente se muestra un sistema de coordenadas de este tipo.

Ilustración de un sistema de coordenadas.

Al realizar la llamada myGraphics.DrawLine(myPen, 0, 0, 160, 80), obtiene la línea que se muestra en la ilustración siguiente.

Ilustración de una línea en el sistema de coordenadas.

Las coordenadas de los puntos de conexión de la línea en los tres espacios de coordenadas son las siguientes:

Espacio de coordenadas Coordinadas del extremo
World (0, 0) a (160, 80)
Página (100, 50) a (260, 130)
Dispositivo (100, 50) a (260, 130)

Tenga en cuenta que el espacio de coordenadas de página tiene su origen en la esquina superior izquierda del área de cliente, y esto siempre será así. Tenga en cuenta también que, dado que la unidad de medida es el píxel, las coordenadas del dispositivo son las mismas que las coordenadas de página. Si establece la unidad de medida en algo distinto de píxeles (por ejemplo, pulgadas), las coordenadas del dispositivo serán diferentes de las coordenadas de la página.

La transformación global, que asigna coordenadas globales a coordenadas de página, se mantiene en la propiedad Transform de la clase Graphics. En el ejemplo anterior la transformación global es una traslación de 100 unidades en la dirección x y de 50 unidades en la dirección y. En el ejemplo siguiente se establece la transformación global de un objeto Graphics y, a continuación, se usa ese objeto Graphics para dibujar la línea que se muestra en la ilustración anterior:

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

La transformación de página asigna coordenadas de página a coordenadas del dispositivo. La clase Graphics proporciona las propiedades PageUnit y PageScale para manipular la transformación de página. La clase Graphics también proporciona dos propiedades de solo lectura, DpiX y DpiY, para examinar los puntos horizontales y verticales por pulgada del dispositivo de pantalla.

Puede usar la propiedad PageUnit de la clase Graphics para especificar una unidad de medida distinta del píxel.

Nota:

No se puede establecer la propiedad PageUnit en World, ya que no es una unidad física y provocará una excepción.

En el ejemplo siguiente se dibuja una línea de (0, 0) a (2, 1), donde el punto (2, 1) está a 2 pulgadas a la derecha y 1 pulgada más abajo del 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:

Si no especifica un ancho de lápiz al construir el lápiz, el ejemplo anterior dibujará una línea que tenga un ancho de una pulgada. Puede especificar el ancho del lápiz en el segundo argumento para el constructor Pen:

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

Si se supone que el dispositivo de pantalla tiene 96 puntos por pulgada en la dirección horizontal y 96 puntos por pulgada en la dirección vertical, los extremos de la línea del ejemplo anterior tienen las siguientes coordenadas en los tres espacios de coordenadas:

Espacio de coordenadas Coordinadas del extremo
World (0, 0) a (2, 1)
Página (0, 0) a (2, 1)
Dispositivo (0, 0) a (192, 96)

Tenga en cuenta que, dado que el origen del espacio de coordenadas globales está en la esquina superior izquierda del área de cliente, las coordenadas de página son las mismas que las coordenadas globales.

Puede combinar las transformaciones globales y de página para lograr una variedad de efectos. Por ejemplo, supongamos que desea usar pulgadas como unidad de medida y quiere que el origen del sistema de coordenadas sea de 2 pulgadas desde el borde izquierdo del área de cliente y de 1/2 pulgada desde la parte superior del área de cliente. En el ejemplo siguiente se establecen las transformaciones globales y de página de un objeto Graphics y, a continuación, se dibuja una línea de (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)

En la imagen siguiente se muestran la línea y el sistema de coordenadas.

Ilustración de una línea y un sistema de coordenadas.

Si se supone que el dispositivo de pantalla tiene 96 puntos por pulgada en la dirección horizontal y 96 puntos por pulgada en la dirección vertical, los extremos de la línea del ejemplo anterior tienen las siguientes coordenadas en los tres espacios de coordenadas:

Espacio de coordenadas Coordinadas del extremo
World (0, 0) a (2, 1)
Página (2, 0.5) a (4, 1.5)
Dispositivo (192, 48) a (384, 144)

Consulte también