1

我正在尝试使用Clipper Python绑定来使用多边形剪裁一条线。但是该进程在绑定或裁剪器库中崩溃:

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 中的错误?

4

1 回答 1

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在剪切打开的路径时应该使用 struct 。

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

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

请报告这是否解决了您的问题。

于 2015-08-31T12:55:51.023 回答