2015-11-11 8 views
0

Когда я вычисляю разницу между двумя фигурами, которые касаются друг друга (например, прямоугольник A в большом прямоугольнике B с отверстием на прямоугольнике A) и форма клипа (прямоугольник C), две касательные фигуры объединяются, поскольку их доля одинаковые края, а затем выполняется обрезка.Запретить клиперу слияния полигонов?

Можно ли избежать слияния прикосновений при обрезке?

Ниже приведен пример различия между двумя формами (А в зеленый и B в красном цвете) и клипом (поэтому операция является следующим: & В - Клипе), он возвращает синюю форму:

Difference (Blue) two touching shapes (A in green and B in red) with a clip

Вместо синего прямоугольника, я хотел бы, чтобы эти две формы:

Expected result

и пересечение даст:

Intersection

Это дало бы мне четыре фигуры, которые я хочу:

Expected result

Я знаю, что я мог выполнять операции по каждой форме отдельно, но я боюсь, что это будет более дорогостоящим.

Примечание

Вот результат XOR:

XOR

+0

Используйте XOR вместо разницы. –

+0

Я что-то забыл в своем вопросе, поэтому я его отредактировал, теперь должно быть более ясно. XOR не помогает ... Я думаю, что единственным решением является выполнение операций отдельно, что я и делаю сейчас. –

+0

Я опубликовал аналогичный вопрос на https://stackoverflow.com/questions/46235176/clipperlib-clip-multiple-squares-with-rectangle-produces-1-result Вы когда-нибудь находили решение? В итоге я обработаю более 2 миллионов форм. Я не думаю, что отсечение их по отдельности было бы хорошо для выступления. –

ответ

0

В руке я вычислим эту операцию сам:

  1. вычисления пересечений между краями (из форма клипа и другие формы).
  2. для каждой вершины: сортировать ее края по углу (обязательно)
  3. прогулки по каждому ребру по часовой стрелке и против часовой стрелки, чтобы вычислить новые полигоны с их отверстиями

Это достаточно эффективно, но мне нужен космос разбивая структуру данных для сортировки ребер и быстрого их пересечения.

 Смежные вопросы

  • Нет связанных вопросов^_^