Trasformazioni globali e localiGlobal and Local Transformations

Una trasformazione globale è una trasformazione che si applica a ogni elemento creato da un determinato Graphics oggetto.A global transformation is a transformation that applies to every item drawn by a given Graphics object. Al contrario, una trasformazione locale è una trasformazione che si applica a un elemento specifico da disegnare.In contrast, a local transformation is a transformation that applies to a specific item to be drawn.

Trasformazioni globaliGlobal Transformations

Per creare una trasformazione globale, costruire un Graphics e quindi modificare il relativo Transform proprietà.To create a global transformation, construct a Graphics object, and then manipulate its Transform property. Il Transform proprietà è un Matrix dell'oggetto, pertanto può contenere qualsiasi sequenza di trasformazioni affini.The Transform property is a Matrix object, so it can hold any sequence of affine transformations. La trasformazione memorizzata nella Transform proprietà viene chiamata la trasformazione globale.The transformation stored in the Transform property is called the world transformation. Il Graphics classe fornisce numerosi metodi per la compilazione di una trasformazione complessiva composta: MultiplyTransform, RotateTransform, ScaleTransform, e TranslateTransform.The Graphics class provides several methods for building up a composite world transformation: MultiplyTransform, RotateTransform, ScaleTransform, and TranslateTransform. Nell'esempio seguente disegna un'ellisse due volte: una volta prima di creare una trasformazione globale e una volta dopo.The following example draws an ellipse twice: once before creating a world transformation and once after. La trasformazione Ridimensiona prima di un fattore pari a 0,5 nella direzione y, quindi converte 50 unità nella direzione x e quindi ruotata di 30 gradi.The transformation first scales by a factor of 0.5 in the y direction, then translates 50 units in the x direction, and then rotates 30 degrees.

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)

Nella figura seguente mostra le matrici utilizzate durante la trasformazione.The following illustration shows the matrices involved in the transformation.

Le trasformazioniTransformations

Nota

Nell'esempio precedente, i puntini di sospensione viene ruotata intorno all'origine del sistema di coordinate, che si trova nell'angolo superiore sinistro dell'area client.In the preceding example, the ellipse is rotated about the origin of the coordinate system, which is at the upper-left corner of the client area. Ciò produce un risultato diverso rispetto a rotazione dell'ellisse lungo il centro.This produces a different result than rotating the ellipse about its own center.

Trasformazioni localiLocal Transformations

Una trasformazione locale si applica a un elemento specifico da disegnare.A local transformation applies to a specific item to be drawn. Ad esempio, un GraphicsPath oggetto ha un Transform metodo che consente di trasformare i dati del percorso.For example, a GraphicsPath object has a Transform method that allows you to transform the data points of that path. Nell'esempio seguente disegna un rettangolo senza alcuna trasformazione e un percorso di una trasformazione di rotazione.The following example draws a rectangle with no transformation and a path with a rotation transformation. (Si presuppone che non sia presente alcuna trasformazione globale).(Assume that there is no world transformation.)

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

È possibile combinare la trasformazione globale con le trasformazioni locale per ottenere un'ampia gamma di risultati.You can combine the world transformation with local transformations to achieve a variety of results. Ad esempio, è possibile utilizzare la trasformazione globale per modificare il sistema di coordinate e trasformazioni locale per ruotare e ridimensionare gli oggetti disegnati sul nuovo sistema di coordinate.For example, you can use the world transformation to revise the coordinate system and use local transformations to rotate and scale objects drawn on the new coordinate system.

Si supponga un sistema di coordinate con relativa origine di 200 pixel dal bordo sinistro dell'area client e 150 pixel dalla parte superiore dell'area client.Suppose you want a coordinate system that has its origin 200 pixels from the left edge of the client area and 150 pixels from the top of the client area. Si supponga inoltre che l'unità di misura per il pixel, con l'asse x a destra e l'asse y verso l'alto.Furthermore, assume that you want the unit of measure to be the pixel, with the x-axis pointing to the right and the y-axis pointing up. Il sistema di coordinate è l'asse y rivolta verso il basso, pertanto è necessario eseguire un riflesso tra l'asse orizzontale.The default coordinate system has the y-axis pointing down, so you need to perform a reflection across the horizontal axis. Nella figura seguente viene illustrata la matrice di tale tipo di reflection.The following illustration shows the matrix of such a reflection.

Le trasformazioniTransformations

Si supponga, quindi che è necessario eseguire una conversione di 200 unità a destra e 150 verso il basso.Next, assume you need to perform a translation 200 units to the right and 150 units down.

Nell'esempio seguente definisce il sistema di coordinate appena descritto, impostando la trasformazione globale di un Graphics oggetto.The following example establishes the coordinate system just described by setting the world transformation of a Graphics object.

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

Il codice seguente (inserito alla fine dell'esempio precedente) crea un percorso costituito da un singolo rettangolo con il relativo angolo inferiore sinistro all'origine del nuovo sistema di coordinate.The following code (placed at the end of the preceding example) creates a path that consists of a single rectangle with its lower-left corner at the origin of the new coordinate system. Il rettangolo viene compilato una sola volta senza alcuna trasformazione locale e una volta con una trasformazione locale.The rectangle is filled once with no local transformation and once with a local transformation. La trasformazione locale è costituito un ridimensionamento orizzontale di un fattore pari a 2, seguito da una rotazione di 30 gradi.The local transformation consists of a horizontal scaling by a factor of 2 followed by a 30-degree rotation.

// 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);
' 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)

Nella figura seguente mostra il nuovo sistema di coordinate e i due rettangoli.The following illustration shows the new coordinate system and the two rectangles.

Le trasformazioniTransformations

Vedere ancheSee Also

Sistemi di coordinate e trasformazioniCoordinate Systems and Transformations
Uso di trasformazioni nel codice gestito GDI+Using Transformations in Managed GDI+