Новые команды для работы с полилинией - Страница 15
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Новые команды для работы с полилинией

Новые команды для работы с полилинией

Ответ
Поиск в этой теме
Непрочитано 14.09.2006, 13:30 4 |
Новые команды для работы с полилинией
VVA
 
Инженер LISP
 
Минск
Регистрация: 11.05.2005
Сообщений: 6,996

Данный набор программ является коллективным продуктом участников форумов autocad.ru и dwg.ru с моими доработками.
Захотелось собрать все программы для работы с полилиниями воедино и оформить как полагается.

=========== Доступные команды PLTOOLS=================
Редакция 17.06.2014
PL-JOIN -Объединение выбранных полилиний
PL-VFI -вставка вершин в выбранной полилинии в местах пересечения с
указанными полилиниями, линиями, дугами
PL-JOIN3D -Объединение 3D полилиний
PL-L2A -Замена линейного сегмента в полилинии дуговым сегментом.
PL-A2L -Замена дугового сегмента в полилинии линейным сегментом.
PL-DIV -Разбивает выбранный сегмент полилинии на указанное количество
сегментов или через указанное расстояние
PL-DIVAll -Разбивает все сегменты полилинии на указанное количество
сегментов или через указанное расстояние
PL-VxAdd -Добавляет новую вершину к полилинии
ENTREVS -Реверс объекта
ENTREV -Реверс объектов (множественный выбор)
PL-CW -Реверс выбранных полилиний по часовой стрелке
PL-CCW -Реверс выбранных полилиний против часовой стрелки
PL-VxRdc -Удаление вершин полилиний, которые лежат на одной прямой
PL-VxDel -Удаление выбранной вершины
pl-VxOpt -Удаление совпадающих вершин из полилинии
PL-NoArc -Аппроксимация дуговых сегментов полилинии
PL-Clone -Построение полилинии путем копирования ее сегментов
PL-VxMove -Перемещение вершин полилинии
PL-Vx1 -Изменение начала полилинии
ConvTo2d -Преобразование линейных объектов в 2D полилинии
ConvTo3d -Преобразование линейных объектов в 3D полилинии
MPL -Построение средней линии Более продвинутая версия Rollin_Ball.lsp Find MidBoundary between two polylines.
R3P -Прямоугольгик по 3-м точкам
PL-P90 -Рисование перпендикулярных друг к другу сегментов полилинии
PL-CSE -Объединение 2d полилиний по примитиву
PL-SgWidth -Изменить ширину сегмента полилинии

Реверс дуговых сегментов полилинии из #79
На дуговых сегментах полилинии тип линий может быть "вверх тормашками", причем реверс не помогает. Этот артефакт можно побороть, если в полилинии включить "генерацию типа линий".

Панели, лисп и инструкции здесь http://dwg.ru/dnl/607
Иконки для темной темы здесь
Обсуждаем, критикуем, предлагаем

Миниатюры
Нажмите на изображение для увеличения
Название: plrevers.jpg
Просмотров: 16815
Размер:	30.3 Кб
ID:	21079  


Последний раз редактировалось VVA, 08.09.2023 в 13:25. Причина: ссылка на иконки для темной темы
Просмотров: 379333
 
Непрочитано 27.07.2010, 18:16
#281
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,179
<phrase 1=


сейчас попробую, а то я чуть не так делал..

проверил
Сделал как Вы говорите:
Вашу модифицированную комманду pl-join назвал pl-join1

