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