CADXChange

Alle LISP-Befehle

CXTXTSTYLETextVersion 1.0.0In AutoCAD getestet

Textstil und Texthöhe für viele Texte ändern

Weist allen gewählten Texten denselben Textstil zu, auf Wunsch auch dieselbe Höhe. Praktisch, um Zeichnungen mit gemischten Schriften zu bereinigen.

So verwenden Sie ihn

  1. CXTXTSTYLE eingeben und die Texte wählen.
  2. Den Namen des gewünschten Textstils eingeben. Die Stile der Zeichnung werden vorher aufgelistet.
  3. Eine neue Höhe eingeben oder 0, um die Höhen zu behalten.

Gut zu wissen

  • Gibt es den Stil nicht, wird nichts geändert.

In AutoCAD laden

  1. Speichern Sie die Datei an einem beliebigen Ort.
  2. Geben Sie APPLOAD ein, wählen Sie die Datei und klicken Sie auf Laden.
  3. Geben Sie den Befehl ein: CXTXTSTYLE.

Damit er bei jedem Start bereitsteht, fügen Sie ihn im selben Dialog zum Startup-Set hinzu, oder laden Sie mit dem optionalen Loader einen ganzen Ordner auf einmal. Der optionale Loader

In AutoCAD (Vollversion) getestet. Andere Programme, die AutoLISP ausführen, funktionieren vielleicht, wurden aber nicht getestet.

Der Code

Reiner Text, nichts ist versteckt. Kopieren Sie ihn in eine Datei namens cxtxtstyle.lsp oder laden Sie ihn herunter.

;;; ============================================================================
;;; CXTXTSTYLE - Change the style and height of texts
;;; Version 1.0.0
;;; CADXChange LISP tools - https://cadxchange.net/resources/lisp/cxtxtstyle
;;; 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
;;; ============================================================================

;; Give the texts in NAMES the text style STYLE, and the height HEIGHT when it is above zero.
;; Returns how many texts were changed, or nil when the style does not exist.
(defun cx:txtstyle-run (names style height / n)
  (if (tblsearch "STYLE" style)
    (progn
      (setq n 0)
      (foreach e names
        (cx:upd e 7 style)
        (if (> height 0.0) (cx:upd e 40 height))
        (setq n (1+ n)))
      n)))

;; The names of the text styles in the drawing, for the prompt.
(defun cx:style-names (/ r out)
  (setq r (tblnext "STYLE" T))
  (while r
    (if (/= (cx:dxf 2 r) "") (setq out (cons (cx:dxf 2 r) out)))
    (setq r (tblnext "STYLE")))
  (reverse out))

(defun c:CXTXTSTYLE ( / *error* cx:sv ss style height n)
  (setq *error* cx:err)
  (if (setq ss (cx:pick "\nSelect texts: " '((0 . "TEXT,MTEXT"))))
    (progn
      (princ (strcat "\nText styles: " (cx:join (cx:style-names) ", ")))
      (setq style  (cx:ask-str "Text style" (getvar "TEXTSTYLE"))
            height (cx:ask-real "New text height (0 keeps the heights)" 0.0))
      (cx:start '(("CMDECHO" . 0)))
      (if (setq n (cx:txtstyle-run (cx:ss->list ss) style height))
        (princ (strcat "\n" (itoa n) " text(s) changed."))
        (princ (strcat "\nThere is no text style named " style ".")))
      (cx:end)))
  (princ))


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

;; Change one group of an entity: (cx:upd ename 8 "LAYER1"); the group is added when missing.
(defun cx:upd (ename code value / ed old)
  (setq ed (entget ename) old (assoc code ed))
  (entmod (if old (subst (cons code value) old ed) (append ed (list (cons code value)))))
  (entupd ename))

(defun cx:dxf (code ed)
  (cdr (assoc code 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)

(defun cx:join (lst delim / out)
  (setq out "")
  (foreach s lst
    (setq out (if (= out "") s (strcat out delim s))))
  (if lst out ""))

;; 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)))

;; Real X as text with at most PREC decimals and no trailing zeros ("2.50" -> "2.5", "3.00" -> "3").
(defun cx:num (x prec / s)
  (setq s (rtos x 2 prec))
  (if (wcmatch s "*.*")
    (progn
      (while (= (substr s (strlen s)) "0") (setq s (substr s 1 (1- (strlen s)))))
      (if (= (substr s (strlen s)) ".") (setq s (substr s 1 (1- (strlen s)))))))
  (if (or (= s "-0") (= s "")) "0" s))

(defun cx:ask-real (msg def / v)
  (setq v (getreal (strcat "\n" msg " <" (cx:num def 6) ">: ")))
  (if v v def))

;; 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 "\nCXTXTSTYLE loaded. Type CXTXTSTYLE to start.")
(princ)

Versionsverlauf

Version 1.0.0 · 27. Oktober 2026

Erste Veröffentlichung.

Für viele Zeichnungen auf einmal?

TextSync erledigt diese Art von Aufgabe für einen ganzen Ordner voller Zeichnungen in einem Durchlauf.

TextSync

Weitere Befehle: Text