Guptil Posted September 23, 2018 Posted September 23, 2018 Dear All, After spending a lot of time in different groups, i am starting a new tread hoping i will get a solution, actually i have hundreds of blocks without block attributes, however i have the blocks defined already from another project with different block names, now all i want to do is to add the block attributes to the blocks from the defined blocks, however i want to keep the geometry, insertion point and the X,Y,Z values same as original, since i have so many drawings to revise and so many different blocks to be updated, i am looking for some lisp of script so it can be done quickly, any help in this regard will highly appreciated. Please find attached CAD file containing both the blocks. Block attributes to be added.dwg Quote
David Bethel Posted September 23, 2018 Posted September 23, 2018 It can be done, but would have several limitations The base engine could look like this (defun c:att-snag (/ sn sd sp an ad sl ss i tn td tp a10 a11 n10 n11) (while (not sn) (and (princ "\nSelect 1 SOURCE Insert...") (setq ss (ssget '((0 . "INSERT")(66 . 1)))) (= (sslength ss) 1) (setq sn (ssname ss 0) sd (entget sn) sp (cdr (assoc 10 sd)) an (entnext sn) ad (entget an)))) (while (= "ATTRIB" (cdr (assoc 0 ad))) (setq sl (cons ad sl) an (entnext an) ad (entget an))) (and (princ "\nSelect TARGET Inserts...") (setq ss (ssget '((0 . "INSERT")(66 . 0)))) (setq i 0) (while (setq tn (ssname ss i)) (setq td (entget tn) tp (cdr (assoc 10 td))) (setq td (append td (list (cons 66 1)))) (entmake td) (foreach a (reverse sl) (setq a10 (mapcar '- (cdr (assoc 10 a)) sp)) (setq n10 (mapcar '+ tp a10)) (setq a11 (mapcar '- (cdr (assoc 11 a)) sp)) (setq n11 (mapcar '+ tp a11)) (setq a (subst (cons 10 n10) (assoc 10 a) a)) (setq a (subst (cons 11 n11) (assoc 11 a) a)) (entmake a)) (entmake (list (cons 0 "SEQEND")(cons 8 "0"))) (entdel tn) (redraw (entlast)) (setq i (1+ i)))) (prin1)) This simply adds the source ATTRIButes to the the target INSERT It does not: Redefine the target BLOCK definition Deal with source INSERT rotations, scale, OCS Erase the ATTRIBute value ( it copies the source ATTRIBute values ) Retain the ATTRIBute prompt It does: Match the ATTRIB offset from the source insert point to the attribute I'm sure there are several more quirks that you may have to deal with. -David Quote
David Bethel Posted September 23, 2018 Posted September 23, 2018 (edited) Here's a bit different approach using the COPY command and referencing the sources geometry. (defun c:att-snac (/ sn ss sd sp tn td tp ss i ed) (while (not sn) (and (princ "\nSelect 1 SOURCE Insert...") (setq ss (ssget '((0 . "INSERT")(66 . 1)))) (= (sslength ss) 1) (setq sn (ssname ss 0) sd (entget sn) sp (cdr (assoc 10 sd))))) (and (princ "\nSelect TARGET Inserts...") (setq ss (ssget '((0 . "INSERT")(66 . 0)))) (setq i 0) (while (setq tn (ssname ss i)) (setq td (entget tn) tp (cdr (assoc 10 td))) (command "_.COPY" sn "" sp tp) (setq ed (entget (entlast))) (entmod (subst (assoc 2 td) (assoc 2 sd) ed)) (entdel tn) (redraw (entlast)) (setq i (1+ i)))) (prin1)) Edited September 23, 2018 by David Bethel 1 Quote
Guptil Posted September 24, 2018 Author Posted September 24, 2018 Thanks David for your support, Actually it works but as you said with some limitations, one of them is that, it changes the Scale, (X,Y) values, then it copies the attributes, however i cant see them in the block editor and even in the Battman i can't see that block in the list. and more thing can we rename the block as source and then delete the source as well? Quote
David Bethel Posted September 25, 2018 Posted September 25, 2018 Glad it worked some. It is no surprise block editors and Battman do not work as I did not modify the target's block table definition. The copy routine should deal with the scale and rotations. Rename is fraught with issues. You could simple add the source INSERT to the selection set -David 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.