Jump to content

Recommended Posts

Posted

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

Posted

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

Posted

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* :)

Posted

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

Posted

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

 

:thumbsup:

 

Lee

Posted
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.

Posted

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

Posted

David,

 

When you entmake the definition with the new textstyle, does it overwrite the old definition?

Posted

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]

Posted

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

Posted
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

Posted
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. :)

Posted
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

Posted
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.

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...