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

1

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

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

К сожалению, я не могу понять из примера смещения полигона клипера в 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.

Я видел только один пример (отсечения, а не смещения) пикпипера:

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 )  

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

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

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

  • 0
    Страница проекта советует вам взглянуть на tests / test_pyclipper.py для большего количества примеров, поэтому я не уверен, почему вы скажете, что пример с главной страницы проекта - единственный пример, который вы видели.
  • 0
    Более запутанно, чем когда-либо, смотрите ниже, и вы узнаете - tests / test_pyclipper.py: github.com/greginvm/pyclipper/commit/…
Показать ещё 1 комментарий
Теги:
polygon
clipperlib

1 ответ

2
Лучший ответ

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

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

Изображение 174551

  • 0
    Я добавил пример, основанный на этом, в файле readme библиотеки.
  • 0
    Спасибо за ответ.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню