ポリゴンのリスト (IntPoints のリストのリストとして定義) を指定して、それらのいずれかが接触しているかどうかをチェックし、接触している場合はそれらを単一のポリゴンにマージするコードを作成しようとしています。これを行うために、私はすでに次の2つの方法を試しました:
List<List<IntPoint>> output=new List<List<IntPoint>>();
output = Clipper.SimplifyPolygons(input,PolyFillType.pftPositive);
と
Clipper c = new Clipper();
c.AddPaths(input, PolyType.ptClip, true);
c.Execute(ClipType.ctUnion, output);
現在、これらは両方ともポリゴンを非常に簡単にマージしますが、ポリゴンの空きスペースは無視され、空きエリアは単純に単一のポリゴンに結合されるため、少し過剰です。つまり、次のようになります。
起こります。これらの 2 つのポリゴンが互いに接触していないため、これは明らかに間違っています。どちらの方法でも同じ結果が得られます。結果は入力と同じになります。これを修正する方法はありますか?ソリューションはクリッパー ライブラリを使用する必要はありません (私はそれと結婚していません) が、ポイント入力のリストによって定義されるポリゴンを使用するものが必要です。そしてy。
編集この問題は、他のポリゴンの内側にポリゴンがない場合にも発生することに気付いたので、解決策は常に「塗りつぶされた」編集編集です。これは、入力がどのようなものかの例でもあります
input[0][0]
{ClipperLib.IntPoint}
X: -724
Y: -472
input[0][1]
{ClipperLib.IntPoint}
X: 428
Y: -472
input[0][2]
{ClipperLib.IntPoint}
X: 428
Y: -472
input[0][3]
{ClipperLib.IntPoint}
X: 428
Y: 632
input[0][4]
{ClipperLib.IntPoint}
X: 428
Y: 632
input[0][5]
{ClipperLib.IntPoint}
X: -724
Y: 632
input[0][6]
{ClipperLib.IntPoint}
X: -724
Y: 632
input[0][7]
{ClipperLib.IntPoint}
X: -724
Y: -472
input[0][8]
{ClipperLib.IntPoint}
X: -88
Y: -218
input[0][9]
{ClipperLib.IntPoint}
X: -107
Y: -218
input[0][10]
{ClipperLib.IntPoint}
X: -107
Y: -218
input[0][11]
{ClipperLib.IntPoint}
X: -107
Y: -209
input[0][12]
{ClipperLib.IntPoint}
X: -107
Y: -209
input[0][13]
{ClipperLib.IntPoint}
X: -320
Y: -172
input[0][14]
{ClipperLib.IntPoint}
X: -320
Y: -172
input[0][15]
{ClipperLib.IntPoint}
X: -320
Y: 132
input[0][16]
{ClipperLib.IntPoint}
X: -320
Y: 132
input[0][17]
{ClipperLib.IntPoint}
X: -88
Y: 173
input[0][18]
{ClipperLib.IntPoint}
X: -88
Y: 173
input[0][19]
{ClipperLib.IntPoint}
X: -88
Y: -201
input[0][20]
{ClipperLib.IntPoint}
X: -88
Y: -201
input[0][21]
{ClipperLib.IntPoint}
X: -88
Y: -218
これが説明する入力は、穴が開けられた正方形です。