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. 1Скопируйте код кнопкой выше и сохраните в файл с расширением .lsp — в кодировке ANSI (Windows-1251), чтобы русский текст не превратился в «????».
  2. 2Загрузите файл: команда ЗАГПРИЛ (APPLOAD) или просто перетащите файл в окно чертежа.
  3. 3Введите в командной строке: ЧТОЭТО

Пробуйте на копии чертежа. В AutoCAD LT работает начиная с LT 2024.