Compartir a través de


Tipos de sistemas de coordenadas

GDI+ de Windows usa tres espacios de coordenadas: mundo, página y dispositivo. Al realizar la llamada myGraphics.DrawLine(&myPen, 0, 0, 160, 80), los puntos que se pasan al método Graphics::D rawLine (0, 0) y (160, 80) se encuentran en el espacio de coordenadas del mundo. Antes de que GDI+ pueda dibujar la línea en la pantalla, las coordenadas pasan por una secuencia de transformaciones. Una transformación convierte las coordenadas del mundo en coordenadas de página y otra transformación convierte las coordenadas de página en coordenadas del dispositivo.

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.

captura de pantalla de una ventana que contiene ejes de coordenadas etiquetados

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

captura de pantalla de la ventana anterior, pero con una línea azul que se extiende diagonalmente desde el origen

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

Space 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 que asigna coordenadas del mundo a coordenadas de página se denomina transformación del mundo y se mantiene mediante un objeto Graphics . En el ejemplo anterior, la transformación del mundo es una traducción de 100 unidades en la dirección x y 50 unidades en la dirección y. En el ejemplo siguiente se establece la transformación mundial 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.0f, 50.0f);

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

La transformación que asigna coordenadas de página a coordenadas de dispositivo se denomina transformación de página. La clase Graphics proporciona cuatro métodos para manipular e inspeccionar la transformación de página: Graphics::SetPageUnit, Graphics::GetPageUnit, Graphics::SetPageScale y Graphics::GetPageScale. La clase Graphics también proporciona dos métodos, Graphics::GetDpiX y Graphics::GetDpiY, para examinar los puntos horizontales y verticales por pulgada del dispositivo de pantalla.

Puede usar el método Graphics::SetPageUnit de la clase Graphics para especificar una unidad de medida. En el ejemplo siguiente se dibuja una línea de (0, 0) a (2, 1) donde el punto (2, 1) es de 2 pulgadas a la derecha y 1 pulgada hacia abajo desde el punto (0, 0).

myGraphics.SetPageUnit(UnitInch);

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 pulgada. Puede especificar el ancho del lápiz en el segundo argumento para el constructor Pen :

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

 

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:

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

 

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 de mundo y página de un objeto Graphics y, a continuación, se dibuja una línea de (0, 0) a (2, 1).

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

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

captura de pantalla de la ventana anterior, pero más ancha, con los ejes colocados a la izquierda y etiquetados de forma diferente

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:

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