sysu-沼泽 发表于 2019-6-14 21:27:49

获取指定目录的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
)

刚测试该代码可以获取当前文件的所有块名。但不知需要获取其他文件的块名如何操作?在此请教下大家~

satan421 发表于 2019-6-15 08:45:46

ObjectDBX.

sysu-沼泽 发表于 2019-6-15 12:15:06

satan421 发表于 2019-6-15 08:45
ObjectDBX.

多谢,但我在用的时候有错误提示,可否方便看下?已在原帖中更新~

nzl1116 发表于 2019-6-15 13:03:30

既然有错误提示,应该能找到哪一个表达式出错

nzl1116 发表于 2019-6-15 13:06:01

我猜是在vla-open后就出错。

satan421 发表于 2019-6-16 01:18:39

sysu-沼泽 发表于 2019-6-15 12:15
多谢,但我在用的时候有错误提示,可否方便看下?已在原帖中更新~

(setq        dbx (vla-getinterfaceobject
              (vlax-get-acad-object)
              id
          )
)

林霄云 发表于 2019-6-17 08:57:39

可能是 vla-open 要打开的文件,已经打开。
页: [1]
查看完整版本: 获取指定目录的DWG文件的所有块名(含匿名块)列表