Проблема разницы в библиотеке отсечения

Я начал использовать библиотеку вырезок с этого сайта: http://sourceforge.net/projects/polyclipping/

Я работаю в единстве (С#).

Все отлично работает, объединения, пересечения, различия... да, разница, есть один случай, когда я не уверен, что я делаю что-то не так или алгоритм не может правильно обработать. введите здесь описание изображения

Я пытаюсь получить разницу A-B, и она должна выглядеть как на рисунке 2), к сожалению, на выходе получается сетка A и сетка B, как на рисунке 1).

Что я делаю:

Clipper c = new Clipper();
c.AddPath(here goes the vertices of mesh A, polyType.Subject, true);
c.AddPath(here goes the vertices of mesh B, polyType.Clip, true);
c.Execute(ClipType.ctDIfference, a list of lists for my output,     PolyFillType.NonZero, PolyFillType.NonZero);

Я уже пытался изменить PolyFillTypes, но это ничего не изменило. Вот и я прошу вашего совета :)

РЕДАКТИРОВАТЬ: Я хочу получить (как на картинке «ожидаемый результат») сетку с отверстием. На самом деле я получаю 2-элементный список списков с точно такими же вершинами, которые я дал в качестве входных данных, поэтому, когда я создаю сетки из этих вершин, нет одной сетки с отверстием, а одна сетка перекрывает другую и Z-Fighting. Должна быть какая-то функция, с помощью которой я могу создать сетку с отверстием, но я не могу ее найти. Как я видел в версии GUIDEMO для C# этой библиотеки, она работает, я видел карту (вероятно, Австралии) с вырезанным отверстием посередине.

Вход: Вершины A(как субъект): (0,0), (0,10), (10,10), (10,0). Вершины B(как клип): (2,8), (6,8), (6,2), (2,2). Вывод точно такой же: List<List<IntPoint>>, который является 2-элементным и содержит эти два списка, которые вы можете видеть выше.


person Power    schedule 16.09.2015    source источник
comment
Было бы полезно, если бы вы показали результат координаты, которые вы получаете в результате операции отсечения, а затем координаты, которые вы ожидали.   -  person Angus Johnson    schedule 17.09.2015
comment
Я отредактировал свой пост, чтобы вы могли лучше понять суть. Спасибо за ваше время :)   -  person Power    schedule 17.09.2015
comment
У меня такая же проблема (unity 3d c#), вы нашли решение? Является ли clipperlib подходящим инструментом для достижения вершин C?   -  person Dodgson86    schedule 20.10.2016


Ответы (1)


Решение для отсечения, которое я получаю:

(((10, 10),(0, 10),(0, 0),(10, 0)), ((2, 2),(2, 8),(6, 8),(6, 2)))

Обратите внимание на разную ориентацию двух путей. Это указывает на то, что внутренний путь является отверстием для внешнего пути (многоугольника) либо с ненулевым, либо с четно-нечетным правилом заполнения.

person Angus Johnson    schedule 17.09.2015
comment
Правильно, теперь вопрос в том, как получить эту дыру? Я новичок в этой библиотеке (может быть, два часа изучения этого), не могли бы вы привести меня к решению, которое я отчаянно ищу? - person Power; 17.09.2015
comment
Ты там? :) Очень нужно это - person Power; 29.09.2015
comment
Здесь та же проблема! Вы нашли решение? Я тоже застрял в том, как я ПОЛУЧИЛ часть отверстия, я понимаю, что решение возвращает 2 отдельных полигона, один представляет собой контур, а другой - отверстие, может ли библиотека вернуть только одну сетку с отверстием? - person Dodgson86; 20.10.2016