Я начал использовать библиотеку вырезок с этого сайта: 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-элементным и содержит эти два списка, которые вы можете видеть выше.