こんにちは、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 を使用すると、元のように見えますが、ポイントを新しい解像度にスケーリングする必要があります。
これがより明確になることを願っています。