Arterius
2015-10-01, 10:01 AM
Hi all,
I am using this routine below to convert my two specific blocks to anonymous block and purge, but the problem apears when I attach drawing as xref (drawing with blocks) to another drawing and bind it, than my blocks got name like: "x-plan$0$block1" and ""x-plan$0$block2".
How to modify this routine to make it find blocks with specific word in name?
Thanks in advance.
(defun c:tntblock (/ _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 . "BLOCK1,BLOCK2,`*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)) '("BLOCK1" "BLOCK2"))
(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))
)
)
)
)
)
)
)
(command "-Purge" "B" "BLOCK1" "N" )
(command "-Purge" "B" "BLOCK2" "N" )
(princ)
)
I am using this routine below to convert my two specific blocks to anonymous block and purge, but the problem apears when I attach drawing as xref (drawing with blocks) to another drawing and bind it, than my blocks got name like: "x-plan$0$block1" and ""x-plan$0$block2".
How to modify this routine to make it find blocks with specific word in name?
Thanks in advance.
(defun c:tntblock (/ _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 . "BLOCK1,BLOCK2,`*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)) '("BLOCK1" "BLOCK2"))
(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))
)
)
)
)
)
)
)
(command "-Purge" "B" "BLOCK1" "N" )
(command "-Purge" "B" "BLOCK2" "N" )
(princ)
)