Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Transformasi global adalah transformasi yang berlaku untuk setiap item yang digambar oleh objek tertentu Graphics . Sebaliknya, transformasi lokal adalah transformasi yang berlaku untuk item tertentu yang akan digambar.
Transformasi Global
Untuk membuat transformasi global, buat Graphics objek, lalu manipulasi propertinya Transform . Properti Transform adalah Matrix objek, sehingga dapat menyimpan urutan transformasi affine apa pun. Transformasi yang disimpan dalam properti Transform disebut transformasi dunia. Kelas ini Graphics menyediakan beberapa metode untuk membangun transformasi dunia komposit: MultiplyTransform, RotateTransform, ScaleTransform, dan TranslateTransform. Contoh berikut menggambar elips dua kali: sekali sebelum membuat transformasi dunia dan sekali setelahnya. Transformasi pertama kali diskalakan dengan faktor 0,5 ke arah y, lalu menerjemahkan 50 unit ke arah x, lalu memutar 30 derajat.
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)
Ilustrasi berikut menunjukkan matriks yang terlibat dalam transformasi.
Nota
Dalam contoh sebelumnya, elips diputar tentang asal sistem koordinat, yang berada di sudut kiri atas area klien. Ini menghasilkan hasil yang berbeda dari memutar elips tentang pusatnya sendiri.
Transformasi Lokal
Transformasi lokal berlaku untuk item tertentu yang akan digambar. Misalnya, GraphicsPath objek memiliki Transform metode yang memungkinkan Anda mengubah titik data jalur tersebut. Contoh berikut menggambar persegi panjang tanpa transformasi dan jalur dengan transformasi rotasi. (Asumsikan bahwa tidak ada transformasi dunia.)
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)
Anda dapat menggabungkan transformasi dunia dengan transformasi lokal untuk mencapai berbagai hasil. Misalnya, Anda dapat menggunakan transformasi dunia untuk merevisi sistem koordinat dan menggunakan transformasi lokal untuk memutar dan menskalakan objek yang digambar pada sistem koordinat baru.
Misalkan Anda menginginkan sistem koordinat yang memiliki asal 200 piksel dari tepi kiri area klien dan 150 piksel dari bagian atas area klien. Selain itu, asumsikan bahwa Anda ingin unit pengukuran menjadi piksel, dengan sumbu x menunjuk ke kanan dan sumbu y menunjuk ke atas. Sistem koordinat default memiliki sumbu y yang menunjuk ke bawah, jadi Anda perlu melakukan pantulan di seluruh sumbu horizontal. Ilustrasi berikut menunjukkan matriks pantulan tersebut.
Selanjutnya, asumsikan Anda perlu melakukan terjemahan 200 unit ke kanan dan 150 unit ke bawah.
Contoh berikut menetapkan sistem koordinat yang baru saja dijelaskan dengan mengatur transformasi dunia dari sebuah objek Graphics.
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)
Kode berikut (ditempatkan di akhir contoh sebelumnya) membuat jalur yang terdiri dari satu persegi panjang dengan sudut kiri bawahnya di asal sistem koordinat baru. Persegi panjang diisi sekali tanpa transformasi lokal dan sekali dengan transformasi lokal. Transformasi lokal terdiri dari penskalaan horizontal dengan faktor 2 diikuti oleh rotasi 30 derajat.
// 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)
Ilustrasi berikut menunjukkan sistem koordinat baru dan dua persegi panjang.
Lihat juga
.NET Desktop feedback