AutoLISP для проектировщика
Указать объект и узнать, что у него внутри
Выбор объектов команда: ЧТОЭТОentsel · entget · assoc · cdr ~5 мин
Почти любая автоматизация начинается одинаково: взять объект и посмотреть его свойства. Сделаем команду-«рентген»: щёлкнул — узнал тип и слой.
- Свойства объекта хранятся парами «код . значение»: 0 — тип, 8 — слой, 2 — имя блока.
- entsel спрашивает один объект, entget выдаёт его список пар, assoc находит пару по коду, cdr берёт из пары значение.
Код
(defun c:ЧТОЭТО (/ p d) (setq p (entsel "\nУкажите объект: ")) (if p (progn (setq d (entget (car p))) (princ (strcat "\nТип: " (cdr (assoc 0 d)))) (princ (strcat "\nСлой: " (cdr (assoc 8 d)))) ) (princ "\nНичего не указано.") ) (princ))
- (if p
- — защита: пользователь мог нажать Esc или промахнуться — тогда просто выходим без ошибки
- (car p)
- — entsel возвращает «объект + точку щелчка»; car берёт сам объект
- assoc 8 d
- — найти в списке свойств пару с кодом 8 — это слой
- progn
- — обёртка «выполни несколько действий подряд» — if сам по себе умеет только одно
Попробуйте сами
Код печатает слой (код 8). Поменяйте код пары так, чтобы печаталось имя блока, — подсказка в принципе урока. Мокап справа реагирует сразу: попробуйте 0, 8 и 2.
(princ (cdr (assoc d)))
код пары
Условный результат
Команда: ЧТОЭТО
Укажите объект:
СС_СПС
Что вернёт (cdr (assoc 0 d)) для блока извещателя?
Как запустить у себя
- 1Скопируйте код кнопкой выше и сохраните в файл с расширением .lsp — в кодировке ANSI (Windows-1251), чтобы русский текст не превратился в «????».
- 2Загрузите файл: команда ЗАГПРИЛ (APPLOAD) или просто перетащите файл в окно чертежа.
- 3Введите в командной строке: ЧТОЭТО
Пробуйте на копии чертежа. В AutoCAD LT работает начиная с LT 2024.