Clipper:裁剪打开的多边形时崩溃

Posted

技术标签:

【中文标题】Clipper:裁剪打开的多边形时崩溃【英文标题】:Clipper: Crashing When Clipping Open Polygons 【发布时间】:2017-11-24 20:36:47 【问题描述】:

我正在尝试使用开源多边形剪切库 Clipper 来用闭合多边形剪切开放多边形。

我正在使用 pyclipper 的 python 包装器。我的代码如下:

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)

【讨论】:

AddPaths是一次添加多条路径,我只添加一条路径……反正我测试了,报错了。 @AdamCavender 最后一次观察,为什么你的第二个参数是 False?您是否尝试将其设置为 True? 我将其设置为 False 因为这是多边形是否闭合的参数。 @AdamCavender 我做了一点改动,希望这就是您所看到的,请注意我在最后添加了一个值,以便形状可以闭合。 这使它成为一个三角形,而不是一条线。感谢您提供帮助,但我认为您不了解 Clipper 或多边形的工作原理。

以上是关于Clipper:裁剪打开的多边形时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

使用 Sutherland-Hodgman 算法时多边形裁剪不起作用

裁剪算法——多边形裁剪/文字裁剪

多边形裁剪与文字裁剪

WebGIS裁剪算法-线裁剪多边形

Cropper - 以多边形裁剪图像

在 Oracle 中裁剪多边形