描画したジオメトリの閉領域をFillしたい
解決したいこと
boiler's Graphics でフリーハンド描画ツール(仮称)を実装しました。これはPolyBezierSegmentクラスを利用して、描画時にドラッグした軌跡にそのまま曲線を描くツールとなっております。
このツールで描画したオブジェクトに対して、結合オプションのUnionを実行したときに、描画したジオメトリの閉領域をViewModelのFillColorで塗りつぶししたいのですが、うまくいかないのです。
Union実施後
理想(ペイントで作成しました):
実際:
PolyBezier曲線を構成する点群はIEnumerable<Point>です。
私が試したことはこの点群コレクションで重複するPointがあったら、そこでトリミングするようにしたのですが、このツールで描画すると交点があるように見えて、実際はずれてるようなのです。つまり、片方の線の点1と点2による線ともう片方の線の点3と点4による線が重なっているので、点が重なっているわけではないということです。(ちょっと言い回しが難しい...。)なので、重複する点が存在せず、この方法ではやりたいことを実現できませんでした。
私が求めているのはGeometry.Combineメソッドのように、何か都合のよいメソッドがどこかにないかということです。誰か知っていたら教えて下さい。
public static class GeometryCreator
{
:
public static PathGeometry CreateCombineGeometry(PolyBezierViewModel pb)
{
var geometry = new StreamGeometry();
using (var ctx = geometry.Open())
{
ctx.BeginFigure(pb.Points[0], true, true);
ctx.PolyBezierTo(pb.Points.Skip(1).ToList(), true, false);
}
geometry.Freeze();
return PathGeometry.CreateFromGeometry(geometry);
}
:
}
該当するソースコード
ブランチ:feature/PolyBezierSegment