Объединение замкнутых полилиний

Автор Тема: Объединение замкнутых полилиний  (Прочитано 12676 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Задача заключается в объединении нескольких замкнутых полилиний в одну.
Сейчас я решаю эту задачу следующим образом:
  • Создаю области (Region) из каждой полилинии
  • Для каждой области провожу операцию объединения (BooleanOperation(BooleanOperationType operation, Region otherRegion))
  • Разбиваю полученную область и получаю набор линий и дуг
  • Объединяю все полученные объекты в одну полилинию
Этот алгоритм работает корректно, но с двумя большими минусами:
  • очень долго - если обрабатываются сотни полилиний, то весь процесс может занимать минуту или больше
  • не стабильно - бывают случаи, когда область не создается по полилинии, если у нее сложная геометрия, и итоговый результат получается неверным

Я хочу заменить работу с областями на какой-то другой алгоритм, но пока не знаю на какой. Какие способы объединения (вычитания и пересечения) знаете вы?

PS. команда для C3D, так что можно использовать объекты C3D )

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Объединение замкнутых полилиний
« Ответ #1 : 21-09-2018, 14:07:04 »
Я хочу заменить работу с областями на какой-то другой алгоритм, но пока не знаю на какой. Какие способы объединения (вычитания и пересечения) знаете вы?
Готового алгоритма в AutoCAD API нет. Есть класс CurveCurveIntersector3d, который позволит идентифицировать пересечение кривых (GE-кривых, т.е. полилинии сначала следует преобразовать в Curve3d). Он позволяет получить информацию о точках пересечния, характере пересечения, наложения и т.д. Ну а дальше уже самостоятельно нужно придумывать алгоритм для объединения.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Объединение замкнутых полилиний
« Ответ #2 : 21-09-2018, 14:15:26 »
Кстати, у Debalance есть подобная программа.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Объединение замкнутых полилиний
« Ответ #3 : 23-09-2018, 21:28:20 »
пересечение кривых
Так мне не разделять, а объединять нужно ))

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Объединение замкнутых полилиний
« Ответ #4 : 23-09-2018, 21:30:34 »
пересечение кривых
Так мне не разделять, а объединять нужно ))
Ты хочешь сказать, что не понял того, что я написал? Ты не понимаешь, что объединять нужно сегменты, получающиеся между точками пересечений контуров?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Объединение замкнутых полилиний
« Ответ #5 : 30-09-2018, 17:30:32 »
Curve3d - это же сегмент полилинии?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Объединение замкнутых полилиний
« Ответ #6 : 30-09-2018, 21:11:00 »
Curve3d - это же сегмент полилинии?
Нет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: Объединение замкнутых полилиний
« Ответ #7 : 01-10-2018, 07:30:46 »
Я бы пошел по более простому пути.
Вычислил бы размер фигур и нарисовал бы вокруг них прямоугольник с некоторым запасом и потом с помощью boundary нашел бы общий контур, лишнее удалил бы. Все.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Объединение замкнутых полилиний
« Ответ #8 : 01-10-2018, 21:50:34 »
Я бы пошел по более простому пути.
Вычислил бы размер фигур и нарисовал бы вокруг них прямоугольник с некоторым запасом и потом с помощью boundary нашел бы общий контур, лишнее удалил бы. Все.

Этот способ имеет такое количество ограничений и подводных камней, что используемый способ с Region значительно предпочтительней.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: Объединение замкнутых полилиний
« Ответ #9 : 02-10-2018, 07:32:24 »
Этот способ имеет такое количество ограничений и подводных камней, что используемый способ с Region значительно предпочтительней.
А можно несколько больше подробностей? Мне не так часто требуется что-то объединить, но знать об ограничениях применимости данного метода ИМХО крайне полезно.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Объединение замкнутых полилиний
« Ответ #10 : 02-10-2018, 11:44:05 »
А можно несколько больше подробностей?
Достаточно того, что для работы _BOUNDARY (или её .NET или ObjectARX обертки) требуется видимость всех примитивов на экране.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение