本帖最后由 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)
- ;;;前三个舍弃
- (setq I 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
- )
刚测试该代码可以获取当前文件的所有块名。但不知需要获取其他文件的块名如何操作?在此请教下大家~
|