레이어 사용 현황 한눈에 확인
레이어 이름순으로 객체 수를 출력하고 사용 객체가 없는 레이어는 빈 레이어로 표시합니다.
블록 정의까지 포함한 집계
- 모형 공간과 배치 공간 객체를 집계합니다.
- 블록 정의 내부에서 사용하는 레이어도 포함합니다.
- 조회만 수행하며 레이어나 객체를 변경하지 않습니다.
사용 순서
- 1
APPLOAD로 layer-object-count.lsp를 로드합니다.
- 2
LAYCOUNT를 입력합니다.
- 3
레이어별 객체 수 목록을 확인합니다.
- 4
[빈 레이어] 표시를 정리 작업에 참고합니다.
코드 전문
다운로드 파일은 아래 코드와 100% 동일합니다. 붙여넣기보다 파일 다운로드 후 APPLOAD 로드를 권장합니다.
;;; ------------------------------------------------------------
;;; AutoCATS 리습 자료실
;; 명령: LAYCOUNT
;; 기능: 도면 전체의 레이어별 객체 수와 빈 레이어 조회
;; 출처: https://www.autocats.co.kr/lisp/layer-object-count
;; 버전: 1.0 (2026-07-27)
;; 라이선스: 자유 사용·수정, 재배포 시 출처(autocats.co.kr) 표기
;; 안전: *error* 핸들러, 조회 전용으로 도면 객체를 변경하지 않음
;;; ------------------------------------------------------------
(vl-load-com)
(defun autocats-laycount-seed (/ row rows)
(setq row (tblnext "LAYER" T) rows nil)
(while row
(setq rows (cons (cons (cdr (assoc 2 row)) 0) rows)
row (tblnext "LAYER")))
rows)
(defun autocats-laycount-add (name rows / found)
(if (setq found (assoc name rows))
(subst (cons name (1+ (cdr found))) found rows)
(cons (cons name 1) rows)))
(defun autocats-laycount-data (/ ss idx block-row block-name block-ent ent data layer rows)
(setq rows (autocats-laycount-seed)
ss (ssget "_X")
idx 0)
(if ss
(while (< idx (sslength ss))
(setq data (entget (ssname ss idx))
layer (cdr (assoc 8 data)))
(if layer (setq rows (autocats-laycount-add layer rows)))
(setq idx (1+ idx))))
(setq block-row (tblnext "BLOCK" T))
(while block-row
(setq block-name (cdr (assoc 2 block-row)))
(if (and (null (vl-string-search "*MODEL_SPACE" (strcase block-name)))
(null (vl-string-search "*PAPER_SPACE" (strcase block-name))))
(progn
(setq block-ent (tblobjname "BLOCK" block-name)
ent (if block-ent (entnext block-ent) nil))
(while (and ent (/= "ENDBLK" (cdr (assoc 0 (entget ent)))))
(setq data (entget ent)
layer (cdr (assoc 8 data)))
(if layer (setq rows (autocats-laycount-add layer rows)))
(setq ent (entnext ent)))))
(setq block-row (tblnext "BLOCK")))
(vl-sort rows
'(lambda (left right)
(< (strcase (car left)) (strcase (car right))))))
(defun c:LAYCOUNT (/ *error* rows empty total)
(defun *error* (msg)
(if (and msg (not (wcmatch (strcase msg) "*CANCEL*,*QUIT*,*EXIT*,*취소*")))
(princ (strcat "\n[LAYCOUNT] 중단: " msg)))
(princ))
(setq rows (autocats-laycount-data)
empty 0 total 0)
(princ "\n[LAYCOUNT] 레이어별 객체 수")
(foreach row rows
(setq total (+ total (cdr row)))
(if (= 0 (cdr row))
(progn
(setq empty (1+ empty))
(princ (strcat "\n " (car row) ": 0 [빈 레이어]")))
(princ (strcat "\n " (car row) ": " (itoa (cdr row))))))
(princ (strcat "\n[LAYCOUNT] 완료: " (itoa (length rows))
"개 레이어 / " (itoa empty) "개 빈 레이어 / "
(itoa total) "개 객체"))
(princ))
(princ "\n[AutoCATS] LAYCOUNT 로드 완료 - 명령행에 LAYCOUNT 를 입력하세요.")
(princ)
호환 CAD
위 환경에서 확인했습니다. 목록에 없는 CAD는 샘플 도면에서 먼저 결과를 대조한 뒤, CAD 종류·버전과 함께 네이버 카페에 알려주세요.
이 기능, CATS Pro에는 버튼으로 있습니다
PG_LAYLST / CATS_PG_LAYLSTCATS Pro에서는 통합 레이어 도구에서 조회 결과를 다른 정리 기능과 연결합니다.CATS Pro는 계속 무료입니다. 리습 로드 없이 버튼 클릭으로 같은 작업을 처리할 수 있습니다.
함께 쓰면 좋은 CATS 명령
자주 묻는 질문
블록 안에서만 쓰는 레이어도 0으로 나오나요?
아니요. 블록 정의 내부 객체도 집계하므로 실제 참조 레이어를 구분할 수 있습니다.
빈 레이어를 바로 삭제하나요?
조회만 수행합니다. 삭제하려면 LAYPURGE 리습을 사용하세요.