获取指定目录的DWG文件的所有块名(含匿名块)列表
本帖最后由 sysu-沼泽 于 2019-6-15 12:13 编辑--------------------2019.6.15更新--------------------
根据satan421的提示,使用ObjectDBX获取,在实际运行时会出现“; 错误: Automation 错误。未提供说明。”的错误提示。以下是代码,不知是哪里出了问题?
(defun GetBlksNameList
(DwgName / cadver id dbx I objCount BlkNameList)
(vl-load-com)
(setq cadver (substr (getvar "acadver") 1 2))
;; get cad version No.
(setq id (strcat "objectdbx.AxDbDocument." cadver))
;; creat prog id
(setq dbx (vlax-create-object id))
;; creat dbx object
(vla-open dbx DwgName)
;;;前三个舍弃
(setqI 3
objCount (vla-get-Count (vla-get-Blocks dbx))
)
(setq BlkNameList nil)
(while (>= (- objCount 1) 4)
(setq BlockObj (vla-Item (vla-get-blocks dbx) I)
I (1+ I)
)
(setq BlkNameList (cons (vla-get-name BlockObj) BlkNameList))
)
(vlax-release-object dbx)
BlkNameList
)
--------------------2019.6.14原帖--------------------
RT,在当前CAD文件中,需要获取另外一个文件夹目录中某个DWG文件的所有块名列表。在网上搜索到有一部分代码是:
(DEFUN GetBlockNames (/ BlockInfo BlkLst Blk)
(SETQ BlockInfo (TBLNEXT "BLOCK" T))
;; get the first block in the block table record
;; loop through all block records, get block name
;; ignore anonymous blocks, dim's, xref's, etc...
;; add the block name to the list 'BlkLst
;; goto next block
(WHILE BlockInfo
(SETQ blk (CDR (ASSOC 2 BlockInfo)))
(IF (NOT (WCMATCH blk "`*U*,`*D*,`*X*,`*T*,_*,*|*,A$*"))
(SETQ BlkLst (APPEND BlkLst (LIST blk)))
)
(SETQ BlockInfo (TBLNEXT "BLOCK"))
)
BlkLst
)
刚测试该代码可以获取当前文件的所有块名。但不知需要获取其他文件的块名如何操作?在此请教下大家~
ObjectDBX. satan421 发表于 2019-6-15 08:45
ObjectDBX.
多谢,但我在用的时候有错误提示,可否方便看下?已在原帖中更新~ 既然有错误提示,应该能找到哪一个表达式出错 我猜是在vla-open后就出错。 sysu-沼泽 发表于 2019-6-15 12:15
多谢,但我在用的时候有错误提示,可否方便看下?已在原帖中更新~
(setq dbx (vla-getinterfaceobject
(vlax-get-acad-object)
id
)
) 可能是 vla-open 要打开的文件,已经打开。
页:
[1]