pyclipper:崩溃的琐碎案例(“终止称为抛出异常”)

时间:2015-08-24 12:38:28

标签: python clipperlib

我正在尝试使用Clipper Python bindings使用多边形剪切线条。但是进程在绑定或限幅器库中崩溃了:

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

我在OS X 10.8.5上使用Python 3.4.3,PyPI上有最新版本的pyclipper(0.9.3b0),它使用了Clipper 6.2.1。

我做错了什么,或者这是Clipper或pyclipper中的错误?

1 个答案:

答案 0 :(得分:2)

我在Ubuntu 15.04上用Python 3.4.3尝试了你的例子,我收到以下错误:

terminate called after throwing an instance of 'ClipperLib::clipperException'
  what():  Error: PolyTree struct is need for open path clipping.

正如错误消息所示,剪切打开的路径时应使用PolyTree结构。

Clipper库在Clipper类中有两个名为Execute的函数。一个接受Paths作为解决方案参数类型,另一个接受PolyTree作为解决方案参数类型。正如错误消息所示,在您的情况下,您应该使用第二个。第二个函数在Pyclipper::Execute2函数中调用。因此,将第12行替换为第12行,以便使用正确的类型:

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

如果这可以解决您的问题,请报告。