我想使用Clipper lib(http://www.angusj.com/delphi/clipper.php)在封闭的多边形中产生偏移量。
由于我使用的是python 2.7,因此我使用pyclipper(https://pypi.python.org/pypi/pyclipper)进行了相同的操作。
不幸的是,我无法从C++中的clipper的多边形偏移示例理解:
#include "clipper.hpp"
...
using namespace ClipperLib;
int main()
{
Path subj;
Paths solution;
subj <<
IntPoint(348,257) << IntPoint(364,148) << IntPoint(362,148) <<
IntPoint(326,241) << IntPoint(295,219) << IntPoint(258,88) <<
IntPoint(440,129) << IntPoint(370,196) << IntPoint(372,275);
ClipperOffset co;
co.AddPath(subj, jtRound, etClosedPolygon);
co.Execute(solution, -7.0);
//draw solution ...
DrawPolygons(solution, 0x4000FF00, 0xFF009900);
}
在python中实现相同。
我只看到了pyclipper的一个示例(裁剪,而不是抵消):
import pyclipper
subj = (
((180, 200), (260, 200), (260, 150), (180, 150)),
((215, 160), (230, 190), (200, 190))
)
clip = ((190, 210), (240, 210), (240, 130), (190, 130))
pc = pyclipper.Pyclipper()
pc.AddPath(clip, pyclipper.PT_CLIP, True)
pc.AddPaths(subj, pyclipper.PT_SUBJ, True)
solution = pc.Execute(pyclipper.CT_INTERSECTION, pyclipper.PFT_EVENODD, pyclipper.PFT_EVENODD )
不幸的是,由于我不是一名经验丰富的程序员,所以无法前进。
在这方面请帮助我。
提前致谢。
最佳答案
pyclipper中的相同内容是:
subj = ((348, 257), (364, 148), (362, 148), (326, 241), (295, 219), (258, 88), (440, 129), (370, 196), (372, 275))
pco = pyclipper.PyclipperOffset()
pco.AddPath(subj, pyclipper.JT_ROUND, pyclipper.ET_CLOSEDPOLYGON)
pco.Execute(-7.0)
""" Result (2 polygons, see image below):
[[[365, 260], [356, 254], [363, 202]], [[425, 133], [365, 191], [371, 149], [370, 145], [368, 142], [364, 141], [362, 141], [358, 142], [355, 145], [322, 230], [301, 215], [268, 98]]]
"""
我们试图使pyclipper方法和函数的命名与python包装器的命名尽可能接近原始名称。同样,它应该与模拟库一起使用的方式。唯一的不同是
Execute
函数的使用方式,如pyclipper - How to use所述。您可以检查tests以更好地掌握用法。