숫자 문자 반올림 리습 (TROUND)

숫자로만 된 TEXT를 지정한 소수 자리로 반올림합니다.

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

이럴 때 사용하세요

물량표의 12.345와 -12.345를 소수 2자리의 12.35와 -12.35로 정리합니다. CATS Pro의 올림·내림 모드는 이 예제에 포함하지 않습니다.

지원 범위와 주의사항

  • 일반 TEXT의 부호·숫자·소수점만 허용합니다. 공백·쉼표는 제거하며 단위·필드·서식은 건너뜁니다.
  • 소수 자리는 0~8입니다. 정확한 절반은 0에서 멀어지는 방향으로 반올림합니다.
  • 뒤의 0 표시는 현재 DIMZIN 설정을 따릅니다. 도면의 표시 설정은 바꾸지 않습니다.

코드에서 살펴볼 부분

c:TROUND는 입력을 받고, autocats-tround-로 시작하는 함수가 실제 처리를 맡습니다. 객체 선택 조건과 입력값 검사를 먼저 확인하면 다른 도면 작업에도 응용할 수 있습니다.

각 파일은 단독으로 로드할 수 있습니다. CATS Pro 설치가 필요하지 않으며, 같은 이름의 사용자 명령이 있다면 defun c: 이름을 바꿔 사용하세요.

HOW TO USE

사용 순서

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

    autocats-text-round.lsp를 다운로드하고 APPLOAD로 로드합니다.

  2. 2

    TROUND를 입력합니다.

  3. 3

    명령행 안내에 따라 값을 입력하거나 기준 객체를 고릅니다.

  4. 4

    대상 객체를 선택하고 Enter를 누른 뒤 결과를 확인합니다.

SOURCE

코드 전문

명령 TROUND

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

.lsp 다운로드
;;; AutoCATS 리습 자료실
;; 명령: TROUND
;; 기능: 숫자로만 된 TEXT를 지정한 소수 자리로 반올림합니다.
;; 출처: https://www.autocats.co.kr/lisp/text-round
;; 버전: 1.0 (2026-10-23)
;; 라이선스: 자유 사용·수정, 재배포 시 출처(autocats.co.kr) 표기
;; 안전: 잠긴 레이어·외부참조 보호, 변경은 UNDO 그룹, 명령별 범위는 상세 가이드 참고

(vl-load-com)

(defun autocats-tround-safe-p (ent / data row block)
  (setq data (entget ent)
    row (tblsearch "LAYER" (cdr (assoc 8 data))))
  (and data row (= 0 (logand 4 (cdr (assoc 70 row))))
    (or (/= "INSERT" (cdr (assoc 0 data)))
      (and (setq block (tblsearch "BLOCK" (cdr (assoc 2 data))))
        (= 0 (logand 12 (cdr (assoc 70 block))))))))

(defun autocats-tround-replace-pair (code value data)
  (if (assoc code data) (subst (cons code value) (assoc code data) data)
    (append data (list (cons code value)))))

(defun autocats-tround-put (ent property value / data)
  (if (autocats-tround-safe-p ent)
    (progn
      (setq data (autocats-tround-replace-pair 1 value (entget ent)))
      (if (entmod data) (progn (entupd ent) T)))))

(defun autocats-tround-get (ent property)
  (cdr (assoc 1 (entget ent))))

(defun autocats-tround-batch (selection action / index changed skipped ent result)
  (setq index 0 changed 0 skipped 0)
  (if selection
    (repeat (sslength selection)
      (setq ent (ssname selection index)
        result (if (autocats-tround-safe-p ent) (vl-catch-all-apply action (list ent))))
      (if (and result (not (vl-catch-all-error-p result)))
        (setq changed (1+ changed))
        (setq skipped (1+ skipped)))
      (setq index (1+ index))))
  (princ (strcat "\n[TROUND] 완료: " (itoa changed) " / 건너뜀: " (itoa skipped)))
  (list changed skipped))

(defun autocats-tround-clean (value / result idx char)
  (setq result "" idx 1)
  (while (<= idx (strlen value))
    (setq char (substr value idx 1))
    (if (not (member char '("," " ")))
      (setq result (strcat result char)))
    (setq idx (1+ idx)))
  result)

(defun autocats-tround-number (value / clean idx char valid dots signs)
  (setq clean (autocats-tround-clean value)
    idx 1 valid (/= clean "") dots 0 signs 0)
  (while (and valid (<= idx (strlen clean)))
    (setq char (substr clean idx 1))
    (cond
      ((wcmatch char "#"))
      ((= char ".") (setq dots (1+ dots)) (if (> dots 1) (setq valid nil)))
      ((member char '("+" "-"))
        (setq signs (1+ signs))
        (if (or (> signs 1) (/= idx 1)) (setq valid nil)))
      (T (setq valid nil)))
    (setq idx (1+ idx)))
  (if (and valid (not (member clean '("+" "-" "." "+." "-."))))
    (distof clean 2)
    nil))

(defun autocats-tround-round (value precision / factor scaled)
  (setq factor (expt 10.0 precision) scaled (* (abs value) factor))
  (* (if (< value 0.0) -1.0 1.0) (/ (- (+ scaled 0.5 0.000000001) (rem (+ scaled 0.5 0.000000001) 1.0)) factor)))
(defun autocats-tround-apply (ent precision / number)
  (and (= "TEXT" (cdr (assoc 0 (entget ent))))
    (setq number (autocats-tround-number (autocats-tround-get ent 'TextString)))
    (autocats-tround-put ent 'TextString (rtos (autocats-tround-round number precision) 2 precision))))

(defun c:TROUND (/ *error* undo-open precision selection)
  (defun *error* (msg)
    (if undo-open (progn (command-s "_.UNDO" "_End") (setq undo-open nil)))
    (if (and msg (not (wcmatch (strcase msg) "*CANCEL*,*QUIT*,*EXIT*,*취소*")))
      (princ (strcat "\n[TROUND] 중단: " msg)))
    (princ))

  (initget 5) (setq precision (getint "\n소수 자릿수 0~8: "))
  (if (and precision (<= precision 8)) (progn
      (princ "\n대상 객체를 선택하세요: ")
      (setq selection (ssget '((0 . "TEXT"))))
      (if selection
        (progn
          (command "_.UNDO" "_Begin")

          (setq undo-open T)
          (autocats-tround-batch selection '(lambda (ent) (autocats-tround-apply ent precision)))
          (command "_.UNDO" "_End")
          (setq undo-open nil)))))
  (princ))

(princ "\n[AutoCATS] TROUND 로드 완료")
(princ)
COMPATIBILITY

호환 CAD

AutoCAD 2021AutoCAD 2026

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

WORKS WELL WITH

함께 쓰면 좋은 CATS 명령

전체 명령 보기
PG_ROUND / CATS_PG_ROUNDCATS Pro의 PG_ROUND 관련 작업을 명령 탐색기에서 확인할 수 있습니다. 아래 리습은 설명된 범위의 독립 예제입니다.
FAQ

자주 묻는 질문

CATS Pro와 기능이 완전히 같은가요?

CATS Pro의 PG_ROUND 관련 작업을 명령 탐색기에서 확인할 수 있습니다. 아래 리습은 설명된 범위의 독립 예제입니다.

변경을 되돌릴 수 있나요?

도면을 변경하는 명령은 한 UNDO 그룹으로 묶습니다. 완료 후 U로 되돌릴 수 있습니다. 집계·조회 명령은 도면을 변경하지 않습니다. 작업 전 복사본에서 결과를 확인하세요.

WORKFLOW PRODUCTS

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

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

FREE LISP + FREE ADD-IN

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

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