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

ADN Club => AutoCAD .NET API => Тема начата: Вильдар от 01-11-2016, 19:31:57

Название: Объединение полилиний
Отправлено: Вильдар от 01-11-2016, 19:31:57
Добрый вечер всем,
Вроде уже спрашивал что-то подобное, но, не смог найти  :-[
Нужно отдельные полилинии объединить в одну общую?
Было так:
(https://s21.postimg.org/yfmd3hodf/image.png) (https://postimg.org/image/yfmd3hodf/)
Сделать так:
(https://s16.postimg.org/7848a37yp/image.png) (https://postimg.org/image/7848a37yp/)
Только анализировать по точкам (нужно придумать и написать алгоритм), или есть класс который это умеет (типа region, brep, mpolygon).
Из второго все попробовал, не получается.
Название: Re: Объединение полилиний
Отправлено: Александр Пекшев aka Modis от 01-11-2016, 19:50:14
В плоской геометрии, не учитывая миллион проблем, которые могут возникнуть (т.е. для случая на картинке) все просто: получаешь все точки обеих полилиний и из них берешь четыре - самую верхнюю левую, самую нижнюю левую, самую верхнюю правую и самую нижнюю правую. Отсеять, сравнивая Х и Y не так сложно. Потом по этим точкам строишь новую полилинию
Название: Re: Объединение полилиний
Отправлено: Вильдар от 01-11-2016, 19:59:50
Ну понял, то есть надо алгоритм писать.
Спасибо Саш!
Название: Re: Объединение полилиний
Отправлено: Александр Пекшев aka Modis от 01-11-2016, 20:03:33
Ну понял, то есть надо алгоритм писать.
Даже алгортимы писать не нужно - загоняй точки в списки List<Point3D>() и используй преимущества linq. Например _list.OrderBy(p=>p.X).ToList() - вернет список с точками, отсортированными по значению координаты Х.
Название: Re: Объединение полилиний
Отправлено: Вильдар от 01-11-2016, 20:04:58
Так пробовал. Иногда самопересечения получаю  :-[
Название: Re: Объединение полилиний
Отправлено: Александр Ривилис от 01-11-2016, 20:24:29
Что-то подобное у нас на форуме уже было. Тут неясны условия задачи. Всегда ли должны получатся прямоугольники? Что делать если рядом два прямоугольника разной высоты? И т.д.

P.S.: Кстати, это же тоже твоя тема: http://adn-cis.org/forum/index.php?topic=7002.0
Название: Re: Объединение полилиний
Отправлено: Вильдар от 01-11-2016, 20:31:24
Ну круто будет, если бы любые полилинии могли объединяться.  8)
Но, понятно, что конкретных обстоятельств миллион.

Там, в итоге получилось - из объединенного региона полилиний взять внешний контур, т.к. все полилинии соприкасались друг с другом.
А тут, так не получается. Объединенный регион, дает две отдельные внешние петли (Loop).