Создание смещений полигонов с помощью Clipper lib в python

Я хочу получить смещение в замкнутых многоугольниках, используя Clipper lib (http://www.angusj.com/delphi/clipper.php).

Так как я использую Python 2.7, я использую Pyclipper (https://pypi.python.org/pypi/pyclipper) сделать то же самое.

К сожалению, я не могу понять из примера смещения многоугольника Clipper в C ++:

 #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 )

К сожалению, не будучи опытным программистом, я не смог продвинуться вперед.

Пожалуйста, помогите мне в этом отношении.

Заранее спасибо.

1

Решение

то же самое в 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 — Как использовать.

Вы можете проверить тесты чтобы лучше понять использование.

смещение

2

Другие решения

Других решений пока нет …