dober Posted February 27, 2010 Posted February 27, 2010 Search a Lisp, where I can change the texts included in the block, the text style. Search brought nothing to light Thanks Suche ein Lisp, wo ich im Block enthaltene Texte, den Textstil ändern kann. Suche brachte nichts zu Tage Danke Quote
David Bethel Posted February 27, 2010 Posted February 27, 2010 This should work: (defun c:chgintxt (/ sn ss nw_var nw_rst bn tdef fe fd) (while (or (not sn) (not (snvalid sn)) (not (tblsearch "STYLE" sn))) (princ "\nReplacement Style Must Exist In This Drawing") (setq sn (getstring "\nReplacement Style Name: "))) (while (or (not ss) (> (sslength ss) 1)) (princ "\nSelect INSERT To Update") (setq ss (ssget '((0 . "INSERT"))))) (setq nw_var '(("ELEVATION" . 0) ("THICKNESS" . 0) ("CELTSCALE" . 1) ("CECOLOR" . "BYLAYER") ("CELTYPE" . "BYLAYER"))) (foreach v nw_var (and (getvar (car v)) (setq nw_rst (cons (cons (car v) (getvar (car v))) nw_rst)) (setvar (car v) (cdr v)))) (setq bn (cdr (assoc 2 (entget (ssname ss 0)))) tdef (tblsearch "BLOCK" bn) fe (cdr (assoc -2 tdef))) (entmake tdef) (while fe (setq fd (entget fe)) (if (member (cdr (assoc 0 fd)) '("TEXT" "MTEXT")) (setq fd (subst (cons 7 sn) (assoc 7 fd) fd))) (entmake fd) (setq fe (entnext fe))) (entmake (list (cons 0 "ENDBLK")(cons 8 "0"))) (foreach v nw_rst (setvar (car v) (cdr v))) (entupd (ssname ss 0)) (command "_.REGENALL") (prin1)) -David Quote
Lee Mac Posted February 27, 2010 Posted February 27, 2010 David, Quick question, why do you use: (while (or (not ss) (> (sslength ss) 1)) (princ "\nSelect INSERT To Update") (setq ss (ssget '((0 . "INSERT"))))) over: (while (not ss) (princ "\nSelect INSERT To Update") (setq ss (ssget "_:S" '((0 . "INSERT"))))) *just curious* Quote
David Bethel Posted February 27, 2010 Posted February 27, 2010 Lee, I don't remember when the "_:S" was added, but I know it doesn't work in 12 & 13. Maybe even 14. So thats one of drawbacks of older stuff. But then I don't that was much added after 2000 to vanilla Autolisp. Besides, I think all those "_:LSCXIEQ" or what ever are a bit cryptic for a novice. So if they learn the long way, they can appreciate the short cuts. My $0.02 again! -David Quote
Lee Mac Posted February 27, 2010 Posted February 27, 2010 Ah, that explains it I'm inclined to agree with you on how cryptic the ssget codes are - I rarely use more than "_:L" and "_X", but some can be quite cunning, like this for example, to mimic entsel with a filter: (ssget "_+.:E:S" '((0 . "INSERT"))) Lee Quote
dober Posted February 27, 2010 Author Posted February 27, 2010 This should work: (defun c:chgintxt (/ sn ss nw_var nw_rst bn tdef fe fd) (while (or (not sn) (not (snvalid sn)) (not (tblsearch "STYLE" sn))) (princ "\nReplacement Style Must Exist In This Drawing") (setq sn (getstring "\nReplacement Style Name: "))) (while (or (not ss) (> (sslength ss) 1)) (princ "\nSelect INSERT To Update") (setq ss (ssget '((0 . "INSERT"))))) (setq nw_var '(("ELEVATION" . 0) ("THICKNESS" . 0) ("CELTSCALE" . 1) ("CECOLOR" . "BYLAYER") ("CELTYPE" . "BYLAYER"))) (foreach v nw_var (and (getvar (car v)) (setq nw_rst (cons (cons (car v) (getvar (car v))) nw_rst)) (setvar (car v) (cdr v)))) (setq bn (cdr (assoc 2 (entget (ssname ss 0)))) tdef (tblsearch "BLOCK" bn) fe (cdr (assoc -2 tdef))) (entmake tdef) (while fe (setq fd (entget fe)) (if (member (cdr (assoc 0 fd)) '("TEXT" "MTEXT")) (setq fd (subst (cons 7 sn) (assoc 7 fd) fd))) (entmake fd) (setq fe (entnext fe))) (entmake (list (cons 0 "ENDBLK")(cons 8 "0"))) (foreach v nw_rst (setvar (car v) (cdr v))) (entupd (ssname ss 0)) (command "_.REGENALL") (prin1)) -David Danke David Bethel Thanks a super tool A question I have to choose, I can unfortunately only one block so that it works. But I would want to choose just several blocks. Danke ein super Tool Ein Frage habe ich, ich kann leider nur einen Block auswählen damit er funktioniert. Ich würde aber gleich mehrer Blöcke auswählen wollen. Quote
David Bethel Posted February 27, 2010 Posted February 27, 2010 Be careful because this does not exclude repeat INSERTs. If you choose 15 INSERT entities of the same block, it will redefine that block 15 times. [color=#8b4513];;;FOR MUTIPLE BLOCKS 02-27-2010[/color] [b][color=BLACK]([/color][/b]defun c:chginstx [b][color=FUCHSIA]([/color][/b]/ sn i ss nw_var nw_rst tdef en ed fe fd[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]or [b][color=MAROON]([/color][/b]not sn[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]not [b][color=GREEN]([/color][/b]snvalid sn[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]not [b][color=GREEN]([/color][/b]tblsearch [color=#2f4f4f]"STYLE"[/color] sn[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]princ [color=#2f4f4f]"\nReplacement Style Must Exist In This Drawing"[/color][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]setq sn [b][color=MAROON]([/color][/b]getstring [color=#2f4f4f]"\nReplacement Style Name: "[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq nw_var '[b][color=NAVY]([/color][/b][b][color=MAROON]([/color][/b][color=#2f4f4f]"ELEVATION"[/color] . 0[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][color=#2f4f4f]"THICKNESS"[/color] . 0[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][color=#2f4f4f]"CELTSCALE"[/color] . 1[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][color=#2f4f4f]"CECOLOR"[/color] . [color=#2f4f4f]"BYLAYER"[/color][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][color=#2f4f4f]"CELTYPE"[/color] . [color=#2f4f4f]"BYLAYER"[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]foreach v nw_var [b][color=NAVY]([/color][/b]and [b][color=MAROON]([/color][/b]getvar [b][color=GREEN]([/color][/b]car v[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]setq nw_rst [b][color=GREEN]([/color][/b]cons [b][color=BLUE]([/color][/b]cons [b][color=RED]([/color][/b]car v[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]getvar [b][color=PURPLE]([/color][/b]car v[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] nw_rst[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]setvar [b][color=GREEN]([/color][/b]car v[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cdr v[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]princ [color=#2f4f4f]"\nSelect INSERTs To Update"[/color][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]setq i -1 ss [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"INSERT"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]setq en [b][color=GREEN]([/color][/b]ssname ss [b][color=BLUE]([/color][/b]setq i [b][color=RED]([/color][/b]1+ i[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]setq ed [b][color=GREEN]([/color][/b]entget en[b][color=GREEN])[/color][/b] tdef [b][color=GREEN]([/color][/b]tblsearch [color=#2f4f4f]"BLOCK"[/color] [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 2 ed[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] fe [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc -2 tdef[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]entmake tdef[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]while fe [b][color=GREEN]([/color][/b]setq fd [b][color=BLUE]([/color][/b]entget fe[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]member [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 0 fd[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] '[b][color=RED]([/color][/b][color=#2f4f4f]"TEXT"[/color] [color=#2f4f4f]"MTEXT"[/color][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]setq fd [b][color=RED]([/color][/b]subst [b][color=PURPLE]([/color][/b]cons 7 sn[b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]assoc 7 fd[b][color=PURPLE])[/color][/b] fd[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]entmake fd[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq fe [b][color=BLUE]([/color][/b]entnext fe[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]entmake [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"ENDBLK"[/color][b][color=BLUE])[/color][/b][b][color=BLUE]([/color][/b]cons 8 [color=#2f4f4f]"0"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]entupd en[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]foreach v nw_rst [b][color=NAVY]([/color][/b]setvar [b][color=MAROON]([/color][/b]car v[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]cdr v[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]command [color=#2f4f4f]"_.REGENALL"[/color][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b] Have fun! -David Quote
Lee Mac Posted February 27, 2010 Posted February 27, 2010 David, When you entmake the definition with the new textstyle, does it overwrite the old definition? Quote
Lee Mac Posted February 27, 2010 Posted February 27, 2010 Perhaps another way to approach it: [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:blktxtstyle [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] GetName sty doc ss done[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b] [i][color=#990099];; Lee Mac ~ 27.02.10[/color][/i] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] GetName [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b]obj[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-property-available-p[/color][/b] obj [b][color=DARKRED]'[/color][/b]EffectiveName[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-EffectiveName[/color][/b] obj[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-Name[/color][/b] obj[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] sty [b][color=RED]([/color][/b][b][color=BLUE]getstring[/color][/b] [b][color=BLUE]t[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] [b][color=#a52a2a]"\nSpecify Style Name <"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]getvar[/color][/b] [b][color=DARKRED]'[/color][/b]TEXTSTYLE[b][color=RED])[/color][/b] [b][color=#a52a2a]"> : "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#a52a2a]""[/color][/b] sty[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] sty [b][color=RED]([/color][/b][b][color=BLUE]getvar[/color][/b] [b][color=DARKRED]'[/color][/b]TEXTSTYLE[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=BLUE]nil[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]tblsearch[/color][/b] [b][color=#a52a2a]"STYLE"[/color][/b] sty[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=#a52a2a]"\n** TextStyle not Found **"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]ssget[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=#009900]0[/color][/b] . [b][color=#a52a2a]"INSERT"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-StartUndoMark[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] doc [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ActiveDocument[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-get-acad-object[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-for[/color][/b] obj [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ss [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ActiveSelectionSet[/color][/b] doc[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vl-position[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] Nme [b][color=RED]([/color][/b]GetName obj[b][color=RED])[/color][/b][b][color=RED])[/color][/b] done[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-for[/color][/b] sub_obj [b][color=RED]([/color][/b][b][color=BLUE]vla-item[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-Blocks[/color][/b] doc[b][color=RED])[/color][/b] Nme[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]wcmatch[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ObjectName[/color][/b] sub_obj[b][color=RED])[/color][/b] [b][color=#a52a2a]"AcDb*Text"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-put-StyleName[/color][/b] sub_obj sty[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] done [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] Nme done[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-delete[/color][/b] ss[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-regen[/color][/b] doc [b][color=Blue]AcActiveViewport[/color][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-EndUndoMark[/color][/b] doc[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] Quote
dober Posted February 28, 2010 Author Posted February 28, 2010 Hallo David und Lee Simply Super Thank you, I have saved a lot of work. Thank you very much Einfach Super Danke euch, habt mir sehr viel Arbeit erspart. Vielen Dank Quote
David Bethel Posted February 28, 2010 Posted February 28, 2010 David, When you entmake the definition with the new textstyle, does it overwrite the old definition? Lee, Yes it does. You would have to create a new BLOCK and rename the INSERT in order tor retain the old definition. -David Quote
Lee Mac Posted February 28, 2010 Posted February 28, 2010 Lee, Yes it does. You would have to create a new BLOCK and rename the INSERT in order tor retain the old definition. -David I see - thanks David. Its only that I would normally approach this task with Visual LISP, so I didn't know the behaviour of using entmake to do the same thing. Quote
David Bethel Posted February 28, 2010 Posted February 28, 2010 I see - thanks David. Its only that I would normally approach this task with Visual LISP, so I didn't know the behaviour of using entmake to do the same thing. I would think that the end result would be the same. Am I wrong? -David Quote
Lee Mac Posted February 28, 2010 Posted February 28, 2010 I would think that the end result would be the same. Am I wrong? -David Exactly the same - the VL approach just seems a bit more intuitive, as you are directly modifying the part of the block definition that you want to, without 'remaking' the whole definition. 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.