레이어별 객체 수 조회 리습 (LAYCOUNT)

모형·배치와 블록 정의를 포함해 도면 데이터베이스의 레이어별 객체 수와 빈 레이어를 출력합니다.

코드 전문 공개 · 다운로드 파일과 100% 동일 · 출처 표기 후 자유 사용

레이어 사용 현황 한눈에 확인

레이어 이름순으로 객체 수를 출력하고 사용 객체가 없는 레이어는 빈 레이어로 표시합니다.

블록 정의까지 포함한 집계

  • 모형 공간과 배치 공간 객체를 집계합니다.
  • 블록 정의 내부에서 사용하는 레이어도 포함합니다.
  • 조회만 수행하며 레이어나 객체를 변경하지 않습니다.
HOW TO USE

사용 순서

리습 로드가 처음이라면
  1. 1

    APPLOAD로 layer-object-count.lsp를 로드합니다.

  2. 2

    LAYCOUNT를 입력합니다.

  3. 3

    레이어별 객체 수 목록을 확인합니다.

  4. 4

    [빈 레이어] 표시를 정리 작업에 참고합니다.

SOURCE

코드 전문

명령 LAYCOUNT

다운로드 파일은 아래 코드와 100% 동일합니다. 붙여넣기보다 파일 다운로드 후 APPLOAD 로드를 권장합니다.

.lsp 다운로드
;;; ------------------------------------------------------------
;;; 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)
COMPATIBILITY

호환 CAD

AutoCAD 2021AutoCAD 2026

위 환경에서 확인했습니다. 목록에 없는 CAD는 샘플 도면에서 먼저 결과를 대조한 뒤, CAD 종류·버전과 함께 네이버 카페에 알려주세요.

ONE-CLICK ALTERNATIVE

이 기능, CATS Pro에는 버튼으로 있습니다

PG_LAYLST / CATS_PG_LAYLSTCATS Pro에서는 통합 레이어 도구에서 조회 결과를 다른 정리 기능과 연결합니다.

CATS Pro는 계속 무료입니다. 리습 로드 없이 버튼 클릭으로 같은 작업을 처리할 수 있습니다.

WORKS WELL WITH

함께 쓰면 좋은 CATS 명령

전체 명령 보기
PG_LAYLST / CATS_PG_LAYLSTCATS Pro에서 레이어 목록과 레이어별 객체 수를 조회합니다.
FAQ

자주 묻는 질문

블록 안에서만 쓰는 레이어도 0으로 나오나요?

아니요. 블록 정의 내부 객체도 집계하므로 실제 참조 레이어를 구분할 수 있습니다.

빈 레이어를 바로 삭제하나요?

조회만 수행합니다. 삭제하려면 LAYPURGE 리습을 사용하세요.

WORKFLOW PRODUCTS

업무 분야에 맞는 전용 자동화도 확인해 보세요.

공통 CAD 작업은 CATS Pro로, 분야별 도면과 산출 업무는 전용 제품으로 이어갈 수 있습니다.

FREE LISP + FREE ADD-IN

리습과 CATS Pro를 함께 쓰세요.

리습은 가볍게, 반복 작업은 CATS Pro 버튼으로. 둘 다 무료입니다.