Python pyclipper:在普通情况下崩溃(“终止调用引发异常”)

Python pyclipper:在普通情况下崩溃(“终止调用引发异常”),python,clipperlib,Python,Clipperlib,我正在尝试使用Python使用多边形剪裁一条线。但该过程在绑定或clipper库中崩溃: 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,

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

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

我在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

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

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

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

看来这确实是原因所在。我已将对
Execute
的调用替换为您的代码,并将对
print()
的调用替换为
print([I.Contour for I in solution.Childs])
。现在我得到了
[[0.0,0.0],[1.0,0.0]]]
的正确解决方案。谢谢伟大的请注意,从
Execute2
得到的结果是一棵树,因此只有当树的深度为1时,这种打印方式才有效。您可以使用
pyclipper.PolyTreeToPaths
函数将其转换为路径列表。然后你可以像以前那样打印。哦,谢谢你的指针<代码>打印(pyclipper.PolyTreeToPaths(解决方案))就是这样。