и закинул в plttools.lsp
параллельно исправив двоеточия на тире в двух строчах
(pl-error-save-sysvar '(("PEDITACCEPT" 1)("CMDECHO" 0)))
(pl-error-restore-sysvar)

правильно?

(defun C:PL-JOIN1 ( / ssnab count en *error* ss)
(setq *error* pltool-err)
(or *pl-activedoc* (setq *pl-activedoc* (vla-get-activedocument (vlax-get-acad-object))))
(vla-StartUndoMark *pl-activedoc*)
(pl-error-save-sysvar '(("PEDITACCEPT" 1)("CMDECHO" 0)))
(setq ssnab (ssget "_I"))
(while (not ssnab)(setq ssnab (ssget)))
;;;И 3d полилинии
;(setq ssnab(3dpljn ssnab 1e-6 "AcDb3dPolyline"))
(setq count 0)
(while (setq en (ssname ssnab count))
(if (member '(100 . "AcDb3dPolyline")(entget en))
(ssdel en ssnab)
(setq count (1+ count))
)
)
(setq en (entlast) count 0 ss (ssadd))
(if (> (sslength ssnab) 1)
(if (and (getvar "PEDITACCEPT") (= (getvar "PEDITACCEPT") 1))
(vl-cmdf "_pedit" "_Multiple" ssnab "" "_Join" 0 "")
(vl-cmdf "_pedit" "_Multiple" ssnab "" "_Y" "_Join" 0 ""))
)
(while (and (setq en (entnext en))
(= (cdr(assoc 0 (entget en))) "LWPOLYLINE"))
(setq count (1+ count))(ssadd en ss)
)
(if (> count 0)
(if (= (getvar "SysCodePage") "ANSI_1251")
(princ (strcat "\nСоздано " (itoa count) " простых полилиний!!!"))
(princ (strcat "\nСreated "(itoa count)" LW polylines"))
))
(if (> (sslength ss) 0)(vl-cmdf "_.SELECT" ss ""))
(setq ssnab nil ss nil)
(pl-error-restore-sysvar)
(vla-EndUndoMark *pl-activedoc*)
(princ))


в test и test1 изменил

Цитата:
(defun C:TEST1 ()
(vl-load-com)
(C:PL-JOIN1)
(vla-sendcommand (vla-get-activedocument (vlax-get-acad-object))
"PL-VxRdc\n_p\n\n0.15\n")
)
Цитата:
(defun C:TEST ()
(C:PL-JOIN1)
(SSSETFIRST nil (ssget "_p"))
(C:PL-VxRdc)
)
и результаты те же что и описывал #279
для test1 ругается
Цитата:
Command:
Введите max отклонение от прямой (H) [угловой допуск A/отклонение H] <0.15>:
0.15
ERRNO # 5: bad argument type: 2D/3D point: nil
_.redrawall
Command:
__________________
Kiev, Ukraine

Последний раз редактировалось sasha_lif, 27.07.2010 в 18:38.
sasha_lif вне форума  
 
Непрочитано 26.09.2010, 16:43
#282
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Можно сделать так - как вариант, допустим pl-join - чтобы разом во всем файле сшивались линейные элементы только с одинаковыми свойствами (слой, цвет, вес, тип линии, высота-Elevation)?
Для упрощения и облегчения файлов, для удобства поиска элементов, описывающих один объект и т.п. Для сшивания файлов в один. И т.п.
Иначе при сшивании можно потерять много нужного.
АлексЮстасу вне форума  
 
Непрочитано 26.09.2010, 18:13
#283
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


АлексЮстасу посмотри TotalPurge
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 26.09.2010, 20:45
#284
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от Disney Посмотреть сообщение
АлексЮстасу посмотри TotalPurge
То, что нужно! (Только сшивает линии с разной глобальной толщиной, а толщину линий почему-то обнуляет).
А ведь TotalPurge у меня стоит уже не меньше полугода!
Спасибо.
TotalPurge заодно и высоты (Elevation) учитывает.

Не. Все-таки в очередной раз укрепляюсь в мысли, что универсальные, с большим числом действий программы не есть хорошо. Реальный файл эта TotalPurge обрабатывала минут пятнадцать минимум. А это был файл, собранный из трех файлов с одними горизонталями, которые, понятно, сшивать нужно однозначно - по границе слияния. На выходе я получил несшитые почему-то горизонтали, и почему-то все белого цвета (цвет их был другим). А пока это писал, Автокад вылетел с сообщением о фатальной ошибке.

Так или иначе, но было бы здорово иметь утилиту сшивания линейных элементов с учетом их свойств, но которая делала бы только это, и делала бы это быстро. Для сравнения - pl-join сшила эти горизонтали за считанные секунды. (Хотя и выдала страшное сообщение, что сейчас будет очень-очено долго).
Лучше бы был вариант pl-join или опция в pl-join, которая бы обеспечивала сшивание только соответственных линейных элементов.

Последний раз редактировалось АлексЮстасу, 26.09.2010 в 23:29.
АлексЮстасу вне форума  
 
Непрочитано 27.09.2010, 05:47
#285
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


АлексЮстасу, выложи свой файл (до оптимизации), тот что составлен из 3...
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 27.09.2010, 12:26
#286
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Для сравнения - pl-join сшила эти горизонтали за считанные секунды. (Хотя и выдала страшное сообщение, что сейчас будет очень-очено долго).
Это сообщение выдает команда pedit. По поводу учета elevation нужна проверка. По работе программы есть принципиальный момент: выбор делает пользователь один раз за работу команды. Поэтому для фильтрации обрабатывается предварительный выбор. Для учета свойств я использую Select Similar Ривилиса
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 27.09.2010, 13:16
#287
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от VVA Посмотреть сообщение
По поводу учета elevation нужна проверка. По работе программы есть принципиальный момент: выбор делает пользователь один раз за работу команды. Поэтому для фильтрации обрабатывается предварительный выбор. Для учета свойств я использую Select Similar Ривилиса
"elevation нужна проверка" - в каком смысле?
Select Similar - оч. удобный инструмент, но последовательно запускать pl-join по числу сочетаний цвета, слоя, веса, типа, высоты (??) и долго, и легко пропустить что-то, и легко что-то не учесть.
Ну, да, выбрать все и все сшить, но с учетом свойств элементов. Одинаковые свойства - сшиваются. Разные - нет.
Согласитесь, что задача сшивания в одно естественна именно для элементов с одинаковыми свойствами, чем всего огульно. Мы же все не случайно вычерчиваем в разных слоях, цветах, типах и т.п.
АлексЮстасу вне форума  
 
Непрочитано 06.10.2010, 21:26
#288
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


VVA, для 11 када годится http://dwg.ru/dnl/607? А то установил - появились проблемы с чертежом.
Yuzer вне форума  
 
Непрочитано 06.10.2010, 23:28
#289
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,407


Какие именно?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.10.2010, 23:47
#290
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Какие именно?
После загрузки приложения копирование с базовой точкой вело себя странно: при вставке объекта было незначительное смещение (точка та же, а объект располагается левее). Сначала грешил на единицы. Выполнил очистку, очистил прокси, поставил значение demandload в 0 - не помогло. При чем интересный факт: после выполнения всех очисток в пространстве листа копирование выполняется нормально, а в модели - глючит. После очистки в модели копируется нормально, а в листе - глючит.
В какой-то момент заметил, что все отрезки стали полилиниями (хз какие я при этом команды тыкал - может из экспресов что-то). Бодался где-то час: создавал новые файлы, копировал содержимое и т.д. Был ли это глюк самого файла или приложения сказать не могу, потому что после удаления файла удалил и приложение.
В новом файле глюков не наблюдал.
Yuzer вне форума  
 
Непрочитано 07.10.2010, 00:05
#291
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,407


Цитата:
Сообщение от Yuzer Посмотреть сообщение
при вставке объекта было незначительное смещение
А что с привязками и шагом?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.10.2010, 00:10
#292
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А что с привязками и шагом?
Шаг, естественно, выключен, привязки - включены.
Алексей, у меня такие чудеса впервые (реально подумывал о перестановке када)
Yuzer вне форума  
 
Непрочитано 07.10.2010, 00:12
#293
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,407


Возможно, именно привязки и сработали... И потом, можно же выполнять не копирование с базовой точкой, а вставку с исходными координатами - тогда тоже смещение есть?
P.S. Интересно, как это смещение было определено?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.10.2010, 00:21
#294
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
P.S. Интересно, как это смещение было определено?
Копирую отрезок - базовая точка конец отрезка. Вставляю скопированный в ту же точку - между отрезками небольшое расстояние (в листе 3,741мм).

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
вставку с исходными координатами
так не извращался - нервов не хватит.

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Возможно, именно привязки и сработали
Я бы грешил на это, но
Цитата:
Сообщение от Yuzer Посмотреть сообщение
При чем интересный факт: после выполнения всех очисток в пространстве листа копирование выполняется нормально, а в модели - глючит. После очистки в модели копируется нормально, а в листе - глючит.
Yuzer вне форума  
 
Непрочитано 07.10.2010, 08:49
#295
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Yuzer Посмотреть сообщение
Копирую отрезок - базовая точка конец отрезка. Вставляю скопированный в ту же точку - между отрезками небольшое расстояние (в листе 3,741мм).
А какие координаты базовой точки и вставки? Случайно не несколько парсеков?
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 07.10.2010, 10:14
#296
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Yuzer Посмотреть сообщение
VVA, для 11 када годится http://dwg.ru/dnl/607? А то установил - появились проблемы с чертежом.
В 11 не проверял, но проблем быть не должно никаких. Т.к. никаких реакторов не используется, никакие стандартные команды не переопределяются. Хотя 100 % гарантии дать не могу.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 07.10.2010, 23:02
#297
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
А какие координаты базовой точки и вставки? Случайно не несколько парсеков?
Поясните. В моей цитате вроде расписаны все действия. Вселичина смещения 3,741мм (это замерялось через ДИСТ).
Offtop: У меня в технологии допуск меньший.
Все качели в чертеже нечались после подгрузки этого приложения. Завтра поищу сейвы - проверю.
Yuzer вне форума  
 
Непрочитано 09.10.2010, 09:10
#298
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Yuzer Посмотреть сообщение
Поясните. В моей цитате вроде расписаны все действия. Вселичина смещения 3,741мм (это замерялось через ДИСТ).
Действительно, не очень точно выразил свою мысль...
Важно, где находится отрезок и каково смещение. При работе со слишком большими числами, автокад может не справиться.
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 10.10.2010, 00:20
#299
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Подгрузил на домашнем питомце - вроде все гуд. Сразу установаил мироую ПСК (кстати, может в ней были проблемы?).
Вопрос - в свойствах была панель сумма площадей полилиний - как подгрузить ее. На этот раз выполнял все указания readme файла.
Yuzer вне форума  
 
Автор темы   Непрочитано 10.10.2010, 15:43
#300
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Yuzer Посмотреть сообщение
в свойствах была панель сумма площадей полилиний - как подгрузить ее.
Это?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Новые команды для работы с полилинией