Originally Posted by
Arterius
List apeares but when I select my blocks nothing happend
Can you put names of my blocks inside routine. I have only these two blocks I want to "secure". I will use this lisp for many drawings using AutoScript program.
I see. Dynamic Block, is that right Arterius?
Code:
(defun c:att2txt (/ _data data fdata ss i e from info)
(vl-load-com)
(setq blks (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object))))
(defun _data (en func l1 l2 rv)
(if l2
(mapcar '(lambda (j k)
(func en j (if (and rv (/= 0 rv)
(eq j "Rotation")) (- k rv) k))) l1 l2)
(mapcar '(lambda (j)
(func en j)) l1)
)
)
(setq data '( "InsertionPoint" "Height" "TextAlignmentPoint")
Fdata '("Textstring" "color" "Rotation" "StyleName" "Alignment" "Layer"
"ScaleFactor" "UpsideDown" "Backward"
)
)
(if
(setq ss (ssget "_X" '((0 . "INSERT")(66 . 1)(2 . "BLOCKNAME1,BLOCKNAME2,`*U*"))))
(repeat (setq i (sslength ss))
(setq e (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
(setq r (vla-get-rotation e))
(if (member (strcase (vla-get-effectivename e)) '("BLOCKNAME1" "BLOCKNAME2"))
(progn
(vlax-invoke e 'ConvertToAnonymousBlock)
(setq from (mapcar '(lambda (k)
(setq info (_data k vlax-get fdata nil nil))
(vla-delete k) info)
(vlax-invoke e 'GetAttributes)))
(vlax-for itm (setq blk (vla-item
blks
(vla-get-name e)
))
(if (eq "AcDbAttributeDefinition" (vla-get-objectname itm))
(progn
(setq fd (car from))
(setq old (_data itm vlax-get data nil nil))
(setq new (vlax-invoke blk 'AddText (car fd) (car old) (cadr old)))
(_data new vlax-put fdata fd r)
(vlax-invoke new 'Move '(0.0 0.0 0.0) (last old))
(vla-delete itm)
(setq from (cdr from))
)
)
)
)
)
)
)
(princ)
)
EDIT/UPDATE: Fudge Attribute properties....