Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Алексей Терно от 21-09-2018, 13:51:51

Название: Объединение замкнутых полилиний
Отправлено: Алексей Терно от 21-09-2018, 13:51:51
Задача заключается в объединении нескольких замкнутых полилиний в одну.
Сейчас я решаю эту задачу следующим образом:
Этот алгоритм работает корректно, но с двумя большими минусами:

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

PS. команда для C3D, так что можно использовать объекты C3D )
Название: Re: Объединение замкнутых полилиний
Отправлено: Александр Ривилис от 21-09-2018, 14:07:04
Я хочу заменить работу с областями на какой-то другой алгоритм, но пока не знаю на какой. Какие способы объединения (вычитания и пересечения) знаете вы?
Готового алгоритма в AutoCAD API нет. Есть класс CurveCurveIntersector3d, который позволит идентифицировать пересечение кривых (GE-кривых, т.е. полилинии сначала следует преобразовать в Curve3d). Он позволяет получить информацию о точках пересечния, характере пересечения, наложения и т.д. Ну а дальше уже самостоятельно нужно придумывать алгоритм для объединения.
Название: Re: Объединение замкнутых полилиний
Отправлено: Александр Ривилис от 21-09-2018, 14:15:26
Кстати, у Debalance (http://adn-cis.org/forum/index.php?action=profile;u=256) есть подобная программа.
Название: Re: Объединение замкнутых полилиний
Отправлено: Алексей Терно от 23-09-2018, 21:28:20
пересечение кривых
Так мне не разделять, а объединять нужно ))
Название: Re: Объединение замкнутых полилиний
Отправлено: Александр Ривилис от 23-09-2018, 21:30:34
пересечение кривых
Так мне не разделять, а объединять нужно ))
Ты хочешь сказать, что не понял того, что я написал? Ты не понимаешь, что объединять нужно сегменты, получающиеся между точками пересечений контуров?
Название: Re: Объединение замкнутых полилиний
Отправлено: Алексей Терно от 30-09-2018, 17:30:32
Curve3d - это же сегмент полилинии?
Название: Re: Объединение замкнутых полилиний
Отправлено: Александр Ривилис от 30-09-2018, 21:11:00
Curve3d - это же сегмент полилинии?
Нет.
Название: Re: Объединение замкнутых полилиний
Отправлено: Владимир Шу от 01-10-2018, 07:30:46
Я бы пошел по более простому пути.
Вычислил бы размер фигур и нарисовал бы вокруг них прямоугольник с некоторым запасом и потом с помощью boundary (http://through-the-interface.typepad.com/through_the_interface/2010/06/tracing-a-boundary-defined-by-autocad-geometry-using-net.html) нашел бы общий контур, лишнее удалил бы. Все.
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Ficecream.me%2Fuploads%2F8ba958464985b6bd983992b799556c04.png&hash=defda0254ce065e2fc79ee8bc8057a4d)
Название: Re: Объединение замкнутых полилиний
Отправлено: Александр Ривилис от 01-10-2018, 21:50:34
Я бы пошел по более простому пути.
Вычислил бы размер фигур и нарисовал бы вокруг них прямоугольник с некоторым запасом и потом с помощью boundary (http://through-the-interface.typepad.com/through_the_interface/2010/06/tracing-a-boundary-defined-by-autocad-geometry-using-net.html) нашел бы общий контур, лишнее удалил бы. Все.
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Ficecream.me%2Fuploads%2F8ba958464985b6bd983992b799556c04.png&hash=defda0254ce065e2fc79ee8bc8057a4d)
Этот способ имеет такое количество ограничений и подводных камней, что используемый способ с Region значительно предпочтительней.
Название: Re: Объединение замкнутых полилиний
Отправлено: Владимир Шу от 02-10-2018, 07:32:24
Этот способ имеет такое количество ограничений и подводных камней, что используемый способ с Region значительно предпочтительней.
А можно несколько больше подробностей? Мне не так часто требуется что-то объединить, но знать об ограничениях применимости данного метода ИМХО крайне полезно.
Название: Re: Объединение замкнутых полилиний
Отправлено: Александр Ривилис от 02-10-2018, 11:44:05
А можно несколько больше подробностей?
Достаточно того, что для работы _BOUNDARY (или её .NET или ObjectARX обертки) требуется видимость всех примитивов на экране.