복사하고 더블클릭해서 고치고 있다면
부재 번호, 실 번호, 측점 번호, 상세도 번호처럼 연속 번호를 붙이는 작업은 보통 문자를 복사한 뒤 하나씩 더블클릭해서 고치는 방식으로 합니다. 열 개면 참을 만하지만 백 개면 그 자체가 하나의 일이 됩니다.
NINC는 기준 문자를 한 번 선택한 뒤, 클릭하는 위치마다 끝 번호를 증가시킨 복사본을 만들어 줍니다. 문자 스타일·높이·레이어는 기준 문자를 그대로 따릅니다.
동작 방식과 주의할 점
- 문자 끝의 숫자만 증가합니다. "P-001"은 "P-"를 유지한 채 001 부분이 커지고, 자리수도 유지됩니다(001 → 002 → … → 010).
- 증가 간격을 바꿀 수 있습니다. 2를 입력하면 P-001 → P-003 → P-005, 음수를 입력하면 역순 번호도 가능합니다.
- 한 줄 문자(TEXT) 전용입니다. 여러 줄 문자(MTEXT)는 지원하지 않습니다.
- 실수했더라도 걱정 없습니다. 전체 작업이 UNDO 그룹으로 묶여 있어 U 한 번이면 이번에 만든 번호가 모두 취소됩니다.
이런 작업에 씁니다
- 구조: 기둥·보 부재 번호(C1, C2… / G-01, G-02…) 배치
- 건축: 실 번호, 창호 번호(W-01…), 상세도 번호 매기기
- 토목: 측점 번호, 관정·맨홀 번호 연속 표기
사용 순서
- 1
APPLOAD 명령으로 내려받은 number-increment.lsp를 로드합니다.
- 2
명령행에 NINC 를 입력합니다.
- 3
기준이 될 번호 문자(예: P-001)를 클릭해 선택합니다.
- 4
증가 간격을 입력하거나 Enter로 기본값 1을 사용합니다.
- 5
다음 번호를 놓을 위치를 연속 클릭하고, 끝나면 Enter로 종료합니다.
코드 전문
다운로드 파일은 아래 코드와 100% 동일합니다. 붙여넣기보다 파일 다운로드 후 APPLOAD 로드를 권장합니다.
;;; ------------------------------------------------------------
;;; AutoCATS 리습 자료실
;; 명령: NINC
;; 기능: 기준 문자의 끝 번호를 증가시키며 클릭 위치에 연속 복사 (P-001 → P-002 …)
;; 출처: https://www.autocats.co.kr/lisp/number-increment
;; 버전: 1.0 (2026-07-20)
;; 라이선스: 자유 사용·수정, 재배포 시 출처(autocats.co.kr) 표기
;; 안전: *error* 핸들러 + UNDO 그룹(한 번의 U로 전체 취소), 파괴적 동작 없음
;;; ------------------------------------------------------------
(defun c:NINC (/ *error* ninc-split ninc-pad oldecho undo-open sel ent data raw
pair head tail num width step idx pt newstr newdata)
(defun *error* (msg)
(if undo-open
(progn (command "_.UNDO" "_End") (setq undo-open nil)))
(if oldecho (setvar "CMDECHO" oldecho))
(if (and msg (not (wcmatch (strcase msg) "*CANCEL*,*QUIT*,*EXIT*,*취소*")))
(princ (strcat "\n[NINC] 중단: " msg)))
(princ))
;; 문자 끝의 숫자를 분리한다: "P-001" → ("P-" . "001"), "12" → ("" . "12")
(defun ninc-split (s / i)
(setq i (strlen s))
(while (and (> i 0) (wcmatch (substr s i 1) "#"))
(setq i (1- i)))
(cons (substr s 1 i) (substr s (1+ i))))
;; 자리수를 유지하며 0을 채운다: (ninc-pad 2 3) → "002"
(defun ninc-pad (n w / s)
(setq s (itoa n))
(while (< (strlen s) w) (setq s (strcat "0" s)))
s)
(setq sel (entsel "\n[NINC] 기준이 될 번호 문자(TEXT)를 선택하세요: "))
(setq ent (if sel (car sel) nil))
(if (and ent (= (cdr (assoc 0 (entget ent))) "TEXT"))
(progn
(setq data (entget ent)
raw (cdr (assoc 1 data))
pair (ninc-split raw)
head (car pair)
tail (cdr pair))
(if (= tail "")
(princ "\n[NINC] 문자 끝에 숫자가 없습니다. 예: P-001, A12, 15")
(progn
(setq num (atoi tail) width (strlen tail))
(setq step (getint "\n증가 간격 (음수 가능) <1>: "))
(if (or (null step) (= step 0)) (setq step 1))
(setq oldecho (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(command "_.UNDO" "_Begin")
(setq undo-open T idx 0)
(while (setq pt (getpoint "\n다음 번호를 놓을 위치 클릭 (Enter 종료): "))
(setq idx (1+ idx)
newstr (strcat head (ninc-pad (+ num (* idx step)) width))
newdata (subst (cons 1 newstr) (assoc 1 data) data)
newdata (subst (cons 10 pt) (assoc 10 newdata) newdata))
(if (assoc 11 newdata)
(setq newdata (subst (cons 11 pt) (assoc 11 newdata) newdata)))
(entmake (vl-remove-if '(lambda (x) (member (car x) '(-1 5 330))) newdata))
(princ (strcat " → " newstr)))
(command "_.UNDO" "_End")
(setq undo-open nil)
(setvar "CMDECHO" oldecho)
(princ (strcat "\n[NINC] " (itoa idx) "개 생성 완료. (U 한 번으로 전체 취소 가능)")))))
(princ "\n[NINC] 한 줄 문자(TEXT)를 선택해야 합니다. (MTEXT는 지원하지 않습니다)"))
(princ))
(princ "\n[AutoCATS] NINC 로드 완료 - 명령행에 NINC 를 입력하세요.")
(princ)
호환 CAD
위 환경에서 확인했습니다. 목록에 없는 CAD는 샘플 도면에서 먼저 결과를 대조한 뒤, CAD 종류·버전과 함께 네이버 카페에 알려주세요.
함께 쓰면 좋은 CATS 명령
자주 묻는 질문
"12A"처럼 숫자가 중간에 있는 문자도 되나요?
안 됩니다. 문자 끝에 있는 숫자만 인식합니다(12A는 끝이 영문이라 대상이 아닙니다). A12, P-001, 15처럼 숫자로 끝나는 문자에서 사용하세요.
기존 문자를 일괄로 다시 매기는 것도 되나요?
NINC는 새 번호를 배치하는 리습입니다. 이미 배치된 번호를 다시 매기는 기능은 별도 리습으로 준비 중이며, 리습 자료실 RSS나 네이버 카페에서 소식을 받아보실 수 있습니다.