3

RenderTransformのコンテンツをEllipseGeometryの物理プロパティに適用しようとしています。つまり、EllipseGeometryのCenter / RadiusX / RadiusYプロパティは、変換の適用によって変更されます。これを行う理由は、楕円を描画できる描画プログラムがあり、描画後、楕円を拡大縮小/回転/平行移動できるようにするためです。これは、内部で元のPathオブジェクト(「データ」 "プロパティはEllipseGeometryオブジェクトです)。現在、描画プログラムの他のジオメトリ(ベジェ曲線、線、円弧など)については、データをファイルに保存するときに、次のアプローチを使用してRenderTransformsを適用しています。

    Geometry clone = linePath.Data.Clone();
    clone.Transform = linePath.RenderTransform(); //Which is a TransformGroup in my case
    Geometry transformedGeometry = clone.GetFlattenedPathGeometry();

これにより、「linePath」のRenderTransformが適用されたクリーンなジオメトリが残ります。これで、このジオメトリの内容を「ミニ構文」のファイルに簡単に保存して、後で再ロードできます。EllipseGeometryにも同じアプローチを使用できることはわかっていますが、結果は変換されたEllipseGeometryを表す近似PathGeometryであり、ファイルからデータをリロードするときにその結果をEllipseGeometryに戻す方法がわかりません。現在、図面内のEllipseGeometryオブジェクトの場合、物理プロパティ(Center / Radius / etc)を保存してから、対応するRenderTransformをXAML文字列としてファイルに保存します。次に、ロード時に、プロパティからEllipseGeometryを作成し、保存されたRenderTransformを適用します。

現在、このアプローチは機能しますが、他のジオメトリの場合と同じように、平行移動された楕円ジオメトリを保存する方がクリーンだと思います。また、アプリケーションの他の場所でRenderTransformsをEllipseGeometriesへの物理変換として適用するための使用法があり、回避策はますます醜いものになっているので、これを行うためのプロセスを特定したいと思います(可能な場合)。

前もって感謝します!

編集: 質問をもう少しオープンにするために、私はEllipseGeometryを使用することを約束していません。これは、RenderTransformに存在する可能性のあるすべての異なる変換を記述するためにEllipseGeometryをどのように使用できるかわからないためです(つまり、Rotate )。したがって、「楕円のような」動作を提供する他の方法または使用できる他のジオメトリがある場合、私は間違いなくそれについて聞くことに興味があります。

4

0 に答える 0