Partilhar via


Transformações global e locais

Uma transformação global é uma transformação que se aplica a todos os itens desenhados por um determinado Graphics objeto. Por outro lado, uma transformação local é uma transformação que se aplica a um item específico a ser desenhada.

Transformações global

Para criar uma transformação global, construir um Graphics objeto e, em seguida, manipular seu Transform propriedade. The Transform propriedade é uma Matrix objeto, para que ele pode armazenar qualquer sequência de transformações afim. A transformação armazenada na Transform propriedade denomina-se transformação global. The Graphics classe fornece vários métodos para a criação de uma transformação global composto: MultiplyTransform, RotateTransform, ScaleTransform, e TranslateTransform. O exemplo a seguir desenha uma elipse duas vezes: uma vez antes de criar uma transformação global e uma vez após.A transformação dimensiona primeiro por um fator de 0,5 na direção y, e, em seguida, converte 50 unidades na direção x e gira 30 graus, em seguida.

myGraphics.DrawEllipse(myPen, 0, 0, 100, 50)
myGraphics.ScaleTransform(1, 0.5F)
myGraphics.TranslateTransform(50, 0, MatrixOrder.Append)
myGraphics.RotateTransform(30, MatrixOrder.Append)
myGraphics.DrawEllipse(myPen, 0, 0, 100, 50)

myGraphics.DrawEllipse(myPen, 0, 0, 100, 50);
myGraphics.ScaleTransform(1, 0.5f);
myGraphics.TranslateTransform(50, 0, MatrixOrder.Append);
myGraphics.RotateTransform(30, MatrixOrder.Append);
myGraphics.DrawEllipse(myPen, 0, 0, 100, 50);

A ilustração a seguir mostra as matrizes envolvidas na transformação.

Observação:

No exemplo anterior, a elipse é girada sobre a origem do sistema de coordenada, que está localizado no canto superior esquerdo da área de cliente.Isso produz um resultado diferente de elipse sobre sua própria centralizar de rotação.

Transformações locais

Uma transformação local se aplica a um item específico a ser desenhada.Por exemplo, um GraphicsPath o objeto tem um Transform método que permite transformar pontos de dados do caminho. O exemplo a seguir desenha um retângulo com Nenhuma transformação e um caminho com uma transformação de rotação.(Suponha que não haja nenhuma transformação global).

Dim myMatrix As New Matrix()
myMatrix.Rotate(45)
myGraphicsPath.Transform(myMatrix)
myGraphics.DrawRectangle(myPen, 10, 10, 100, 50)
myGraphics.DrawPath(myPen, myGraphicsPath)

Matrix myMatrix = new Matrix();
myMatrix.Rotate(45);
myGraphicsPath.Transform(myMatrix);
myGraphics.DrawRectangle(myPen, 10, 10, 100, 50);
myGraphics.DrawPath(myPen, myGraphicsPath);

Você pode agrupar transformação global com transformações locais para atingir uma variedade de resultados.Por exemplo, você pode usar transformação global para revisar o sistema de coordenada e transformações locais para girar e dimensionar objetos desenhados no novo sistema de coordenada.

Suponha que você queira que um sistema de coordenada que tenha suas origem 200 pixels da borda esquerda da área de cliente e 150 pixels da parte superior da área de cliente.Além disso, suponha que você deseja que a unidade de medida seja pixel, com o eixo x apontando para a direita e eixo y apontando para cima.O sistema de coordenada padrão tem o eixo y apontando para baixo, para que você precise executar um reflexão no eixo horizontal.A ilustração a seguir mostra a matriz de tal um reflexão.

Em seguida, suponha que você precisa executar uma conversão de 200 unidades para a direita e unidades de 150 para baixo.

O exemplo a seguir estabelece o sistema de coordenada que acabamos de descrever, definindo transformação global de um Graphics objeto.

Dim myMatrix As New Matrix(1, 0, 0, -1, 0, 0)
myGraphics.Transform = myMatrix
myGraphics.TranslateTransform(200, 150, MatrixOrder.Append)

Matrix myMatrix = new Matrix(1, 0, 0, -1, 0, 0);
myGraphics.Transform = myMatrix;
myGraphics.TranslateTransform(200, 150, MatrixOrder.Append);

O código a seguir (colocado no participante do exemplo anterior) cria um caminho que consiste em um único retângulo com seu canto inferior esquerdo na origem do novo sistema de coordenada.O retângulo é preenchido uma vez com Nenhuma transformação local e uma vez com uma transformação local.A transformação local consiste em um dimensionamento horizontal por um fator de 2 seguido de uma rotação de 30 graus.

' Create the path.
Dim myGraphicsPath As New GraphicsPath()
Dim myRectangle As New Rectangle(0, 0, 60, 60)
myGraphicsPath.AddRectangle(myRectangle)

' Fill the path on the new coordinate system.
' No local transformation
myGraphics.FillPath(mySolidBrush1, myGraphicsPath)

' Set the local transformation of the GraphicsPath object.
Dim myPathMatrix As New Matrix()
myPathMatrix.Scale(2, 1)
myPathMatrix.Rotate(30, MatrixOrder.Append)
myGraphicsPath.Transform(myPathMatrix)

' Fill the transformed path on the new coordinate system.
myGraphics.FillPath(mySolidBrush2, myGraphicsPath)

// Create the path.
GraphicsPath myGraphicsPath = new GraphicsPath();
Rectangle myRectangle = new Rectangle(0, 0, 60, 60);
myGraphicsPath.AddRectangle(myRectangle);

// Fill the path on the new coordinate system.
// No local transformation
myGraphics.FillPath(mySolidBrush1, myGraphicsPath);

// Set the local transformation of the GraphicsPath object.
Matrix myPathMatrix = new Matrix();
myPathMatrix.Scale(2, 1);
myPathMatrix.Rotate(30, MatrixOrder.Append);
myGraphicsPath.Transform(myPathMatrix);

// Fill the transformed path on the new coordinate system.
myGraphics.FillPath(mySolidBrush2, myGraphicsPath);

A ilustração a seguir mostra o novo sistema de coordenada e os dois retângulos.

Consulte também

Outros recursos

Sistemas de coordenada e transformações

Usando transformações no gerenciado GDI +