1

こんにちは、GetFlattenedPathGeometry からのパスがあり、ここで Figure とセグメントを反復処理して、PointCollection に追加するポイントを取得できます。

次に、各 point.x/y に倍率を掛けて、元のパス データのフル スケール バージョンを取得します。(私の要件に合わないため、scaletransformを使用していません)。

次のようなものを使用する場合:

public static PathGeometry GetPathGeometry(PointCollection polygonCorners)
{
    List<PathSegment> pathSegments = new List<PathSegment> { new     PolyLineSegment(polygonCorners, true) };
    PathGeometry pathGeometry = new PathGeometry();
    pathGeometry.Figures.Add(new PathFigure(polygonCorners[0], pathSegments, true));
    return pathGeometry;
} 

新しいパス ジオメトリを返しますが、パスが 1 つの連続した線であるため、パス ジオメトリが除外された楕円は処理しません。

Geometry.Parse(新しい文字列)を再利用するために PointCollection を Path.Data (例: "M" "L" など) に変換する方法はありますか?

flattenedgeometry pointcollection を取得するために使用しているコードは次のとおりです。

PathGeometry g = path.Data.GetFlattenedPathGeometry();
foreach (var f in g.Figures)
{
    foreach (var s in f.Segments)
    {
        if (s is PolyLineSegment)
        {
            foreach (var pt in ((PolyLineSegment) s).Points)
            {
                strGeom += pt.ToString();
                Point ptn = new Point(pt.X * ScaleX, pt.Y * ScaleY);
                pcol.Add(ptn);
            }
        }
    }
}

< 画像編集 >

これは、ジオメトリから四角形と楕円形を差し引いた元のパスです。

ここに画像の説明を入力

そして、これがコードから再作成したように見えるものです。

ここに画像の説明を入力

元の GetFlattenedPathGeometry を使用すると、元のように見えますが、ポイントを新しい解像度にスケーリングする必要があります。

これがより明確になることを願っています。

4

2 に答える 2