Isaac26a Posted March 19, 2021 Posted March 19, 2021 1 hour ago, G Prameela said: I am looking for prefixing 'C' in front of a column layer which is shown only in integers. Example instead of C1, they have mentioned 1, due to some reason I wanted prefix C IN front of all these integers. Althought this shouldn't be in this post, I think this can solve your needs. ;;;;;;;;;;;; Program to put a prefix to all the layers except by 0 and Defpoints. ;;;;;;;;;;;; By Isaac Alcántara 20210319 ;;;;;;;;;;;; (vl-load-com) (defun c:preflay ( / lay lst lyn new prefix) (setvar "cmdecho" 0) (vl-cmdf "_.undo" "_begin") (setq prefix (getstring T "\nType the prefix to add to the layers: ")) (while (setq lay (tblnext "LAYER" (null lay))) (or (wcmatch (setq lyn (cdr (assoc 2 lay))) "0,Defpoints") (or (tblsearch "LAYER" (setq new (strcat prefix lyn))) (entmod (subst (cons 2 new) (assoc 2 (setq lst (entget (tblobjname "LAYER" lyn)))) lst)) ) ) ) (vl-cmdf "_.undo" "_end") (princ) ) Quote
mickeforsberg Posted January 14, 2022 Posted January 14, 2022 (edited) Does this also work with multileaders or does that require a completely different approach? Edited January 14, 2022 by mickeforsberg Quote
Isaac26a Posted January 15, 2022 Posted January 15, 2022 20 hours ago, mickeforsberg said: Does this also work with multileaders or does that require a completely different approach? I guess this can help you with what you are looking for (defun c:test ( ) (pstext (getstring t "\nSpecify Prefix <none>: ") (getstring t "\nSpecify Suffix <none>: ") 1) ) ;; (pstext "Prefix Text" "Suffix Text" <mode>) ;; ;; <mode> = 0 - single selection ;; = 1 - window selection ;; ;; Author: Lee Mac 2011 - www.lee-mac.com (defun pstext ( preftext sufftext mode / a e i s ) (cond ( (= 0 mode) (while (progn (setvar 'ERRNO 0) (setq e (car (nentsel))) (cond ( (= 7 (getvar 'ERRNO)) (princ "\nMissed, try again.") ) ( (eq 'ENAME (type e)) (if (wcmatch (cdr (assoc 0 (entget e))) "TEXT,MTEXT,ATTRIB,*LEADER,*DIMENSION") (entmod (setq e (entget e) a (assoc 1 e) e (subst (cons 1 (strcat preftext (cdr a) sufftext)) a e) ) ) (princ "\nInvalid Object.") ) ) ) ) ) ) ( (setq s (ssget "_:L" (list '(0 . "TEXT,MTEXT,ATTRIB,*LEADER,*DIMENSION")))) (repeat (setq i (sslength s)) (entmod (setq e (entget (ssname s (setq i (1- i)))) a (assoc 1 e) e (subst (cons 1 (strcat preftext (cdr a) sufftext)) a e) ) ) ) ) ) (princ) ) 1 Quote
tombu Posted January 15, 2022 Posted January 15, 2022 "APTXT" from Cadalyst is a dialog based routine that allows you to add prefixes or suffixes to any text with many options. DDAPTXT.LSP Append to Text (c)June 1999, Scott A. Matthews added support for MTEXT & DIMENSION's March 2003, Tom Beauford https://forums.augi.com/showthread.php?6364-Text-prefix-suffix&p=37577&viewfull=1#post37577 Quote
mickeforsberg Posted March 2, 2022 Posted March 2, 2022 (edited) On 1/15/2022 at 6:37 AM, Isaac26a said: I guess this can help you with what you are looking for Thanks! Sorry I haven't gotten back, I haven't had the chance to try it until now. I get an "error: bad argument type: stringp nil" Any idea? (it works with text still, but not multileaders) Edited March 2, 2022 by mickeforsberg Quote
dpatts Posted May 16 Posted May 16 On 26/11/2011 at 03:03, Lee Mac said: Below is a generic function requiring optional prefix and suffix text and an integer mode... Hi Lee, thanks for posting your function. I am running into a problem however... PSTEXT returns the error "malfomed list on input" Would you happen to know what is causing this / are you able to replicate the error? Quote
Lee Mac Posted May 16 Posted May 16 5 hours ago, dpatts said: Hi Lee, thanks for posting your function. I am running into a problem however... PSTEXT returns the error "malfomed list on input" Would you happen to know what is causing this / are you able to replicate the error? That error would indicate that there is a missing closing parenthesis - have you copied the code correctly? Quote
KraZeyMike Posted May 29 Posted May 29 (edited) On 15/01/2022 at 16:37, Isaac26a said: I guess this can help you with what you are looking for (defun c:test ( ) (pstext (getstring t "\nSpecify Prefix <none>: ") (getstring t "\nSpecify Suffix <none>: ") 1) ) ;; (pstext "Prefix Text" "Suffix Text" <mode>) ;; ;; <mode> = 0 - single selection ;; = 1 - window selection ;; ;; Author: Lee Mac 2011 - www.lee-mac.com (defun pstext ( preftext sufftext mode / a e i s ) (cond ( (= 0 mode) (while (progn (setvar 'ERRNO 0) (setq e (car (nentsel))) (cond ( (= 7 (getvar 'ERRNO)) (princ "\nMissed, try again.") ) ( (eq 'ENAME (type e)) (if (wcmatch (cdr (assoc 0 (entget e))) "TEXT,MTEXT,ATTRIB,*LEADER,*DIMENSION") (entmod (setq e (entget e) a (assoc 1 e) e (subst (cons 1 (strcat preftext (cdr a) sufftext)) a e) ) ) (princ "\nInvalid Object.") ) ) ) ) ) ) ( (setq s (ssget "_:L" (list '(0 . "TEXT,MTEXT,ATTRIB,*LEADER,*DIMENSION")))) (repeat (setq i (sslength s)) (entmod (setq e (entget (ssname s (setq i (1- i)))) a (assoc 1 e) e (subst (cons 1 (strcat preftext (cdr a) sufftext)) a e) ) ) ) ) ) (princ) ) Anyway to incorporate a Block selection into this? Seems like even though ATTRIB is an option I can't physically select the block. One other issue is that when selecting a Dimension it wipes the Distance when dropping in the Prefix or Suffix. Seems to be quite a few routines out there but I think this one has the greatest potential for almost any situation Other than that it works perfectly thankyou Edited June 4 by KraZeyMike Quote
3dwannab Posted June 8 Posted June 8 (edited) If I run this it doesn't add that space after prefix or before the suffix. Any way to fix this @Lee Mac? ;; If enter "Help " as the prefix and " Me" as the suffix I don't get those whitespaces. (defun c:test1 (/ suffix prefix) (setq prefix (getstring T (strcat "\nSpecify prefix string: "))) (setq suffix (getstring T (strcat "\nSpecify suffix string: "))) (pstext prefix suffix 1) ) (c:test1) Edit: It can be fixed it by setting the dynmode and dynprompt variables to 0 for the duration of the program as far as I can see. Thanks again Lee! See below: ;; ;; Text_Prefix_Suffix_Sel_Single ;; ;; This will allow only a single selection. ;; With this you can modify single ATTRIB,TEXT,MTEXT,MULTILEADER objects each at a time. ;; ;; Author: 3dwannab on 2024.06.09 ;; Dependencies: Lee Macs pstext - Found here: https://www.cadtutor.net/forum/topic/35009-prefixsuffix-add-to-numbers-or-text/?do=findComment&comment=284307 ;; or the mod of mine found in this code. ;; (defun c:Text_Prefix_Suffix_Single_Sel (/ acDoc prefix suffix var_cmdecho var_dynmode var_dynprompt) (vl-load-com) (defun *error* (errmsg) (and acDoc (vla-EndUndoMark acDoc)) (and errmsg (not (wcmatch (strcase errmsg) "*CANCEL*,*EXIT*")) (princ (strcat "\n<< Error: " errmsg " >>\n")) ) (setvar 'cmdecho var_cmdecho) (setvar 'dynmode var_dynmode) (setvar 'dynprompt var_dynprompt) ) ; Start the undo mark here (setq acDoc (vla-get-ActiveDocument (vlax-get-acad-object))) (or (vla-EndUndoMark acDoc) (vla-StartUndoMark acDoc)) ; Get any system variables here (setq var_cmdecho (getvar "cmdecho")) (setq var_dynmode (getvar "dynmode")) (setq var_dynprompt (getvar "dynprompt")) ; Set any system variables here (setvar 'cmdecho 0) (setvar 'dynmode 0) ;; This needs to be set to 0 in order for whitespaces to be added after a prefix and before a suffix. (setvar 'dynprompt 0) ;; This needs to be set to 0 in order for whitespaces to be added after a prefix and before a suffix. (if (and (setq prefix (getstring T (strcat "\nSpecify prefix string for ATTRIB,TEXT,MTEXT,MULTILEADER: "))) (setq suffix (getstring T (strcat "\nSpecify suffix string for ATTRIB,TEXT,MTEXT,MULTILEADER: "))) ) (vla-pstext prefix suffix 0) ;; 0 here allows a single selection only. Supported objects are: ATTRIB,TEXT,MTEXT,MULTILEADER ) (vla-EndUndoMark acDoc) (*error* nil) (princ) ) ;; ;; Text_Prefix_Suffix_Sel_Multiple ;; ;; This will allow mulitiple selections. ;; With this you can modify single TEXT,MTEXT,MULTILEADER objects. ;; ;; Author: 3dwannab on 2024.06.09 ;; Dependencies: Lee Macs pstext - Found here: https://www.cadtutor.net/forum/topic/35009-prefixsuffix-add-to-numbers-or-text/?do=findComment&comment=284307 ;; or the mod of mine found in this code. ;; (defun c:Text_Prefix_Suffix_Sel_Multiple (/ acDoc prefix suffix var_cmdecho var_dynmode var_dynprompt) (vl-load-com) (defun *error* (errmsg) (and acDoc (vla-EndUndoMark acDoc)) (and errmsg (not (wcmatch (strcase errmsg) "*CANCEL*,*EXIT*")) (princ (strcat "\n<< Error: " errmsg " >>\n")) ) (setvar 'cmdecho var_cmdecho) (setvar 'dynmode var_dynmode) (setvar 'dynprompt var_dynprompt) ) ; Start the undo mark here (setq acDoc (vla-get-ActiveDocument (vlax-get-acad-object))) (or (vla-EndUndoMark acDoc) (vla-StartUndoMark acDoc)) ; Get any system variables here (setq var_cmdecho (getvar "cmdecho")) (setq var_dynmode (getvar "dynmode")) (setq var_dynprompt (getvar "dynprompt")) ; Set any system variables here (setvar 'cmdecho 0) (setvar 'dynmode 0) ;; This needs to be set to 0 in order for whitespaces to be added after a prefix and before a suffix. (setvar 'dynprompt 0) ;; This needs to be set to 0 in order for whitespaces to be added after a prefix and before a suffix. (if (and (setq prefix (getstring T (strcat "\nSpecify prefix string for TEXT,MTEXT,MULTILEADER: "))) (setq suffix (getstring T (strcat "\nSpecify suffix string for TEXT,MTEXT,MULTILEADER: "))) ) (vla-pstext prefix suffix 1) ;; 1 here allows multiple selections. Supported objects are: TEXT,MTEXT,MULTILEADER ) (vla-EndUndoMark acDoc) (*error* nil) (princ) ) Edited June 9 by 3dwannab Added fix and program for single and multiple selections Quote
3dwannab Posted June 9 Posted June 9 (edited) On 1/14/2022 at 9:06 AM, mickeforsberg said: Does this also work with multileaders or does that require a completely different approach? I needed this one myself so please see this mod along with other tweaks Credit to Lee for the original code. This one in this thread doesn't work. ;; (vla-pstext "Prefix Text" "Suffix Text" <mode>) ;; ;; <mode> = 0 - single selection ;; = 1 - window selection ;; ;; Author: Lee Mac 2011 - www.lee-mac.com ;; Modified: 3dwannab on 2024.06.09 ;; - Changed the method to the vla-put-TextString method. ;; - Added Multileaders to the objects that can be prefixed and suffixed. ;; - Added the selection of the objects in multi selection mode after the program is finished to prevent losing it. (defun vla-pstext (preftext sufftext mode / a e i s o len) (vl-load-com) (cond ; Do the single selection mode ((= 0 mode) (while (progn (setvar 'ERRNO 0) (setq e (car (nentsel))) (cond ((= 7 (getvar 'ERRNO)) (princ "\nMissed, try again.") ) ((eq 'ENAME (type e)) (if (wcmatch (cdr (assoc 0 (entget e))) "ATTRIB,TEXT,MTEXT,MULTILEADER") ;; If the correct ATTRIB,TEXT,MTEXT,MULTILEADER are picked (progn (setq o (vlax-ename->vla-object e)) (vla-put-TextString o (strcat preftext (vla-get-TextString o) sufftext)) ;; Replaces the content for ATTRIB,TEXT,MTEXT,MULTILEADER (setq e (entget e)) ;; Leave this to last to keep picking ) ;; If objects above are not picked. (princ "\nUnsupported Object.") ) ) ) ) ) ) ; Do the window selection mode ((setq s (ssget "_:L" (list '(0 . "TEXT,MTEXT,MULTILEADER")))) (foreach tx (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)) ) ) (vla-put-TextString tx (strcat preftext (vla-get-TextString tx) sufftext)) ) ;; Added selection of objects after so it's not lost (if (> (sslength s) 0) (progn (sssetfirst nil s) (command "_.regen") (princ (strcat "\n: -------------------------\n" (itoa (setq len (sslength s))) (if (> len 1) " TEXT, MTEXT or MULTILEADER objects" " object") " changed.\n: -------------------------\n")) ) (princ (strcat "\n: -------------------------\nNo TEXT, MTEXT or MULTILEADER objects found in selected object(s) !\n: -------------------------\n")) ) ) ) (princ) ) ;; end vla-pstext defun Edited June 9 by 3dwannab Quote
Croc640 Posted June 24 Posted June 24 Thankyou Lee Mac. Your Lisp routine was helpfull, but as I am a noob with that, even after using AutoCAD for 25 years... IT still did not make sense, but with a bit of hunting, found a working lisp routine, with a training site, which together, got me on the right road. Quote
KraZeyMike Posted July 24 Posted July 24 (edited) On 16/01/2022 at 04:09, tombu said: "APTXT" from Cadalyst is a dialog based routine that allows you to add prefixes or suffixes to any text with many options. DDAPTXT.LSP Append to Text (c)June 1999, Scott A. Matthews added support for MTEXT & DIMENSION's March 2003, Tom Beauford https://forums.augi.com/showthread.php?6364-Text-prefix-suffix&p=37577&viewfull=1#post37577 This is really cool but it was missing the DDAPTXT.DCL dialog (Attached) and found here: https://cadtips.cadalyst.com/category/software-version/autocad?page=98 Could someone help me incorporate Block attributes please? It would probably be a perfect generic solution for almost all situations. I sometimes have to add a prefix or suffix to many styles of text and blocks. It's a bit beyond me as it is The advantage of this routine over the others is the dialog allowing the options of both prefix/suffix, space/no space and a selection set/single selection. This version also won't wipe my field text in the dimension style when used. The uploads have been edited by me where DDAPTXT and the command APTXT have been changed to APT APT (Append Text Prefix or Suffix).lsp APT.DCL Edited July 25 by KraZeyMike Quote
BIGAL Posted July 25 Posted July 25 You need a total different function for a block attribute in the code it uses a ssget "TEXT,MTEXT,DIMENSION" set of text objects, to change 1 attribute in a block you need to know its tag name. A separate function all together would be easier, it probably all ready exists. The question is 1 block or multiple blocks with same name ? Quote
KraZeyMike Posted July 25 Posted July 25 (edited) Thanks Bigal I have this function for Block attributes (defun c:CCX (/ PreSuf Str ent Cstr) (vl-load-com) (initget "P S") (setq PreSuf (getkword "\nChoose [Prefix/Suffix] <Suffix>: ")) (if (not PreSuf) (setq PreSuf "S") ) (while (not str) (setq str (getstring T "\nEnter String: ")) (cond ((and (eq str "") (princ "Null Input Try again") (setq str nil) ) ) ) ) (while (and (setq ent (car (nentsel "\nSelect Text/Attribute: "))) (member (cdr (assoc 0 (entget ent))) '("TEXT" "MTEXT" "ATTRIB" "*LEADER") ) ) (setq ent (vlax-ename->vla-object ent) Cstr (vla-get-textstring ent) ) (vla-put-textstring ent (if (eq PreSuf "S") (strcat Cstr " " str) (strcat str " " Cstr) ) ) )(princ) ) But I would really like to incorporate it into the APT lisp above somehow by using the (while (and (setq ent (car (nentsel "\nSelect Attribute: "))) (member (cdr (assoc 0 (entget ent))) '("ATTRIB") Edited July 25 by KraZeyMike Quote
BIGAL Posted July 25 Posted July 25 I think the only way is to edit the dcl and have a button or toggle for choose type of object "TEXT" "MTEXT" "*LEADER" then can use the ssget method, the attrib needs to use a nentsel then could do a select all blocks of same name and add the pre or suf. It requires a different cond or defun in the code. So when click select it looks at what method to use. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.