|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
02.05.2017, 22:25 | #1 | |
Преобразование широкой полилинии в конур и обратно
webcad.pro
Московская обл.
Регистрация: 06.01.2005
Сообщений: 501
|
||
Просмотров: 12182
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833
|
fillmode поменяй ))
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
"Туда" может программа Lee Mac'а, а вот "обратно" - под вопросом. Если полилиния "равноширокая" по всей длине, то можно взять среднюю линию (например, подобием, или еще были на форуме решения, вроде) и присвоить ей нужную глобальную ширину.
|
|||
|
||||
идущий по граблям Регистрация: 26.05.2005
Сообщений: 5,095
|
Например, MPL из PLTOOLS. В принципе, справляется и с полилиниями, имеющими разную ширину сегментов, но если не переусердствовать. С полилиниями, которые "поперерек себя шире" работает не совсем адекватно
|
|||
|
||||
webcad.pro Регистрация: 06.01.2005
Московская обл.
Сообщений: 501
|
Кулик Алексей aka kpblc, fillmode - знаю, но это слишком радикально :)
skkkk, вот это похоже то, что надо, но есть существенный недостаток - не работает при наличии дуговых сегментов, а это мне бы хотелось иметь. Я бы променял переменную толщину на сегменты :) Boxa, замена на мультилинию идея интересная, но мне на первый взгляд не подходит. Да и не развивают мультилинию в Автокаде - хотя потенциал у нее мог бы быть неплохой. Я даже удивляюсь почему - как начал работать с версией 2000 так до сих пор никакого движения. Всем, коллеги спасибо на наводки, особенно за Lee Mac. Припоминаю, что некогда Евгений Елпанов упоминал, что делал программый офсет для полилиний - в сущности это большая половина дела... |
|||
|
||||
Все дело в математике. Этот вопрос обсуждался здесь Как построить среднюю линию между непараллельными?
Наилучший результат дает метод "катящегося камня", правда для "хитрой" геометрии нужно повозится с настройками и по времени может быть достаточно долго
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
AY,
Один из них приведен в статье в качестве примера https://dwg.ru/pub/9 источник здесь Offset LISP Routine just needs small update. Thanks! Offset Polyline Section Dynamic Offset Multiple Offset Lisp
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
webcad.pro Регистрация: 06.01.2005
Московская обл.
Сообщений: 501
|
VVA, Владимир, большое спасибо - такое обилие вариантов - как-то даже теряешься...
В общем попробую о результатах доложу. ----- добавлено через ~12 мин. ----- VVA, у вас в примере https://dwg.ru/pub/9, если я правильно понимаю, лишняя скобка в конце. ----- добавлено через ~3 ч. ----- В первом приближении получилось нижеследующее безобразие. Для начала стремился обыграть свои нужды, поэтому не делал обработку замкнутых и самопересеченных полилиний. Толщина отступа берется из "глобальной толщины". Код:
Последний раз редактировалось AY, 05.05.2017 в 23:11. |
|||
|
||||
Цитата:
Описание Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
VVA, хотел вчера про нее написать - не успел. Однако, как я понял, она корректно отрабатывает лишь на таком дуговом сегменте, угол касательной в начале которого совпадает с углом соседнего прямого сегмента или с углом касательной дугового в этой точке. Если чертить полилинию с опцией "Дуга", то там так и происходит. На деле же полилиния "собирается" из кусков: прямых, дуговых - и далеко не факт, что это условие выполнится. На глазок кажется, что ровно, но на деле мне вручную такой точности так и не удалось добиться - все одно: если собираю полилинию из кусков, то результат плохой. Результирующий контур не получается целым - дуговые сегменты отдельно от прямых, и концы их не совпадают. То есть, для получения цельного контура придется потанцевать. Поэтому, придется либо как-то предварительно программно модифицировать дуговые сегменты, так, чтобы угол касательной в начале дугового сегмента совпадал с углом соседнего сегмента в точке их пересечения (пока даже представить не могу, как это должно работать), либо искать другие пути решения.
Сам недавно озадачился вопросом программного создания охранных зон вокруг подземных коммуникаций (см. первую миниатюру). Подошел к вопросу с одной стороны: создавал полилинии подобием в обе стороны на нужном расстоянии, потом удлинял их на крайних сегментах на величину полуширины зоны (у нас по соглашению с проектировщиками крайние сегменты - всегда прямые) , дорисовывал замыкающие сегменты и объединял. Выяснилось, что программа дает сбой в случаях, когда крайний сегмент исходной полилинии повернут относительно предыдущего сегмента (оба прямые), например, на 90 градусов и длина этого сегмента меньше полуширины зоны (расстояния смещения). При таком раскладе количество вершин одной из подобных линий на одну меньше, чем у исходной, и угол удлинения конечного сегмента будет уже другой (ситуация изображена на второй миниатюре). Тут в вычислениях можно просто голову поломать. Буквально на днях в голову пришел еще один вариант - с использованием "опустошения внутренностей" широкой полилинии (примерно из оперы темы топика). Делаю копию полилинии, удлиняю крайние сегменты на полуширину охранной зоны, и назначаю ширину по ширине охранной зоны. Затем полилинию "выполняю" (от слова полый) и все готово. Но тут вот столкнулся с двумя проблемами. Во первых, иногда зоны бывают несимметричными: с одной стороны от трубы 2 метра, а с другой - 3. Ладно, это, допустим, решаемо: делаем подобие на 1 в одну сторону (и этой линии назначаем ширину 2) и на 1.5 в другую (ей - ширину 3). Затем программой Lee Mac'а Outline Objects строим "опоясывающую" полилинию и получаем искомый контур. Вроде бы все хорошо, но кровь портит это ограничение на "угол атаки" дугового сегмента. Кто знает, как бы это побороть? Или может, кто еще имеет идеи, как сделать охранную зону, в частном случае - несимметричную? Еще рассматриваю вариант перед применением Polyline Outline сделать апрроксимацию дуговых сегментов (PL-NoArc), но есть большие подозрения, что на длинных полилиниях с большим количеством дуговых сегментов при достаточной точности обработка будет долгой. Порой при простом выборе такой полилинии происходит серьезное такое подвисание - хоть ручки отключай. ----- добавлено через ~1 ч. ----- AY, только сейчас увидел код. Проверил - вроде решает обозначенную мной проблему. Попробую посерьезней - отпишусь если что. Спасибо. |
|||
|
||||
Цитата:
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 05.05.2017 в 22:08. |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
AY, всё верно.
Насадил poly-union в свой код по отрисовке зон - полёт нормальный. Погонял со всех сторон, разные варианты, что пришли в голову - багов не обнаружил. Возможно - пока - практика покажет. Еще раз спасибо, AY - одной головной болью меньше. Показать бы этот код Ли - может, поучился бы чему |
|||
|
||||
Цитата:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
webcad.pro Регистрация: 06.01.2005
Московская обл.
Сообщений: 501
|
Разумеется к английскому гражданину Ли-Маку никаких претензий, только благодарности - умница и молодец.
Не надо впадать в преувеличения :) Гражданин решал свои задачи - полилинии переменной ширины, мы же решили свои полилинии одинаковой ширины - только и всего. Не нам учить такого мастера :) |
|||
|
||||
Согласен на 200%, это я к тому, что сам описанные ограничения заметил только вчера
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Цитата:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
webcad.pro Регистрация: 06.01.2005
Московская обл.
Сообщений: 501
|
Цитата:
Программу Ли Мака попробовал работает как надо. Корректно обрабатывает замкнутые полилинии, но немного не корректно самопересеченные (в том числе замкнутые). |
|||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Контур с штриховкой по полилинии (полилиниям) | Rusakov | Программирование | 14 | 26.12.2018 21:24 |
.NET Изобретаем велосипед, или как найти ближайшую вершину полилинии? | La Persona | .NET | 14 | 05.12.2013 10:56 |
Преобразование DWG в SVG и обратно для работы в веб приложении. | Василий Гнучев | Программирование | 20 | 07.06.2012 06:21 |
Преобразование полилинии | KuIZZInI | AutoCAD | 3 | 17.05.2011 17:19 |
Преобразование координат вершин полилинии из мировой системы координат в текущую | молодой человек | Программирование | 1 | 16.01.2010 22:57 |