Tipos de sistemas de coordenadas
GDI+usa três espaços de coordenadas: World, a página e dispositivo. As coordenadas do mundo são as coordenadas usadas para modelar um mundo de gráfico específico e as coordenadas que você passar a métodos na.NET Framework. Coordenadas de página consultem sistema de coordenadas usado por uma superfície de desenho, como, por exemplo, um formulário ou controle. Coordenadas de dispositivo são as coordenadas usadas pelo dispositivo físico que está sendo desenhado, como, por exemplo, uma tela ou uma folha de papel. Quando você faz a chamada myGraphics.DrawLine(myPen, 0, 0, 160, 80), os pontos que você passa para o DrawLine método —(0, 0) e (160, 80)— estão no espaço de coordenadas de mundo. Antes de GDI+ pode desenhar a linha na tela, as coordenadas passam por uma seqüência de transformações. Uma transformação, chamada a transformação do mundo, converte coordenadas do mundo em coordenadas da página e outra transformação, chamada de transformação de página, converte coordenadas de página às coordenadas do dispositivo.
Transformações e sistemas de coordenadas
Suponha que você deseja trabalhar com um sistema de coordenadas que tem sua origem no corpo da área do cliente, em vez do canto superior esquerdo. Por exemplo, digamos que você deseja que a origem de 100 pixels da borda esquerda da área do cliente e 50 pixels da parte superior da área cliente. A ilustração a seguir mostra um sistema de coordenadas.
Quando você faz a chamada myGraphics.DrawLine(myPen, 0, 0, 160, 80), você obtém a linha que mostra a ilustração a seguir.
As coordenadas dos pontos de extremidade da linha nos três espaços de coordenadas são os seguintes:
Mundo |
(0, 0) para (160, 80) |
Página |
(50, 100) para (260, 130) |
Dispositivo |
(50, 100) para (260, 130) |
Observe que o espaço de coordenadas da página tem sua origem no canto superior esquerdo da área do cliente; Isso será sempre o caso. Observe também que porque a unidade de medida é o pixel, as coordenadas de dispositivo são as mesmas que as coordenadas da página. Se você definir a unidade de medida para algo diferente de pixels (por exemplo, polegadas), as coordenadas do dispositivo será diferentes a partir das coordenadas da página.
A transformação do mundo, que mapeia as coordenadas do mundo em coordenadas da página, fica a Transform propriedade da Graphics classe. No exemplo anterior, a transformação do mundo é um 100 unidades de conversão na direção x e 50 unidades na direção y. O exemplo a seguir define a transformação do mundo de um Graphics object e, em seguida, usa que Graphics o objeto para desenhar a linha mostrada na figura anterior:
myGraphics.TranslateTransform(100, 50)
myGraphics.DrawLine(myPen, 0, 0, 160, 80)
myGraphics.TranslateTransform(100, 50);
myGraphics.DrawLine(myPen, 0, 0, 160, 80);
A transformação de página mapeia as coordenadas da página às coordenadas do dispositivo. O Graphics classe fornece o PageUnit e PageScale Propriedades para manipular a transformação de página. O Graphics classe também fornece duas propriedades somente leitura, DpiX e DpiY, para examinar a horizontais e verticais de pontos por polegada do dispositivo de vídeo.
Você pode usar o PageUnit propriedade da Graphics classe para especificar uma unidade de medida diferente de pixel.
Observação |
---|
Não é possível definir o PageUnit propriedade para World, como isso é não uma unidade física e fará com que uma exceção. |
O exemplo a seguir desenha uma linha de (0, 0) para (2, 1), onde o ponto (2, 1) é 2 polegadas para a direita e 1 polegada para baixo a partir do ponto (0, 0):
myGraphics.PageUnit = GraphicsUnit.Inch
myGraphics.DrawLine(myPen, 0, 0, 2, 1)
myGraphics.PageUnit = GraphicsUnit.Inch;
myGraphics.DrawLine(myPen, 0, 0, 2, 1);
Observação |
---|
Se você não especificar uma largura de caneta ao construir a caneta, o exemplo anterior desenhará uma linha de uma polegada de largura. Você pode especificar a largura da caneta no segundo argumento para o Pen construtor: |
Dim myPen As New Pen(Color.Black, 1 / myGraphics.DpiX)
Pen myPen = new Pen(Color.Black, 1 / myGraphics.DpiX);
Se supusermos que o dispositivo de vídeo 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 os três espaços de coordenadas:
Mundo |
(0, 0) para (1, 2) |
Página |
(0, 0) para (1, 2) |
Dispositivo |
(0, 0, para (192, 96) |
Observe que como a origem do espaço de coordenadas do mundo está no canto superior esquerdo da área do cliente, as coordenadas da página são as mesmas que as coordenadas do mundo.
Você pode combinar as transformações do mundo e a página para obter uma variedade de efeitos. Por exemplo, suponha que você deseja usar polegadas como unidade de medida e você deseja que a origem do seu sistema de coordenadas para ser centímetros da borda esquerda da área do cliente e 1/2 polegada da parte superior da área cliente. O exemplo a seguir define as transformações do mundo e a página de um Graphics de objeto e, em seguida, desenha uma linha de (0, 0) para (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);
A ilustração a seguir mostra a linha e o sistema de coordenadas.
Se supusermos que o dispositivo de vídeo 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 os três espaços de coordenadas:
Mundo |
(0, 0) para (1, 2) |
Página |
(2, 0,5) para (4, 1,5) |
Dispositivo |
(192, 48) para (384, 144) |
Consulte também
Conceitos
Representação de matriz de transformações