Я хочу получить смещение в замкнутых многоугольниках, используя 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 )
К сожалению, не будучи опытным программистом, я не смог продвинуться вперед.
Пожалуйста, помогите мне в этом отношении.
Заранее спасибо.
то же самое в 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 — Как использовать.
Вы можете проверить тесты чтобы лучше понять использование.
Других решений пока нет …