2012-05-04 26 views
3

私は形状(下の赤いパス)を持っており、このパスにはTranslateTransformScaleTransformの変換を適用する必要があります。私はこのようにShapeRenderTransformプロパティを使用している場合でも、私はこの方法でDrawingContextPushTransformメソッドを使用している場合、代わりにRenderTransformとPushTransform

enter image description here

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; 

私はこのタイプの描画を取得

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

なぜ2つのパスが異なる方法で配置されるのですか? PushTransformとRenderTransformの違いは何ですか?どちらの場合でも同じ結果を得る方法はありますか?おかげさまで

答えて

9

違いは単純に変換が適用される順序です。

最初のケース(TransformGroup)では、最初に(50,50)で変換し、次に(2,2)でスケールします。 2番目のケース(PushTransform)では、最初にスケールしてから変換します。

TransformGroupの変換は、スタック状またはファーストイン・ファーストアウトの順序でプッシュされた変換が実行されると、順番に先入れ先出しの順序で実行されます。

+0

私は考えたとおりです。 – gliderkite

関連する問題