Hi
In this new version, it's possible to enter the text before the first text you want to insert from the keyboard or, as before, select it on the screen.
Additionally, it will now increment numeric, alphabetic, or alphanumeric text strings without any restrictions (except for non-alphanumeric characters, of course).
@leonucadomi As for your suggestion to extend the code's functionality to block attributes, I may do something about this in the future.
However, I'm sure there must be simpler routines that would do the job just as well.
There are several block experts on this forum who will probably have something to say about this.
But if not, I'll try to do it myself.
;************************ G L A V C V S *************************
;************************** F E C I T ***************************
(defun c:txtIncrem (/ tam capa ind para a c cl
txsel le l s dameTexto
obtcad ent loc tipC nC ps add
errores error0
)
(defun errores (mens)
(setq *error* error0)
(prin1)
)
(defun dameTexto (cad / v r l daleVuelta)
;;; WRITE HERE THE CODE YOU NEED TO CUSTOMIZE THE TEXT YOU WANT TO ENTER OR CREATE
(defun daleVuelta (a)
(cond
((and (> a 64) (< a 91)) (if (> (setq a (+ a 1)) 90) (setq a -65) a))
((and (> a 96) (< a 123)) (if (> (setq a (+ a 1)) 122) (setq a -97) a))
((and (> a 47) (< a 58)) (if (> (setq a (+ a 1)) 57) (setq a -48) a))
)
)
(foreach v (reverse (vl-string->list cad))
(if (or (not r) (minusp r))
(setq l (cons (abs (setq r (daleVuelta v))) l))
(setq l (cons v l))
)
)
(vl-list->string (if (minusp r) (cons (if (= r -48) 49 (car l)) l) l))
)
(setq error0 *error*
*error* errores
)
(princ (setq s "Select PREVIOUS number text or type it... "))
(while (not para)
(setq l (grread T 13 2))
(if (not (listp (cadr l)))
(if (member (car l) '(2 3 11 25))
(cond
((or (= (cadr l) 13) (= (car l) 25))
(if (and c (not (wcmatch c "*.*")))
(setq ind c para T)
(if (not c) (setq para T))
)
)
((> (cadr l) 31)
(setq c (if c (strcat c (chr (cadr l))) (chr (cadr l))))
(prompt (strcat "\r" s c))
)
((= (cadr l) 8)
(if (setq c (if c (substr c 1 (- (strlen c) 1))))
(prompt (strcat "\r" s c))
)
)
)
)
(if (= (car l) 3)
(if (and (setq e (nentselp (cadr l))) (= (cdr (assoc 0 (setq le (entget (setq e (car e)))))) "TEXT"))
(if (not (wcmatch (setq ind (cdr (assoc 1 le))) "*.*"))
(setq capa (cdr (assoc 8 le)) a (cdr (assoc 40 le)) cl (cdr (assoc 62 le)) para T)
(princ "\n*** The selected object is not valid. Please, try again... ***")
)
)
)
)
)
(setq para nil)
(if (not capa)
(while (not para)
(if (and (setq e (car (entsel "\nLAYER/HEIGHT: Select a sample text object (ENTER or RIGHT CLICK to type it)... ")))
(setq l (entget e))
)
(if (= (cdr (assoc 0 l)) "TEXT")
(setq capa (cdr (assoc 8 l)) a (cdr (assoc 40 l)) para T)
(princ "\n*** The selected object is not a TEXT. Please, try again... ***")
)
(if (not capa)
(if (setq capa (getstring "\nType Layer name: "))
(if (tblsearch "layer" capa)
(if (not (setq a (getreal "\nType Height: ")))
(setq capa (princ "\n*** A valid height has not been specified. Please, type it again... ***") capa nil)
(setq para T)
)
(setq capa (princ "\n*** Specified layer does not exist. Please, type it again... ***") capa nil)
)
)
)
)
)
)
(setq tx (dameTexto ind))
(while (and (setq l (grread T (if s 4 13) (if s 2 0))) (member (car l) '(5 3)))
(prompt (strcat "\rSelect text to modify or insert new text \"" tx "\" (RIGHT CLICK for exit)"))
(setq tam (* (getvar "pickbox") (/ (GETVAR "VIEWSIZE") (CADR (GETVAR "SCREENSIZE")))) para nil)
(if (setq s (ssget "_C" (list (- (car (setq p (cadr l))) tam) (- (cadr p) tam))
(list (+ (car p) tam) (+ (cadr p) tam))
(list (cons 0 "TEXT"))
)
)
(cond
((= (car l) 3)
(entmod (subst (cons 1 tx) (assoc 1 (setq le (entget (ssname s 0)))) le))
(setq tx (dameTexto tx))
)
;;; HERE MORE CASES ?...
)
(cond
((= (car l) 3)
(entmake (list '(0 . "TEXT")
(cons 8 capa)
(cons 62 (if cl cl 256))
(cons 40 a)
(cons 1 tx)
(cons 10 (list (car p) (cadr p) 0.0))
)
)
(setq tx (dameTexto tx))
)
;;; HERE MORE CASES ?...
)
)
)
(princ)
)