Page 1 of 2 12 LastLast
Results 1 to 10 of 26

Thread: Renaming Attribute Tags?

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Member
    Join Date
    2008-09
    Posts
    9
    Login to Give a bone
    0

    Default Renaming Attribute Tags?

    Does anyone know of a way, or have a routine, that will edit the tag name (not the value) of an attribute in an existing block? I'm aware of BATTMAN's capability here but I have a HUGE number of drawings that require some tag renaming and I'm hoping to create a script to run overnight.

    Thanks,

    Randy

  2. #2
    I could stop if I wanted to msretenovic's Avatar
    Join Date
    2002-02
    Location
    Galloway, Oh
    Posts
    305
    Login to Give a bone
    0

    Lightbulb Re: Renaming Attribute Tags?

    Quote Originally Posted by rkingery View Post
    Does anyone know of a way, or have a routine, that will edit the tag name (not the value) of an attribute in an existing block? I'm aware of BATTMAN's capability here but I have a HUGE number of drawings that require some tag renaming and I'm hoping to create a script to run overnight.

    Thanks,

    Randy
    Randy,

    Give this a try:
    Code:
    (defun MKSxAttTagSet
              (obj   ;;variable - object to use
               att   ;;variable - attribute to set
               str   ;;variable - new tag name
               /
               atts  ;;variable - list of attributes
               bool  ;;variable - returns t if set, returns nil if not
               index ;;variable - index/counter
    )
      (setq    atts  (vlax-safeArray->list (variant-value (vla-getAttributes obj)))
        index 0
      )
      (repeat (length atts)
        (if    (= (vla-get-tagString (nth index atts)) att)
          (progn
        (vla-put-tagString (nth index atts) str)
        (vla-update (nth index atts))
        (setq bool t)
          )
        )
        (setq index (1+ index))
      )
      bool
    )
    You would call it like this:
    Code:
    (MKSxAttTagSet objBlk TagOld TagNew)
    This routine will update ALL attribute tags with the old name (TagOld). If nothing it updated, nil is returned; otherwise t is returned.

  3. #3
    Certifiable AUGI Addict
    Join Date
    2015-11
    Location
    Jo'burg SA
    Posts
    4,512
    Login to Give a bone
    0

    Default Re: Renaming Attribute Tags?

    Similar to msretenovic's code. Although you simply give it the block's name, the old tag name & the new tag name. Renames these for both the block's definition as well as any block references (even when nested inside other blocks).
    Code:
    ;;; Rename attributes
    (defun RenAttrib ($blk $old $new / blocks bo eo ao)
      ;; Get blocks collection in current drawing
      (setq blocks (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object))))
      ;; Step through all blocks
      (vlax-for bo blocks
        ;; Step through all entities inside block
        (vlax-for eo bo
          (cond
            ;; If attdef & in target block & old tag
            ((and (= (vla-get-ObjectName eo) "AcDbAttributeDefinition")
                  (= (strcase (vla-get-Name bo)) (strcase $blk))
                  (= (vla-get-TagString eo) $old)
             ) ;_ end of and
             (vla-put-TagString eo $new) ;Change to new name
            )
            
            ;; If block reference & target block
            ((and (= (vla-get-ObjectName eo) "AcDbBlockReference")
                  (= (strcase (vla-get-EffectiveName eo)) (strcase $blk))
             ) ;_ end of and
             ;; Step through all attributes
             (foreach ao (vlax-safearray->list (vlax-variant-value (vla-GetAttributes eo)))
               ;; Check if target attrib
               (if (= (strcase (vla-get-TagString ao)) (strcase $old))
                 (vla-put-TagString ao $new) ;Change to new name
               ) ;_ end of if
             ) ;_ end of foreach
            )
          ) ;_ end of cond
        ) ;_ end of vlax-for
      ) ;_ end of vlax-for
    ) ;_ end of defun
    Example usage, at the command line (or in script). Assume block's name is TESTBLK, old Attrib Tag name is OLDTAG & new tagname is NEWTAG:
    Code:
    (RenAttrib "TESTBLK" "OLDTAG" "NEWTAG")

  4. #4
    Member
    Join Date
    2008-09
    Posts
    9
    Login to Give a bone
    0

    Default Re: Renaming Attribute Tags?

    Thanks guys! Worked beautifully!

  5. #5
    I could stop if I wanted to CEHill's Avatar
    Join Date
    2006-05
    Location
    TN
    Posts
    327
    Login to Give a bone
    0

    Question Re: Renaming Attribute Tags?

    Newbie here: How could the be modified to rename several attribute tags and replace each with a corresponding new tag?
    Yours,

    Clint
    Hill

    ------------------
    CAD Systems Operation and Management
    Chemical Plant Process + Mechanical Design Focus Areas

  6. #6
    Certifiable AUGI Addict
    Join Date
    2015-11
    Location
    Jo'burg SA
    Posts
    4,512
    Login to Give a bone
    0

    Default Re: Renaming Attribute Tags?

    Quote Originally Posted by Clinton.Hill View Post
    Newbie here: How could the be modified to rename several attribute tags and replace each with a corresponding new tag?
    Renaming the insert's attributes is quite simple. A normal entmod does this without hassles, or as per the previous code. The tricky bit is to figure out which old name needs to be changed to which new name - you either need a prepared list of OldName->NewName or you need to ask the user all the time . Then a simple AttSync would suffice to modify any properties to the new attribute's definition.

  7. #7
    100 Club
    Join Date
    2012-08
    Posts
    111
    Login to Give a bone
    0

    Default Re: Renaming Attribute Tags?

    Thanks irneb.
    I routine is just amazing. It's exactly i was looking for.

    Many Thanks for share.
    Cheers mate!

  8. #8
    Login to Give a bone
    0

    Default Re: Renaming Attribute Tags?

    I found this on the web after receiving no help at the autodesk forum. I just tried loading the "RenAttrib" lisp. It loaded okay but when I put the text in the command line I get the error shown below.

    ILMST is the block name
    04-16-90 is the existing attribute tag name
    START_DATE is the new tag name I want to give it

    Command: (RenAttrib "ILMST" "04-16-90" "START_DATE")
    ; error: no function definition: VLAX-GET-ACAD-OBJECT


    I'm not a programmer so I don't know how to correct this. Can anyone help?

    Thanks

    Mike


    PS: If this can be done with a script that would be much easier.
    Last edited by bustr0giantcatfish974410; 2012-03-27 at 08:46 PM. Reason: Post Script

  9. #9
    Certifiable AUGI Addict
    Join Date
    2015-11
    Location
    Jo'burg SA
    Posts
    4,512
    Login to Give a bone
    0

    Default Re: Renaming Attribute Tags?

    It's using the Visual Lisp extensions - which aren't loaded by default. Just add the following line of code somewhere into that lisp (or any other lisp loaded automatically) - it only need be run once per drawing (so most of us would already have such somewhere, that's why these lisps don't include it):
    Code:
    (vl-load-com)

  10. #10
    Certifiable AUGI Addict
    Join Date
    2015-11
    Location
    Jo'burg SA
    Posts
    4,512
    Login to Give a bone
    0

    Default Re: Renaming Attribute Tags?

    Quote Originally Posted by bustr0giantcatfish974410 View Post
    PS: If this can be done with a script that would be much easier.
    That's actually the whole point of these lisps - otherwise (as the original post states) the BAttMan command can do this for you (one at a time).

    Any lisp code can be placed directly into a script, or you can load a LSP file from a script, or you can of course call any lisp defun from a script. You should see a script file as a file containing all the keystrokes you type into ACad's command-line. It's as if you tell acad, read the file as if it is the keyboard.

Page 1 of 2 12 LastLast

Similar Threads

  1. 2013: Xrefs and Attribute tags
    By gjh in forum AutoCAD LT - General
    Replies: 2
    Last Post: 2014-05-10, 09:49 PM
  2. Attribute Tags
    By RobertAitken in forum VBA/COM Interop
    Replies: 5
    Last Post: 2010-06-11, 11:01 AM
  3. Re-use attribute tags
    By nancy.beulens in forum AutoCAD General
    Replies: 8
    Last Post: 2009-12-29, 03:23 PM
  4. Renaming Tags
    By kenneth_white in forum AutoLISP
    Replies: 8
    Last Post: 2008-02-08, 10:52 PM
  5. Renaming Fields in Room Name Tags
    By caroline1772 in forum Revit Architecture - General
    Replies: 3
    Last Post: 2003-09-04, 01:23 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •