明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1015|回复: 6

[提问] 获取指定目录的DWG文件的所有块名(含匿名块)列表

[复制链接]
发表于 2019-6-14 21:27 | 显示全部楼层 |阅读模式
本帖最后由 sysu-沼泽 于 2019-6-15 12:13 编辑

--------------------2019.6.15更新--------------------
根据satan421的提示,使用ObjectDBX获取,在实际运行时会出现“; 错误: Automation 错误。未提供说明。”的错误提示。以下是代码,不知是哪里出了问题?
  1. (defun GetBlksNameList
  2.        (DwgName / cadver id dbx I objCount BlkNameList)
  3.   (vl-load-com)

  4.   (setq cadver (substr (getvar "acadver") 1 2))
  5.   ;; get cad version No.
  6.   (setq id (strcat "objectdbx.AxDbDocument." cadver))
  7.   ;; creat prog id
  8.   (setq dbx (vlax-create-object id))
  9.   ;; creat dbx object
  10.   (vla-open dbx DwgName)

  11.   ;;;前三个舍弃
  12.   (setq  I   3
  13.   objCount (vla-get-Count (vla-get-Blocks dbx))
  14.   )
  15.   (setq BlkNameList nil)
  16.   (while (>= (- objCount 1) 4)
  17.     (setq BlockObj (vla-Item (vla-get-blocks dbx) I)
  18.     I     (1+ I)
  19.     )
  20.     (setq BlkNameList (cons (vla-get-name BlockObj) BlkNameList))
  21.   )
  22.   (vlax-release-object dbx)
  23.   BlkNameList

  24. )



--------------------2019.6.14原帖--------------------

RT,在当前CAD文件中,需要获取另外一个文件夹目录中某个DWG文件的所有块名列表。在网上搜索到有一部分代码是:
  1. (DEFUN GetBlockNames (/ BlockInfo BlkLst Blk)
  2.     (SETQ BlockInfo (TBLNEXT "BLOCK" T))
  3.     ;; get the first block in the block table record
  4.     ;; loop through all block records, get block name
  5.     ;; ignore anonymous blocks, dim's, xref's, etc...
  6.     ;; add the block name to the list 'BlkLst
  7.     ;; goto next block
  8.     (WHILE BlockInfo
  9.         (SETQ blk (CDR (ASSOC 2 BlockInfo)))
  10.         (IF (NOT (WCMATCH blk "`*U*,`*D*,`*X*,`*T*,_*,*|*,A$*"))
  11.             (SETQ BlkLst (APPEND BlkLst (LIST blk)))
  12.         )
  13.         (SETQ BlockInfo (TBLNEXT "BLOCK"))
  14.     )
  15.     BlkLst
  16. )


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

 楼主| 发表于 2019-6-15 12:15 | 显示全部楼层

多谢,但我在用的时候有错误提示,可否方便看下?已在原帖中更新~
发表于 2019-6-15 13:03 来自手机 | 显示全部楼层
既然有错误提示,应该能找到哪一个表达式出错
发表于 2019-6-15 13:06 来自手机 | 显示全部楼层
我猜是在vla-open后就出错。
发表于 2019-6-16 01:18 | 显示全部楼层
sysu-沼泽 发表于 2019-6-15 12:15
多谢,但我在用的时候有错误提示,可否方便看下?已在原帖中更新~

(setq        dbx (vla-getinterfaceobject
              (vlax-get-acad-object)
              id
            )
  )
发表于 2019-6-17 08:57 | 显示全部楼层
可能是 vla-open 要打开的文件,已经打开。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-25 13:07 , Processed in 2.278423 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表