问题来源:
解决方案代码:
;;选择文件插入,同时更新本图的图块 By Gu_xl 2013.04.02
(defun c:ins (/ DWGNAME DBXDOC ACVER
DBXMODELSPACE BLOCKS
DOC DBXBLOCKNAMES
OBJS
)
(setq DwgName (GETFILED "选择引入图块的DWG文件" "" "dwg" 4))
(if (and
DwgName
(not
(equal
(strcase DwgName)
(strcase (strcat (getvar "dwgprefix") (getvar "dwgname")))
)
)
)
(progn
(setq
DBXDOC (vla-GetInterfaceObject
(vlax-get-acad-object)
(if (< (setq acVer (atoi (getvar "ACADVER"))) 16)
"ObjectDBX.AxDbDocument"
(strcat "ObjectDBX.AxDbDocument." (itoa acVer))
)
)
)
(vla-open DBXDOC DWGNAME)
(setq DBXModelSpace (vla-get-ModelSpace DBXDOC))
(setq blocks (vla-get-blocks
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
)
)
(vlax-for blk (vla-get-blocks DBXDOC)
(if (not (or (eq :vlax-true (vla-get-isXRef blk))
(eq :vlax-true (vla-get-isLayout blk))
(= "*U" (substr (vla-get-name blk) 1 2))
(= "*D" (substr (vla-get-name blk) 1 2))
(= "*T" (substr (vla-get-name blk) 1 2))
)
)
(setq dbxblocknames (cons (vla-get-name blk) dbxblocknames))
)
)
(setq dbxblocknames
(vl-remove-if-not
'(lambda (x) (TBLSEARCH "BLOCK" x))
dbxblocknames
)
)
(if dbxblocknames
(progn
(foreach block dbxblocknames
(vlax-for obj (vla-item blocks block)
(vla-delete obj)
)
(setq objs nil)
(vlax-invoke
dbxDoc
'CopyObjects
(vlax-for a
(vla-item (vla-get-blocks DBXDOC) block)
(setq objs (cons a objs))
)
(vla-item blocks block)
)
)
(vla-regen doc :vlax-true)
(prompt (strcat "\n更新了" (itoa (length dbxblocknames)) "个图块!"))
)
(prompt "\n没有可更新的图块!")
)
(vlax-release-object DBXDOC)
(command "insert" DwgName)
(while (= 1 (logand (getvar 'cmdactive) 1))
(command pause)
)
)
)
(princ)
)