我想使用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以更好地掌握用法。

python - 在Python中使用Clipper lib产生多边形偏移-LMLPHP

10-04 15:45