복사하고 더블클릭해서 고치고 있다면
부재 번호, 실 번호, 측점 번호, 상세도 번호처럼 연속 번호를 붙이는 작업은 보통 문자를 복사한 뒤 하나씩 더블클릭해서 고치는 방식으로 합니다. 열 개면 참을 만하지만 백 개면 그 자체가 하나의 일이 됩니다.
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
AutoLISP을 지원하는 CAD에서 동작합니다. 문제가 있다면 네이버 카페에 CAD 종류·버전과 함께 남겨주세요.
함께 쓰면 좋은 CATS 명령
자주 묻는 질문
"12A"처럼 숫자가 중간에 있는 문자도 되나요?
안 됩니다. 문자 끝에 있는 숫자만 인식합니다(12A는 끝이 영문이라 대상이 아닙니다). A12, P-001, 15처럼 숫자로 끝나는 문자에서 사용하세요.
기존 문자를 일괄로 다시 매기는 것도 되나요?
NINC는 새 번호를 배치하는 리습입니다. 이미 배치된 번호를 다시 매기는 기능은 별도 리습으로 준비 중이며, 리습 자료실 RSS나 네이버 카페에서 소식을 받아보실 수 있습니다.