2012-05-04 79 views
3

我有一個形狀(下面的紅色路徑),我必須適用於此路徑TranslateTransformScaleTransform變換。但是,如果我以這種方式使用ShapeRenderTransform屬性:RenderTransform vs PushTransform

Path MyPath = new Path { Fill = new SolidColorBrush(Colors.Red) }; 
MyPath.Data = MyPathGeometry; 
TransformGroup transf = new TransformGroup(); 
transf.Children.Add(new TranslateTransform(50, 50)); 
transf.Children.Add(new ScaleTransform(2, 2)); 
MyPath.RenderTransform = transf; 

我得到這種類型的繪畫:

enter image description here

相反,如果我以這種方式使用DrawingContextPushTransform方法:

DrawingVisual MyPath = new DrawingVisual(); 

using (DrawingContext context = MyPath.RenderOpen()) { 
    context.PushTransform(new TranslateTransform(50, 50)); 
    context.PushTransform(new ScaleTransform(2, 2)); 
    context.DrawGeometry(Brushes.Red, null, MyPathGeometry); 
} 

我收到這樣的圖紙:

enter image description here

爲什麼兩個路徑放在不同的方式?使用PushTransform和RenderTransform有什麼區別?我怎麼能在這兩種情況下得到相同的結果? 謝謝。

回答

9

不同之處在於轉換應用的順序。

在第一種情況下(TransformGroup),您先翻譯(50,50),然後再縮放(2,2)。在第二種情況下(PushTransform),首先進行縮放,然後進行平移。

TransformGroup中的轉換以順序先入先出的順序執行,當按下的轉換以堆棧狀或後進先出的順序執行時。

+0

正如我的想法。 – gliderkite

相關問題