Aracılığıyla paylaş


Genel ve Yerel Dönüştürmeler

Genel dönüşüm, belirli Graphics bir nesne tarafından çizilen her öğeye uygulanan bir dönüştürmedir. Buna karşılık, yerel dönüştürme, çizilecek belirli bir öğeye uygulanan bir dönüştürmedir.

Genel Dönüşümler

Genel dönüşüm oluşturmak için bir Graphics nesne oluşturun ve ardından özelliğini işleyin Transform . Transform özelliği bir nesnedir, bu nedenle herhangi bir Matrix benze dönüştürme dizisini tutabilir. özelliğinde depolanan dönüştürme, Transform dünya dönüşümü olarak adlandırılır. Graphics sınıfı bileşik bir dünya dönüşümü oluşturmak için çeşitli yöntemler sağlar: MultiplyTransform, RotateTransform, ScaleTransformve TranslateTransform. Aşağıdaki örnek iki kez üç nokta çizer: bir kez dünya dönüşümü oluşturmadan önce ve sonra bir kez. Dönüştürme ilk olarak y yönünde 0,5 faktörüyle ölçeklendirilir, ardından x yönünde 50 birim çevirir ve ardından 30 derece döndürür.

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şağıdaki çizimde dönüştürmeye dahil olan matrisler gösterilmektedir.

Illustration of the Scale, Translate, and Rotate matrices combining to form the global transformation.

Dekont

Yukarıdaki örnekte üç nokta, istemci alanının sol üst köşesinde yer alan koordinat sisteminin kaynağı hakkında döndürülür. Bu, üç noktayı kendi merkeziyle döndürmekten farklı bir sonuç üretir.

Yerel Dönüşümler

Yerel dönüştürme, çizilecek belirli bir öğe için geçerlidir. Örneğin, bir GraphicsPath nesnenin bu yolun veri noktalarını dönüştürmenizi sağlayan bir Transform yöntemi vardır. Aşağıdaki örnek, dönüştürme içermeyen bir dikdörtgen ve döndürme dönüştürmesi olan bir yol çizer. (Dünya dönüşümü olmadığını varsayalım.)

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)

Çeşitli sonuçlar elde etmek için dünya dönüşümlerini yerel dönüşümlerle birleştirebilirsiniz. Örneğin, dünya dönüşüm kullanarak koordinat sistemini düzeltebilir ve yeni koordinat sisteminde çizilen nesneleri döndürmek ve ölçeklendirmek için yerel dönüşümleri kullanabilirsiniz.

Çıkış noktası istemci alanının sol kenarından 200 piksel ve istemci alanının üst kısmından 150 piksel olan bir koordinat sistemi istediğinizi varsayalım. Ayrıca, ölçü biriminin x ekseni sağa, y ekseni de yukarı doğru olacak şekilde piksel olmasını istediğinizi varsayalım. Varsayılan koordinat sisteminde y ekseni aşağıyı işaret eder, bu nedenle yatay eksen üzerinde bir yansıma gerçekleştirmeniz gerekir. Aşağıdaki çizimde böyle bir yansımanın matrisi gösterilmektedir.

Illustration of a matrix that reflects across the horizontal axis.

Ardından, sağa doğru 200 birim ve aşağı doğru 150 birim çeviri yapmanız gerektiğini varsayalım.

Aşağıdaki örnek, bir Graphics nesnenin dünya dönüşümünün ayarlanmasıyla az önce açıklanan koordinat sistemini oluşturur.

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)

Aşağıdaki kod (önceki örneğin sonuna yerleştirilir), yeni koordinat sisteminin kaynağında sol alt köşesi olan tek bir dikdörtgenden oluşan bir yol oluşturur. Dikdörtgen, yerel dönüştürme olmadan bir kez ve yerel dönüştürme ile bir kez doldurulur. Yerel dönüştürme, 2 faktörün ardından 30 derece döndürmenin ardından yatay ölçeklendirmeden oluşur.

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

Aşağıdaki çizimde yeni koordinat sistemi ve iki dikdörtgen gösterilmektedir.

Illustration of the new coordinate system and the two rectangles.

Ayrıca bkz.