4

シェイプ (下の赤いパス) があり、このパスにTranslateTransformScaleTransform変換を適用する必要があります。しかし、この方法でShape RenderTransformプロパティを使用すると:

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;

このタイプの図面を取得します。

ここに画像の説明を入力

代わりに、次のようにDrawingContext PushTransformメソッドを使用すると:

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);
}

このタイプの図面を取得します。

ここに画像の説明を入力

2 つのパスが異なる方法で配置されているのはなぜですか? PushTransform と RenderTransform の使用の違いは何ですか? 両方のケースで同じ結果を得るにはどうすればよいですか? ありがとう。

4

1 に答える 1

9

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

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

TransformGroup 内の変換は、順次、先入れ先出しの順序で実行されますが、プッシュされた変換は、スタックのような順序または後入れ先出しの順序で実行されます。

于 2012-05-04T18:34:59.580 に答える