CADXChange

모든 LISP 명령

CXTXTADD문자버전 1.0.0AutoCAD에서 테스트함

많은 문자에 접두어·접미어 한꺼번에 붙이기

선택한 모든 문자의 앞이나 뒤에 같은 글자를 붙입니다. 예를 들어 모든 배관 규격에 DN을, 모든 주기에 mm를 붙일 수 있습니다.

사용 방법

  1. CXTXTADD를 입력하고 문자를 선택합니다.
  2. 앞에 붙일 글자를 입력합니다. 붙이지 않으려면 -를 입력합니다.
  3. 뒤에 붙일 글자를 입력합니다. 붙이지 않으려면 -를 입력합니다.

알아 두세요

  • 여러 줄 문자의 서식 코드는 건드리지 않습니다.

AutoCAD에서 불러오기

  1. 파일을 원하는 곳에 저장합니다.
  2. APPLOAD를 입력하고 파일을 선택한 뒤 '로드'를 누릅니다.
  3. 명령 이름을 입력합니다: CXTXTADD.

시작할 때마다 쓰려면 같은 대화상자에서 '시작 그룹'에 추가하거나, 선택 사항인 로더로 폴더 전체를 한 번에 불러옵니다. 선택 사항인 로더에 대해

AutoCAD(정식 버전)에서 테스트했습니다. AutoLISP를 실행하는 다른 프로그램에서도 될 수 있지만 테스트하지 않았습니다.

코드

숨겨진 부분이 없는 일반 텍스트입니다. cxtxtadd.lsp 이름의 파일에 복사하거나 내려받으세요.

;;; ============================================================================
;;; CXTXTADD - Add a prefix or suffix to texts
;;; Version 1.0.0
;;; CADXChange LISP tools - https://cadxchange.net/resources/lisp/cxtxtadd
;;; Tested in: AutoCAD (full version). Other programs that run AutoLISP may work but are not tested.
;;; Copyright (c) CADXChange. Free for personal and commercial use; do not resell or
;;; republish it as a collection. Terms: https://cadxchange.net/legal/lisp-terms
;;; ============================================================================

;; Add PREFIX in front of and SUFFIX after the text of every object in NAMES. Returns how many were changed.
(defun cx:txtadd-run (names prefix suffix / n)
  (setq n 0)
  (foreach e names
    (cx:text-set e (strcat prefix (cx:text-get e) suffix))
    (setq n (1+ n)))
  n)

(defun c:CXTXTADD ( / *error* cx:sv ss prefix suffix)
  (setq *error* cx:err)
  (if (setq ss (cx:pick "\nSelect texts: " '((0 . "TEXT,MTEXT"))))
    (progn
      (setq prefix (cx:ask-str "Text to add in front (- for none)" "")
            suffix (cx:ask-str "Text to add at the end (- for none)" ""))
      (cx:start '(("CMDECHO" . 0)))
      (princ (strcat "\n" (itoa (cx:txtadd-run (cx:ss->list ss) prefix suffix)) " text(s) changed."))
      (cx:end)))
  (princ))


;;; ---- Shared helpers (used by the command above; identical in every CADXChange tool) ----

(defun cx:dxf (code ed)
  (cdr (assoc code ed)))

;; Replace the text of a TEXT, ATTRIB, ATTDEF or MTEXT.
(defun cx:text-set (ename str / ed out)
  (setq ed (entget ename))
  (if (= (cx:dxf 0 ed) "MTEXT")
    (progn
      ;; MTEXT stores text in 250-character pieces: 3 groups for the first pieces, 1 for the last
      (foreach p ed (if (not (member (car p) '(1 3))) (setq out (cons p out))))
      (setq out (reverse out))
      (while (> (strlen str) 250)
        (setq out (append out (list (cons 3 (substr str 1 250)))) str (substr str 251)))
      (setq ed (append out (list (cons 1 str)))))
    (setq ed (subst (cons 1 str) (assoc 1 ed) ed)))
  (entmod ed)
  (entupd ename)
  T)

;; The text of a TEXT, ATTRIB, ATTDEF or MTEXT (MTEXT keeps its codes).
(defun cx:text-get (ename / ed s)
  (setq ed (entget ename))
  (if (= (cx:dxf 0 ed) "MTEXT")
    (progn
      (setq s "")
      (foreach p ed (if (= (car p) 3) (setq s (strcat s (cdr p)))))
      (strcat s (cx:dxf 1 ed)))
    (cx:dxf 1 ed)))

;; Close the undo step and put the system variables back.
(defun cx:end ()
  (foreach v cx:sv (setvar (car v) (cdr v)))
  (command "_.UNDO" "_End")
  (setq cx:sv nil)
  (princ))

;; Error handler: restores everything, stays quiet on Esc.
(defun cx:err (msg)
  (if (> (getvar "CMDACTIVE") 0) (command))
  (cx:end)
  (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*EXIT*")))
    (princ (strcat "\nError: " msg)))
  (princ))

;; Use the objects already selected, or ask the user to select; FILTER is an ssget filter list or nil.
(defun cx:pick (msg filter / ss)
  (setq ss (if filter (ssget "_I" filter) (ssget "_I")))
  (if (null ss)
    (progn
      (princ msg)
      (setq ss (if filter (ssget filter) (ssget)))))
  ss)

;; Ask for a string (spaces allowed) with a default; "-" means an empty string.
(defun cx:ask-str (msg def / v)
  (setq v (getstring T (strcat "\n" msg " <" def ">: ")))
  (cond ((= v "") def) ((= v "-") "") (T v)))

;; Save the system variables in VARS ((name . value) ...), set them, and open one undo step.
;; The caller declares cx:sv as a local so the saved values live exactly as long as the command.
(defun cx:start (vars)
  (setq cx:sv (mapcar (function (lambda (v) (cons (car v) (getvar (car v))))) vars))
  (command "_.UNDO" "_Begin")
  (foreach v vars (setvar (car v) (cdr v)))
  (princ))

;; Selection set to a list of entity names.
(defun cx:ss->list (ss / i out)
  (setq i 0)
  (if ss
    (repeat (sslength ss)
      (setq out (cons (ssname ss i) out)
            i   (1+ i))))
  (reverse out))

(princ "\nCXTXTADD loaded. Type CXTXTADD to start.")
(princ)

버전 기록

버전 1.0.0 · 2026년 10월 27일

첫 번째 릴리스.

여러 도면에 한꺼번에 쓰고 싶으신가요?

TextSync는 폴더 안의 도면 전체에 이런 작업을 한 번에 처리합니다.

TextSync

다른 명령: 문자