Kokhanetz Posted March 30, 2023 Posted March 30, 2023 Hi all, Im new here, and i was already very interested in scripting with AutoLisp. Yesterday i had my course for the basic commands. New im pioneering to get my first script so i hope someone can help me out. The bolded line in the next script i have added to the already working script: (defun c:xrde ( / ss strlay) (setvar "CMDECHO" 0) (setq strlay (ssget "_X" '((0 . "*TEXT")(8 . "B-??-??-TOPOGRAFIE-T18")))) (setq ss (ssget "_X" (list (cons 0 "HATCH")(cons 8 "~*WATER*-V")))) (command "erase" ss "") (COMMAND "_saveas" "" "~") (setvar "CMDECHO" 1) (princ "\nDone") (princ) ) i have tested the code (setq strlay (ssget "_X" '((0 . "*TEXT")(8 . "B-??-??-TOPOGRAFIE-T18")))) and it will catch all text with the specified layer. Now i found a code it will set one text in uppercase: (defun C:TC (/ ss i objTxt) (if (setq ss (ssget (list (cons 0 "TEXT,MTEXT")))) (progn (setq i 0) (repeat (sslength ss) (setq objTxt (vlax-ename->vla-object (ssname ss i))) (vla-put-textstring objTxt (strcase (vla-get-textstring objTxt)) ) (setq i (1+ i)) ) (prompt "\nDone.") ) ) (princ) ) Is there anyway i can combine these codes so it will grab all text (from strlay) with B-??-??-TOPOGRAFIE-T18 and puts it in uppercase? Hope someone can help me out with this. Greetz Wouter Quote
rlx Posted March 30, 2023 Posted March 30, 2023 (edited) zoiets? (untested) (defun c:xrde2 ( / old-cmdecho strlay i objTxt ss) (vl-load-com) (setq old-cmdecho (getvar 'cmdecho)) (setvar "CMDECHO" 0) (if (setq strlay (ssget "_X" '((0 . "*TEXT") (8 . "B-??-??-TOPOGRAFIE-T18")))) (progn (setq i 0) (repeat (sslength strlay) (setq objTxt (vlax-ename->vla-object (ssname strlay i))) (vla-put-textstring objTxt (strcase (vla-get-textstring objTxt))) (setq i (1+ i)) ) (princ (strcat "\nUpdated " (itoa (sslength strlay)) " (m)text objects")) ) (princ "\nSorry, no (m)text on layer B-??-??-TOPOGRAFIE-T18") ) (if (setq ss (ssget "_X" (list (cons 0 "HATCH")(cons 8 "~*WATER*-V")))) (command "erase" ss "")) (command "_saveas" "" "~") (setvar 'cmdecho old-cmdecho) (princ "\nDoei") (princ) ) Edited March 30, 2023 by rlx Quote
mhupp Posted March 31, 2023 Posted March 31, 2023 Welcome. While using comman in lisp is convent I find its where the issues arise in the code so i try not to use it when i can. and since your using visual lisp to change the txt why not try an use it everywhere! Also I like to use foreach instead of the counting method. (setq i (1+ i)) nothing wrong with that tho. (defun c:xrde2 (/ doc strlay objtxt ss ent) (vl-load-com) (vla-startundomark (setq doc (vla-get-activedocument (vlax-get-acad-object)))) (if (setq strlay (ssget "_X" '((0 . "*TEXT") (8 . "B-??-??-TOPOGRAFIE-T18")))) (progn (foreach objtxt (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex strlay)))) (vla-put-textstring objTxt (strcase (vla-get-textstring objTxt))) ) (princ (strcat "\nCapatlized " (itoa (sslength strlay)) " text Stings")) ) (princ "\nSorry, no Text Found") ) (if (setq ss (ssget "_X" '((0 . "HATCH") (8 . "~*WATER*-V")))) (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))) (entdel ent) ) ) (vla-save doc) (vla-EndUndoMark doc) (princ "\nDoei") (princ) ) 1 Quote
rlx Posted March 31, 2023 Posted March 31, 2023 I agree with mhupp to minimize the use of command functions , just wanted to stay as close to the original coding as possible because OP is making first steps on the road to eternal lisp glory and didn't want to overload or scare OP away 1 Quote
Kokhanetz Posted April 1, 2023 Author Posted April 1, 2023 (edited) Thanks mhupp / rlx, It worked properly! Command: XRDE Capatlized 148 text Stings Done I need to be honest that i dont know nothing about visual lisp. Im glad for now i just managed to make some scripts with the common lisp. Thanks again for helping out Edited April 1, 2023 by Kokhanetz Quote
Kokhanetz Posted April 1, 2023 Author Posted April 1, 2023 On 3/31/2023 at 2:57 AM, mhupp said: (vla-save doc) i changed that line to: (vla-saveas doc (getfiled "Save As" "" "dwg" 1)) otherwhise it will autosave instead of asking the user for save as. 1 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.