Отсечение линий и полигонов возвращает пустые пути с использованием библиотеки Clipper (c ++)

Я пытаюсь разделить многоугольник по линии, используя библиотеку Clipper. После выполнения отсечения возвращается пустой путь. Может кто-то предложить правильный способ сделать то же самое.


Paths clip(2),soln;
clip[0] << IntPoint(-264,-210) << IntPoint(650,-209);
Path sub = clip[0];
Path poly << IntPoint(531,49) << IntPoint(-21,49) << IntPoint(-970,-961) << IntPoint(-945,-1019) << IntPoint(1045,-1071) ;
Clipper c;
c.AddPath(poly,ptSubject,true);
c.AddPath(sub,ptClip,true);
c.Execute(ctIntersection,soln,pftNonZero, pftNonZero);
std::cout << soln.size() << "soln size";

Размер soln равен нулю.

1

Решение

Clipper не позволяет линиям (открытые пути) обрезать полигоны (закрытые пути). Однако это позволяет обрезать линии полигонами. (Подробнее здесь.)

Кроме того, в вашем коде оба пути (субъект и клип), по-видимому, добавляются как замкнутые пути, и поскольку у объекта нет области, пересечение этого с многоугольником клипа также не будет иметь области, следовательно, пустое решение.

3

Другие решения

Других решений пока нет …