Compartilhar via


Tipos de sistemas de coordenadas

O Windows GDI+ usa três espaços de coordenadas: mundo, página e dispositivo. Quando você faz a chamada myGraphics.DrawLine(&myPen, 0, 0, 160, 80), os pontos que você passa para o método Graphics::D rawLine — (0, 0) e (160, 80) — estão no espaço de coordenadas do mundo. Antes que o GDI+ possa desenhar a linha na tela, as coordenadas passam por uma sequência de transformações. Uma transformação converte coordenadas mundiais em coordenadas de página e outra transformação converte coordenadas de página em coordenadas do dispositivo.

Suponha que você queira trabalhar com um sistema de coordenadas que tenha sua origem no corpo da área do cliente em vez do canto superior esquerdo. Digamos, por exemplo, que você deseja que a origem seja de 100 pixels da borda esquerda da área do cliente e 50 pixels da parte superior da área do cliente. A ilustração a seguir mostra esse sistema de coordenadas.

captura de tela de uma janela que contém eixos de coordenadas rotulados

Ao fazer a chamada myGraphics.DrawLine(&myPen, 0, 0, 160, 80), você obtém a linha mostrada na ilustração a seguir.

captura de tela da janela anterior, mas com uma linha azul se estendendo diagonalmente da origem

As coordenadas dos pontos de extremidade da linha nos três espaços de coordenadas são as seguintes:

Espaço Coordenadas de ponto de extremidade
Mundo (0, 0) a (160, 80)
Página (100, 50) a (260, 130)
Dispositivo (100, 50) a (260, 130)

 

Observe que o espaço de coordenadas da página tem sua origem no canto superior esquerdo da área do cliente; esse sempre será o caso. Observe também que, como a unidade de medida é o pixel, as coordenadas do dispositivo são as mesmas que as coordenadas da página. Se você definir a unidade de medida como algo diferente de pixels (por exemplo, polegadas), as coordenadas do dispositivo serão diferentes das coordenadas da página.

A transformação que mapeia coordenadas mundiais para coordenadas de página é chamada de de transformação do mundo e é mantida por um objeto Graphics. No exemplo anterior, a transformação mundial é uma tradução de 100 unidades na direção x e 50 unidades na direção y. O exemplo a seguir define a transformação mundial de um objeto Graphics e, em seguida, usa esse objeto Graphics para desenhar a linha mostrada na figura anterior.

myGraphics.TranslateTransform(100.0f, 50.0f);

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

A transformação que mapeia coordenadas de página para coordenadas do dispositivo é chamada de de transformação de página. A classe Graphics fornece quatro métodos para manipular e inspecionar a transformação de página: Graphics::SetPageUnit, Graphics::GetPageUnit, Graphics::SetPageScalee Graphics::GetPageScale. A classe Graphics também fornece dois métodos, Graphics::GetDpiX e Graphics::GetDpiY, para examinar os pontos horizontais e verticais por polegada do dispositivo de exibição.

Você pode usar o métodoGraphics::SetPageUnit da classeGraphics para especificar uma unidade de medida. O exemplo a seguir desenha uma linha de (0, 0) para (2, 1) em que o ponto (2, 1) é de 2 polegadas para a direita e 1 polegada para baixo do ponto (0, 0).

myGraphics.SetPageUnit(UnitInch);

myGraphics.DrawLine(&myPen, 0, 0, 2, 1);

Nota

Se você não especificar uma largura de caneta ao construir sua caneta, o exemplo anterior desenhará uma linha de uma polegada de largura. Você pode especificar a largura da caneta no segundo argumento para o construtorcaneta:

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

 

Se assumirmos que o dispositivo de exibição tem 96 pontos por polegada na direção horizontal e 96 pontos por polegada na direção vertical, os pontos de extremidade da linha no exemplo anterior têm as seguintes coordenadas nos três espaços de coordenadas:

Espaço Coordenadas de ponto de extremidade
Mundo (0, 0) a (2, 1)
Página (0, 0) a (2, 1)
Dispositivo (0, 0, para (192, 96)

 

Você pode combinar o mundo e as transformações de página para obter uma variedade de efeitos. Por exemplo, suponha que você queira usar polegadas como a unidade de medida e deseja que a origem do sistema de coordenadas esteja a 2 polegadas da borda esquerda da área do cliente e 1/2 polegada da parte superior da área do cliente. O exemplo a seguir define o mundo e as transformações de página de um objeto Graphics e, em seguida, desenha uma linha de (0, 0) para (2, 1).

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

A ilustração a seguir mostra a linha e o sistema de coordenadas.

captura de tela da janela anterior, mas mais larga, com os eixos posicionados à esquerda e rotulados de forma diferente

Se assumirmos que o dispositivo de exibição tem 96 pontos por polegada na direção horizontal e 96 pontos por polegada na direção vertical, os pontos de extremidade da linha no exemplo anterior têm as seguintes coordenadas nos três espaços de coordenadas:

Espaço Coordenadas de ponto de extremidade
Mundo (0, 0) a (2, 1)
Página (2, 0,5) a (4, 1,5)
Dispositivo (192, 48) para (384, 144)