Clipper не создает дырку при создании соединения
У меня есть следующий код:
class Program {
static void Main(string[] args) {
Polygon a = new Polygon();
a.Add(new IntPoint(0,0));
a.Add(new IntPoint(2,0));
a.Add(new IntPoint(2,1));
a.Add(new IntPoint(1,1));
a.Add(new IntPoint(1,2));
a.Add(new IntPoint(2,2));
a.Add(new IntPoint(2,3));
a.Add(new IntPoint(0,3));
Polygon b = new Polygon();
b.Add(new IntPoint(2,0));
b.Add(new IntPoint(3,0));
b.Add(new IntPoint(3,3));
b.Add(new IntPoint(2,3));
PolyTree solution = new PolyTree();
Clipper c = new Clipper();
c.AddPolygon(a,PolyType.ptSubject);
c.AddPolygon(b,PolyType.ptSubject);
c.Execute(ClipType.ctUnion,solution);
printPolygonTree(solution);
Console.ReadLine();
}
static void printPolygonTree(PolyNode tree) {
Console.WriteLine((tree.IsHole?"Hole":"Polygon")+":");
foreach(IntPoint point in tree.Contour) {
Console.WriteLine(point.X+"/"+point.Y);
}
foreach(PolyNode node in tree.Childs) {
printPolygonTree(node);
}
}
}
Он должен объединить многоугольники a и b, что должно привести к большому квадрату, который содержит маленький квадрат в виде отверстия. Но вместо этого я получаю один многоугольник, у которого есть разрез, чтобы соединить внутренний и внешний многоугольник в один многоугольник.
Есть ли способ объединить 2 полигона, как ожидалось?
Графика: