|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Создание внешнего контура на основе выделенного набора примитивов
отдел открытых горных работ
Новокузнецк
Регистрация: 06.05.2009
Сообщений: 124
|
||
Просмотров: 16145
|
|
||||
отдел открытых горных работ Регистрация: 06.05.2009
Новокузнецк
Сообщений: 124
|
Это в моём случае негодиться совсем! Т.к. самые крайние границы придется сводить в замкнутый контур. В таком случае проще обвести вручную (как я и делаю), а так как таких контуров мне приходиться делать много и регулярно, то я хотел бы уйти от данной ручной работы
![]() |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
отдел открытых горных работ Регистрация: 06.05.2009
Новокузнецк
Сообщений: 124
|
VVA, Огромное Вам спасибо!
Но увы ваша программа выдает непредсказуемый результат. Я пробовал создать контур в файле примера (который выложил в 1 посте). Получается весьма причудливо. ![]() Ps Код был взять из шапки той темы, ссылку на которую вы мне дали. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Внутри ECO использует тот же самый _boundary. Поэтому если _boubdary не подходит, то и ECO не подойдет. Чтобы получить общий контур объекты должны пересекаться.
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Ну вкратце так (если все объекты - полилинии):
Находим крайнюю полилинии и обходим вдоль нее в каком-нибудь направлении. Полилиния заканчивается - переходим на следующую по какому-нибудь правилу... и до тех пор, пока контур не замкнется. Shaft, есть какие-нибудь правила, по которым вручную контур строится? |
||||
![]() |
|
||||
отдел открытых горных работ Регистрация: 06.05.2009
Новокузнецк
Сообщений: 124
|
Do$, когда строиться вручную, то просто строиться полилиния по крайним полилиниям. Чтобы даже вершины совпадали. Т.е. если посмотреть в файле-примере, то там видно что вершины контура совпадают с вершинами карйних полилиний. Переход от крайней полилинии к внутренней производиться перпендикулярно к последней. Это желательно, но не объязательно.
Зы Если я не совсем понятно объяснил (вы скажите) Тогда я попробую изобразить это в файле-примере. Последний раз редактировалось Shaft, 09.12.2010 в 14:16. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
1. Для всех линейных объектов (не обязательно полилиний) находим общий габаритный контейнер (boundingbox). LISP. LIB. Получение габаритов для списка объектов. В результате имеем некий прямоугольник, описывающий все выбранные примитивы. Это первое грубое приближение контура 2. Обходим прямоугольник с неким шагом. Для текущей точки ищем ближайшую точку из всех выбранных примитивов и берем ее. Если не понятно, то попробую нарисовать. Мне кажется, что алгоритм рабочий.
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
отдел открытых горных работ Регистрация: 06.05.2009
Новокузнецк
Сообщений: 124
|
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Это библиотечная ф-ция для выполнения п.1 алгоритма.
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Первый вариант на основе алгоритма, изложенного в #13
Код:
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 11.12.2010 в 14:07. Причина: новая версия |
|||
![]() |
|
||||
отдел открытых горных работ Регистрация: 06.05.2009
Новокузнецк
Сообщений: 124
|
VVA, супер!
![]() На и раз это тестовая версия, то хочу высказать парочку замеченных неточностей: На скриншотах я постарался выделить проблемные места. Красная линия это результат работы программы Зеленая линия это желаемый/требуемый рузультат Для дотягивания до идеала, хотелось бы чтобы были поправленны следующие моменты: 1 - совпадение вершин контура с вершинами обводимых линий 2 - корректно "обводить" дуговые сегменты 3 - отучить программу пропускать некоторые участки (рис 1 и 3) впринципе тоже что и п.1 4 - или недоводит (рис 2)тоже можно отнести к п.1 |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Обновил код в #17
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
отдел открытых горных работ Регистрация: 06.05.2009
Новокузнецк
Сообщений: 124
|
VVA, проверил обновленный код из #17, все ошибки описаные мною в #18 остались. Только обрисовка внешних границ улучшлась
![]() ![]() ![]() ![]() P.s. Но если удастся избавиться от проблемок из #18, то это будет бесценный инструмент!!! Надеюсь не только для меня ![]() Последний раз редактировалось Shaft, 13.12.2010 в 06:54. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Никаких других проблем в #18 не описано. В #17 я выделил красным шаг обхода. Уменьшая его, будешь получать больше расчетных точек и больший % совпадения по вершинам, но и ресурсов процессора будет задействовано больше. Сейчас каждый прямой сегмент габаритного контейнера делится на 100 частей.
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
отдел открытых горных работ Регистрация: 06.05.2009
Новокузнецк
Сообщений: 124
|
Я примерно так и догадался
![]() Это из #18 я это в спойлере указал. Может зря ![]() Цитата:
|
|||
![]() |
|
||||
Попробовал создать внешний контур множества блоков - не получилось.
Допуск менял в: (setq step 70.01 ;_Шаг обхода габаритного контейнера Пишет: ; error: too few arguments А как раз было б здорово создать автоматом внешние контуры вокруг множеств блоков. |
||||
![]() |
|
||||
Регистрация: 12.04.2011
Сообщений: 37
|
Поправьте код!!!!! Он потрясающий, но....см. картинку
[img]http://i6.********/thumbs/1/2/2/Bezimyanni_8230191_14369122.jpg[/img] |
|||
![]() |
|
||||
Создание внешнего контура с помощью новой программы SuperBoundary:
1. Чертим вокруг всех нужных примитивов любой охватывающий контур с запасом. 2. Выделяем все эти примитивы, и указываем любую точку между охватывающим контуром и этими примитивами.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Регистрация: 16.10.2013
Сообщений: 395
|
Подниму тему.
Уважаемый VAA, могли бы откорректировать код из сообщения #17 в части алгоритма поиска ближайшей точки. Сейчас, как я понял, сначала строится внешний прямоугольник, потом бегунок с указанным шагом проходит по этому прямоугольнику и ищет ближайшую точку на объекте. Хотелось бы, чтобы ближайшая точка находилась не по геометрическому расстоянию до выбранных примитивов, а чтобы от вертикальной грани внешнего прямоугольника проводилась горизонталь до примитивов и в месте пересечения образовывалась точка, а для горизонтальной грани внешнего прямоугольника опускалась (или соответственно поднималась) вертикаль до ближайшего из выбранных примитивов и в месте пересечения образовывалась точка, а потом эти точки соединялись в поверхность. (на всякий случай прилагаю иллюстрацию: белая линия - это произвольный примитив, контур которого должен получиться, красным выделено то, какой контур должен получиться, зеленое - это линии внутри алгоритма, которые ищут ближайшие расстояния, голубой - это просто внешний контур) Так, как сейчас работает алгоритм, на примитивах с уклоном и выступами по уклону программа часто рисует контур некорректно, Над выступом остается много неохваченных областей. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Создание графика в AutoCAD на основе txt или xls файла | Red Nova | Программирование | 116 | 06.04.2017 09:20 |
Создание блоков из примитивов | gest | AutoCAD | 11 | 26.11.2009 10:57 |
создание набора с помощью activeX | Composter | Программирование | 3 | 15.05.2009 00:11 |
Лисп присадки мебельной фурнитуры | Скулачёв А. | LISP | 18 | 20.08.2008 13:59 |