Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Globální transformace je transformace, která se vztahuje na každou položku nakreslenou daným objektem Graphics. Naproti tomu místní transformace je transformace, která se vztahuje na konkrétní položku, která se má nakreslit.
Globální transformace
Chcete-li vytvořit globální transformaci, vytvořte objekt Graphics a pak manipulujte s jeho vlastností Transform. Vlastnost Transform je objekt Matrix, proto může obsahovat libovolnou posloupnost afinních transformací. Transformace uložená ve vlastnosti Transform se nazývá světová transformace. Třída Graphics poskytuje několik metod pro vytvoření složené světové transformace: MultiplyTransform, RotateTransform, ScaleTransforma TranslateTransform. Následující příklad nakreslí elipsu dvakrát: jednou před vytvořením světové transformace a jednou po. Transformace se nejprve škáluje faktorem 0,5 ve směru y, následně se posune o 50 jednotek ve směru x a pak se otočí o 30 stupňů.
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)
Následující obrázek znázorňuje matice, které jsou součástí transformace.
Poznámka:
V předchozím příkladu je elipsa otočena kolem počátku souřadnicového systému, který je v levém horním rohu klientské oblasti. Výsledkem je jiný výsledek než otočení elipsy kolem jejího vlastního středu.
Místní transformace
Místní transformace se vztahuje na konkrétní položku, která se má nakreslit. Například objekt GraphicsPath má Transform metodu, která umožňuje transformovat datové body této cesty. Následující příklad nakreslí obdélník bez transformace a cestu s otočnou transformací. (Předpokládejme, že neexistuje žádná světová transformace.)
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)
Světovou transformaci můžete kombinovat s místními transformacemi, abyste dosáhli různých výsledků. Pomocí světové transformace můžete například revidovat souřadnicový systém a pomocí místních transformací otáčet a škálovat objekty nakreslené v novém systému souřadnic.
Předpokládejme, že chcete souřadnicový systém, který má svůj počátek 200 pixelů od levého okraje klientské oblasti a 150 pixelů od horního okraje klientské oblasti. Dále předpokládejme, že chcete, aby měrná jednotka byla pixelem, přičemž osa x ukazuje vpravo a osa y směřující nahoru. Výchozí souřadnicový systém má osu y směřující dolů, takže musíte provést odraz přes vodorovnou osu. Následující obrázek ukazuje matici tohoto odrazu.
Dále předpokládejme, že potřebujete provést překlad 200 jednotek vpravo a 150 jednotek dolů.
Následující příklad zavede souřadnicový systém právě popsaný nastavením transformace světa objektu 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)
Následující kód (umístěný na konci předchozího příkladu) vytvoří cestu, která se skládá z jednoho obdélníku s jeho levým dolním rohem na počátku nového souřadnicového systému. Obdélník se vyplní dvakrát: poprvé bez místní transformace a podruhé s místní transformací. Místní transformace se skládá z horizontálního škálování faktorem 2 následovaným otočením o 30 stupňů.
// 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)
Následující obrázek znázorňuje nový souřadnicový systém a dva obdélníky.
Viz také
.NET Desktop feedback