Я пытаюсь использовать Clipper Python bindings, чтобы скопировать строку, используя многоугольник. Но процесс происходит сбой внутри креплений или библиотека клипера:pyclipper: Crash on trivial case («terminate called throwing exception»)
import pyclipper
pc = pyclipper.Pyclipper()
# Add a single line as the subject.
pc.AddPath([(-1, -1), (2, 1)], pyclipper.PT_SUBJECT, False)
# Add a square as the clipping region.
pc.AddPath([(0, 0), (1, 0), (1, 1), (0, 1)], pyclipper.PT_CLIP, True)
# Clip the line using the rectangle.
solution = pc.Execute(pyclipper.CT_INTERSECTION, pyclipper.PFT_NONZERO, pyclipper.PFT_NONZERO)
print(solution)
Когда я запускаю код выше, процесс завершается во время вызова pc.Execute()
со следующим сообщением, написанным стандартной ошибка:
libc++abi.dylib: terminate called throwing an exception
Я использую Python 3.4.3 для OS X 10.8.5 с новейшей версией pyclipper (0.9.3b0), доступной в PyPI, которая использует Clipper 6.2.1.
Я делаю что-то неправильно или это ошибка в Clipper или pyclipper?
Кажется, что это действительно было причиной. Я заменил вызов 'Execute' на ваш код и заменил вызов на' print() 'на' print ([i.Contour for i в solution.Childs]) '. Теперь я получаю правильное решение '[[[0.0, 0.0], [1.0, 0.0]]]'. Благодаря! – Feuermurmel
Отлично! Помните, что результат, полученный вами из 'Execute2', является деревом, поэтому печать таким образом будет работать только тогда, когда глубина дерева равна 1. Вы можете использовать функцию' pyclipper.PolyTreeToPaths', чтобы преобразовать ее в список путей. Затем вы можете напечатать то, как вы это делали раньше. – greginvm
О, спасибо за указатель. 'print (pyclipper.PolyTreeToPaths (solution))' it is. – Feuermurmel