AutoLISP для проектировщика

Заменить значение атрибута: префикс к маркировке

Блоки и атрибуты команда: ПРЕФИКСentmod · entupd · strcase ~6 мин

Заказчик попросил добавить к маркировке префикс системы. Блоков — восемьдесят. Вручную это вечер; циклом из прошлых уроков — одна команда.

  • Складываем всё изученное: набор блоков → у каждого пройти атрибуты → у нужного тега заменить значение (subst + entmod) и перерисовать (entupd).

Код

(defun c:ПРЕФИКС (/ ss i e a d)  (setq ss (ssget '((0 . "INSERT"))))  (if ss    (progn      (setq i 0)      (repeat (sslength ss)        (setq e (ssname ss i)              a (entnext e))        (while (and a (= "ATTRIB" (cdr (assoc 0 (setq d (entget a))))))          (if (= "МАРК" (strcase (cdr (assoc 2 d))))            (progn              (entmod (subst (cons 1 (strcat "ПС-" (cdr (assoc 1 d))))                             (assoc 1 d) d))              (entupd a)            )          )          (setq a (entnext a))        )        (setq i (1+ i))      )    )  )  (princ))
'((0 . "INSERT"))
— фильтр прямо в ssget: пользователь выбирает рамкой, а в набор попадут только блоки
strcase
— имя тега приводим к верхнему регистру — сравнение не зависит от того, как тег набрали
strcat "ПС-"
— новое значение = префикс + старое значение
entupd a
— перерисовать атрибут: без этого текст на экране обновится только после регенерации

Попробуйте сами

Настройте команду под другую систему: тег НОМЕР и префикс «АУ-». Подписи блоков на сцене меняются, как только оба поля верны.

(if (= "" (strcase (cdr (assoc 2 d))))
(entmod (subst (cons 1 (strcat "" (cdr (assoc 1 d))))
(assoc 1 d) d))
)
тег атрибута префикс

Условный результат

1
2
3
4

команда ищет тег «МАРК» — у этих блоков он называется НОМЕР

Зачем после entmod вызывается entupd?

Как запустить у себя

  1. 1Скопируйте код кнопкой выше и сохраните в файл с расширением .lsp — в кодировке ANSI (Windows-1251), чтобы русский текст не превратился в «????».
  2. 2Загрузите файл: команда ЗАГПРИЛ (APPLOAD) или просто перетащите файл в окно чертежа.
  3. 3Введите в командной строке: ПРЕФИКС

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