Clipper: сбой при вырезании открытых полигонов

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

Я использую оболочку Python Pyclipper. Мой код выглядит следующим образом:

import pyclipper

subj = [[-10, 5], [20, 5]]

clip = [[0, 0], [0, 10], [10, 10], [10, 0]]

pc = pyclipper.Pyclipper()

pc.AddPath(clip, pyclipper.PT_CLIP, True)
pc.AddPath(subj, pyclipper.PT_SUBJECT, False)

solution = pc.Execute(pyclipper.CT_INTERSECTION, pyclipper.PFT_EVENODD, pyclipper.PFT_EVENODD)

print(solution)

Кажется, он запускается до выполнения функции Execute, а затем просто завершается без сообщения об ошибке. Что я делаю неправильно?

1 ответ

Попробуйте изменить список списков для кортежей, и самое главное, чтобы не было ошибки типа, используйте Pyclipper::Execute2:

import pyclipper

subj = [(-10, 5), (20, 5)]

clip = [(0, 0), (0, 10), (10, 10), (10, 0)]

pc = pyclipper.Pyclipper()

pc.AddPath(clip, pyclipper.PT_CLIP, True)
pc.AddPath(subj, pyclipper.PT_SUBJECT, False)

solution = pc.Execute2(pyclipper.CT_INTERSECTION, pyclipper.PFT_NONZERO, pyclipper.PFT_NONZERO)


print([i.Contour for i in solution.Childs])

[[[10, 5], [0,5]]]

последняя строка в вашем случае эквивалентна:

solution = pc.Execute2(pyclipper.CT_INTERSECTION, pyclipper.PFT_EVENODD, pyclipper.PFT_EVENODD)
Другие вопросы по тегам