Jump to content

Creating tool (lisp) for copy attribute and global attribute edit


MarcoW

Recommended Posts

After having inserted multiple blocks in a drawing, the attributes must be filled in. Now i use "ddatte" per block, so 100 blocks means 100 times ddatte and then fill in.

 

Another way is by selecting the blocks that are the same an then use "props" to fill out the fields.

 

Can it be done with lisp, like "global attribute edit"..?

i.e.: 1. invoke command like "gae" 2. prompt for reference block -> select block 3. get dialog (same as ddatte dialog box) 4. fill it out 5. select blocks (per block or via crossing) 6. selected blocks are filled out.

 

And is it possible to copy the attribute values of a block (that has been filled out) to another?

 

Got a million ideas but first this one !

Link to comment
Share on other sites

Found the command "gatte" within the express menu.

I can and wil use it but how can the routine be modified so it does the thingy to all the attributes belonging to the block?

 

Ie. a block with 3 filled out attributes, copy all attributes to the other blocks.

 

;;

;;;

;;; GATTE.LSP

;;; Copyright © 1999 by Autodesk, Inc.

;;;

;;; Your use of this software is governed by the terms and conditions of the

;;; License Agreement you accepted prior to installation of this software.

;;; Please note that pursuant to the License Agreement for this software,

;;; "[c]opying of this computer program or its documentation except as

;;; permitted by this License is copyright infringement under the laws of

;;; your country. If you copy this computer program without permission of

;;; Autodesk, you are violating the law."

;;;

;;; AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.

;;; AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF

;;; MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.

;;; DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE

;;; UNINTERRUPTED OR ERROR FREE.

;;;

;;; Use, duplication, or disclosure by the U.S. Government is subject to

;;; restrictions set forth in FAR 52.227-19 (Commercial Computer

;;; Software - Restricted Rights) and DFAR 252.227-7013©(1)(ii)

;;; (Rights in Technical Data and Computer Software), as applicable.

;;;

;;; ----------------------------------------------------------------

 

(Defun C:gatte ( /

N ;selection set counter

CC ;changed counter

BN ;block name

TG ;tag name

ESel ;entity pick/name/list

EL ;entity list

EN ;entity name

PASS ;loop pass flag

TAGL ;list of valid tags for a block

TAGS ;String of valid tags for a block

TAGT ;Temp tag list

;TAG ;tag name in loop

TMP ;temporary variable

SS1 ;selection set of insert objects

XX X ;flag and counter

OLDCC ;previous count of changes for update test

A ;entity information in change loop

FL LA ;frozen layer check variables

na b

)

 

(acet-error-init

(List

(List "cmdecho" 0)

T ;flag. True means use undo for error clean up.

) ;list

);acet-error-init

(sssetfirst nil nil)

;;

(Setq n 0

cc 0

)

(while (null Pass)

(initget "Block _Block")

;; (setq ESel (entsel "\nBlock name/

(setq ESel (entsel "\nSelect block or attribute [block name]: "))

(cond

((null ESel) (setq Pass 'T BN nil))

((= (type ESel) 'LIST) ;;pick selection

(setq EL (entget (car ESel)))

(if (= (cdr (assoc 0 EL)) "INSERT")

(setq BN (cdr (assoc 2 EL))

Pass 'T

ESel (nentselp (cadr ESel))

EL (entget (car Esel))

TG (if (= (cdr (assoc 0 EL)) "ATTRIB")

(cdr (assoc 2 EL))

nil

)

)

(prompt "\nSelected item not an INSERT.")

);end if

);end second conditional for picking attrib

((and (= (type ESel) 'STR) (= ESel "Block"))

(setq BN (getstring "\nEnter block name: "))

(if (tblsearch "BLOCK" BN)

(setq Pass 'T)

(prompt "\nInvalid block name.")

)

);end third conditional

);the conditional statement ends

) ;;end of Block Name entry.

 

(if BN (progn

(setq Pass nil

EN (cdr (assoc -2 (tblsearch "BLOCK" BN)))

)

(while EN

(setq EL (entget EN))

(if (= (cdr (assoc 0 EL)) "ATTDEF")

(setq TAGL (cons (cdr (assoc 2 EL)) TAGL)))

(setq EN (entnext EN))

)

)) ;;end if BN progn

(if TG (setq Pass 'T))

 

(if TAGL

(progn

(setq TAGS (car TAGL)

TAGT (cdr TAGL)

)

(foreach TAG TAGT

(setq TAGS (strcat TAGS " " TAG))

)

)

)

 

(while (and TAGS (null Pass))

(initget TAGS)

(prompt (strcat "\nKnown tag names for block: " TAGS))

(setq ESel (nentsel "\nSelect attribute or type attribute name: "))

 

(cond

((= (type ESel) 'STR)

(setq ESel (xstrcase ESel))

(if (member ESel TAGL)

(setq Pass 'T

TG ESel

)

(prompt "\nInvalid attribute name.")

)

)

((= (type ESel) 'LIST) ;;pick selection

(setq TG (cdr (assoc 2 (entget (car ESel)))))

(if TG

(setq Pass 'T)

)

)

);the conditional statement ends

) ;;end of Attribute Name entry.

 

 

(if (and BN (null TAGL))

(setq BN (prompt "\nThe block selected has no attributes!")))

(If (And BN TG)

(Progn

(prompt (acet-str-format "\nBlock: %1 Attribute tag: %2" BN TG))

(Setq

NA (GetString T "\nEnter new text: ")

SS1 (SsGet "_X"

(List

(Cons 0 "INSERT")

(Cons 2 bn)

(Cons 66 1)

)

)

N (If SS1 (SsLength SS1) 0)

)

(initget 0 "Yes No _Yes No")

(setq TMP

(getkword

(acet-str-format "\nNumber of inserts in drawing = %1 Process all of them? [Yes/No] : " (itoa N))))

(if (and TMP (= TMP "No"))

(setq SS1 (ssget (list (cons 0 "INSERT")

(cons 2 BN)

(cons 66 1)))

N (if SS1 (sslength SS1) 0)

)

)

(if (> N 0) (Princ "\nPlease wait..."))

(setq x 0)

(repeat N

(setq A (ssname SS1 x)

B (entget A)

la (cdr (assoc 8 B)) ;layer name from object

fl (tblsearch "LAYER" la) ;table entry for layer

fl (cdr (assoc 70 fl)) ;layer status flag

)

(if (/= fl 65) ;if layer not frozen

(progn

(setq XX 1

oldcc cc)

(while XX

(setq

B (EntGet (EntNext (CDR (Assoc -1 B))))

)

(If (= (CDR (Assoc 0 B)) "SEQEND")

(Setq xx Nil)

(Progn

(If (= (CDR (Assoc 2 b)) tg)

(Progn

(Setq B (subst (Cons 1 NA) (assoc 1 B) B)

CC (1+ CC)

)

(EntMod B)

) ;progn

) ;if

) ;progn

) ;if

) ;while

(If (/= cc oldcc) (EntUpd a))

) ;progn

) ;if

(Setq X (1+ X))

) ;repeat

(If (/= 1 cc)

(princ (acet-str-format "\n%1 attributes changed." (itoa cc)))

(princ (acet-str-format "\n%1 attribute changed." (itoa cc)))

)

) ;progn

)

(acet-error-restore)

(Princ)

) ;defun

 

(princ)

Link to comment
Share on other sites

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