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

Посчитать блоки по именам

Массовые операции команда: СЧЕТБЛОКforeach · assoc ~6 мин

Быстрая проверка перед выпуском: сколько каких блоков на плане? Соберём счётчик, который группирует выбранные блоки по именам и печатает список с количеством.

  • Копим список пар «имя — количество»: встретили имя впервые — добавили с единицей, встретили снова — увеличили счётчик.

Код

(defun c:СЧЕТБЛОК (/ ss i e nm lst p)  (setq ss (ssget '((0 . "INSERT"))))  (if ss    (progn      (setq i 0 lst nil)      (repeat (sslength ss)        (setq e (ssname ss i)              nm (cdr (assoc 2 (entget e)))              p (assoc nm lst))        ; имя уже в списке — плюс один; нет — добавить с единицей        (setq lst (if p                    (subst (cons nm (1+ (cdr p))) p lst)                    (cons (cons nm 1) lst)))        (setq i (1+ i))      )      (foreach x lst        (princ (strcat "\n" (car x) " — " (itoa (cdr x)) " шт.")))    )  )  (princ))
(assoc nm lst)
— та же assoc, что искала свойства, ищет имя в НАШЕМ списке-накопителе
(1+ (cdr p))
— старый счётчик плюс один
(cons (cons nm 1) lst)
— новое имя — добавить пару «имя . 1» в начало списка
foreach x lst
— пройти по накопленному списку и напечатать каждую пару

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

Восстановите логику счётчика (по смыслу, не по строкам):

Что здесь делает (assoc nm lst)?

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

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

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

Смежные инструменты сервиса:Спецификация с плана — подсчёт блоков DXF