|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Выравнивание полилинии в одну линию.
Регистрация: 16.10.2007
Сообщений: 7
|
||
Просмотров: 37811
|
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
1. Полилиния LW, 2d, 3d ?
2. Есть или нет дуговые сегменты? 3. Примерчик приложи
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 16.10.2007
Сообщений: 7
|
VVA :
2d полилиния без дуговых сегментов. Технически это выглядело бы примерно так: 1. Взять координаты вершин полилинии. 2. Вычислить длину каждого сегмента. 3. Построить полилинию из заданной точки с заданными длинами. Либо математически изменить координаты вершин существующей линии. Вот только в лиспе не силен, к сожалению. Последний раз редактировалось f0lk, 25.03.2008 в 16:53. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Примерчик (возможно) требует пригонки и обработки напильником
(defun c:razv ( / P lst2 lst n obj krd) (setq krd 0 n 0 obj (entget (car (entsel "Выберите полилинию ")))) (if (/= (cdr (assoc 0 obj)) "LWPOLYLINE") (progn (alert "Это не LW полилиния") (exit))) (setq p (trans (getpoint "Куда вставлять развертку ") 1 0)) ;записывает координаты вершин (while (/= krd nil) (setq krd (nth n obj)) (if (= (car krd) 10) (setq lst (append lst (list (list (cadr krd) (caddr krd))))) );end of if (setq n (1+ n)) );end of while ;записывает расстояния (setq n 0) (while (/= (nth (1+ n) lst) nil) (setq lst2 (append lst2 (list (distance (nth n lst) (nth (1+ n) lst)))) n (1+ n) );end of setq );end of while ;строит полилинию (setq n 0) (entmakex '((0 . "POLYLINE") (66 . 1))) (entmakex (list '(0 . "VERTEX") (append '(10) (list (car p) (cadr P))))) (while (/= (nth n lst2) nil) (setq p (list (+ (car p) (nth n lst2)) (cadr p))) (setq n (1+ n)) (entmakex (list '(0 . "VERTEX") (append '(10) (list (car p) (cadr P))))) );end of while (entmakex '((0 . "SEQEND"))) );end defun P.S. Запускать командой "razv".
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 25.03.2008 в 21:40. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Я тут тоже немного размялся
![]() RAZV1 - создает развернутую новую LW полилинию RAZV2 - разворачивает существующую Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Копирует так-же круги и любые блоки, НО чтоб центр (или точка вставки для блока) лежали строго на вершине полилинии.
Код:
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 21.05.2008 в 12:57. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Дима_, Только я бы сравнивал координаты с допуском. У меня бывали случаи, когда 2 одинаковые точки не были equal
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Один из вариантов:
Код:
--- Добавлено: слои должны быть разморожены и разблокированы (этот контроль не выполняется). Отрисовка нового отрезка и простановка блоков вершин выполняется на текущем слое с текущими установками; точки, блоки и окружности - копируются исходные. --- Добавлено, часть 2: и тишина...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Последний раз редактировалось Кулик Алексей aka kpblc, 22.05.2008 в 23:02. |
|||
![]() |
|
||||
Регистрация: 16.10.2007
Сообщений: 7
|
Кулик Алексей aka kpblc - пытаюсь разобраться с функциями =)
Можно ли сделать так чтобы не только окружности и блоки разворачивались, а также отрезки, в идеале еще и выноски, не обязательно красиво - это уже мелочи =) Всем откликнувшимся огромное спасибо! |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Чего-чего?? ОБразец в студию!
Хотя... ближайшие два дня точно не сяду - не до того будет ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Посоветуйте пожалуйста, как поступить в моем случае. В прикрепленном чертеже желтая полилиния и ее пересекает некое кол-во полилиний других цветов. Хотелось бы выпрямить желтую так, чтобы остальные остались ее пересекать в тех же местах, т.е. на тех же расстояниях от начала желтой. Реально ли осуществить?
Последний раз редактировалось skkkk, 01.07.2008 в 16:19. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Думается, надо загнать каждую из пересекаемых линий в блок. Тогда возникает вопрос, как загнать в блок их попроще (меньшими телодвижениями)? Что-то типа нажать кнопку на панели, затем кликнуть объект - (оп!) и он уже блок (без диалоговых окон)....Может есть в КАДе стандартное решение, но я его не знаю
![]() |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Одно НО
В SETUB3 точка вставки блока посередине габарита (для отрезков - посередине), а для кода Дима_ нужно Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Алексей, а в твоем коде (#15) что это за зеленые мишени по бывшим вершинам появляются на распрямленном отрезке? Можно их убрать? И на него (отрезок) из всех выбранных мной блоков почему-то переносится только первый. И еще у меня оба лиспа (второй - от Димы_) выпрямленную линию делают задом наперед. С чего бы это вдруг?? Не страшно, конечно, Rotate спасает, но изящность процесса портится
![]() VVA , в лиспе Алексея тоже надо, чтобы точка вставки блока совпадала с вершиной Последний раз редактировалось skkkk, 01.07.2008 в 19:26. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Не знаю, я детально не анализировал, Алексею видней всех.
![]()
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
skkkk, #23 в продолжение #19 и на его основе?
"Зеленые" типа точки - на самом деле блоки, которые показывать должны старое положение вершин. Не очень понял - что значит "задом наперед". Она лично у меня отрисовывается слева направо в текущей системе координат. А вершины располагаются начиная с первой по направлению отрисовки полилинии. Хочешь - попробуй инвертировать направление (см. http://dwg.ru/dnl/607) Вопрос с "поворотом" пересекающих объектов лично я сейчас решить не в силах - прилично аналитики надо прописывать, чтоб добиться приемлемого результата (
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
именно так
![]() А у меня почему-то выпрямленная линия отрисовывается справа налево, причем и твоим лиспом и Диминым_ Помнится мне, речь шла о допуске... Цитата:
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
2 - (if (equal (cdr (assoc 10 (entget obj))) (append (nth n lst) (list 0.0)) 1e-6) и есть допуск. P.S. А понял в чем дело - скорее всего линия с права на лево получаеться потому, что исходная полилиния идет с права на лево, а сканирует программа с начала линии, исправить это без проблем, но я сейчас в отпуске и на рыбалку укатываю, через 2 дня если никто не исправит, перепишу. Пока можешь написать, что делать если исходные точки одна под другой окажется (по одной X координате) - откуда сканировать сверху вниз или наоборот.
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 02.07.2008 в 10:46. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Дима_, удачного улова, и не забудь(те) взять удочки
![]() ![]() А нельзя как-то придумать снятие вообще этого ограничения насчет соответствия вершин полилинии точкам вставки блоков? Если пересекает блок (а лучше - отрезок)в любом месте, значит переносится на выпрямляемую линию... Было бы здорово. Ведь не все пересекаемые линии проходят через центр (см. во вложении). Может, как-то можно лиспом Согласовать ориентацию блока с ориентацией объекта по аналогии с командой _measure АвтоКАДа? А по поводу справа налево. Осенило меня тут.....я сглупил конкретно, головой меня об кирпич ![]() ![]() Последний раз редактировалось skkkk, 02.07.2008 в 15:46. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Ну вот по быстрому что-то сфарганил. По идее должна разворачивать все пересекающие полилинию объекты. Особо не теститровал. Поэтому лучше пока сразу выставить МСК
Код:
>Skkkk В полилинии в твоем примере из #29 есть дублирующиеся вершины. Обработай до применения RAZV3 командой PL-VxOpt и (если нужно) Entrevs. Это ,наверное, станет очередным кандидатом в pltools (возможно в 2-х варинтах: просто развертка полилинии и развертка с пересекающими полилинию объектами)
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 02.07.2008 в 19:00. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
VVA, не разворачивает у меня пересекающие объекты
![]() Добавлено: Прошу прощения. Это относится только к прикрепленному чертежу из #29. Там все так. Ну этот чертеж, видимо, многое вытерпел.... Попробовал на новом, все работает. Огромное спасибо, Владимир ![]() ![]() Последний раз редактировалось skkkk, 02.07.2008 в 20:39. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Цитата:
>skkkk #31 В местах пересечения чего с чем?
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
![]() Вот тут во вложении красные линии. Только красными их делать не надо ![]() |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
VVA, почему-то некорректно разворачивается полилиния в примере. Длина развернутой не совпадает с длиной оригинала (при проверке entlen'ом и в свойствах). Не знаете, в чем может быть дело? Всю голову сломал. МСК стоит. Круглая часть полилинии создана обрезкой круга и присоединением pedit'ом, только на ней замечена такая ошибка. И еще не все коротенькие черточки переносит
![]() P.S. Речь о лиспе с #30 |
|||
![]() |
|
||||
Регистрация: 03.04.2013
Сообщений: 5
|
Доброго всем дня! Проьлемка в том, что есть не ровные полилинии которые нужно сделать ровными и той же длины. Лисп razv подходит, но только для горизонтальных, а если у меня вертикальные линии прога их на 90 градусов поворачивает.. В чертеже у меня они то так и должны быть, ровные верт-ые и ровные гориз-ые. Я до этого скачивал лисп - l_align_xy Александра Ривилиса, она делает все как полагается, единственно только на отрезках... Подскажите как проблему решить или ссылочку на нужный лисп киньте... А надо простые полилинии и 3д полилинии. Заранее благодарен!
|
|||
![]() |
|
||||
Геодезист Регистрация: 23.05.2012
Ухта
Сообщений: 1,377
|
Я так понимаю, что пост написан в развитие этой темы.
__________________
Как-то так. |
|||
![]() |
|
||||
Регистрация: 24.03.2021
Сообщений: 1
|
Цитата:
Если бы еще иметь возможность захватывать близлежащие объекты (в указанном диапазоне/коридоре) и корректно наносить их на развертку, цены бы этому коду не было. ![]() |
|||
![]() |
|
||||
Регистрация: 13.05.2022
Сообщений: 33
|
Не подскажите в чем проблема? пытаюсь развернуть полилинию но смотрю длина развернутой линии отилчается от исходной. прикрепляю файл dwg
|
|||
![]() |
|
||||
Регистрация: 10.01.2020
Сообщений: 415
|
После разворачивания 3Д полилинии будут только две коородинаты - одна координата будет идти вдоль "профиля", а вторая будет соответствовать высотной отметке вершин 3Д полилинии
Вот программа, которая разворачивает 3Д полилинию в 2Д полилинию в плоскости XY (координат Z становится координатой Y): PL2Profile.lsp Код:
|
|||
![]() |
|
||||
Регистрация: 16.04.2016
Сообщений: 107
|
Подыму тему.
Класс! Цитата:
Ещё одно поже6лание - возможность выбора начальной и конечной точек на исходной полилинии. Чтобы развертка рисовалась не для всей линии, а в заданном диапазоне. |
|||
![]() |
|
||||
Регистрация: 16.04.2016
Сообщений: 107
|
Цитата:
![]() Правда выбираются только пересекаемые объекты. ![]() |
|||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
lisp: Длина по полилинии до точки | vosh | LISP | 19 | 15.07.2013 15:10 |
Как получить контур полилинии с различной шириной | Marina | AutoCAD | 5 | 26.12.2008 09:16 |
Странное выравнивание в таблице | Bull | AutoCAD | 8 | 12.03.2008 12:01 |
Как рисуя одну полилинию получить сразу 4? | Димас | AutoCAD | 33 | 22.07.2006 01:17 |
некорректно определяется площадь замкнутой полилинии | elena_din | AutoCAD | 16 | 23.09.2005 17:37 |