迷不知途 发表于 2018-4-2 03:10:35

请问各位大师,如何在不打开dwg文件的状态下得到该文件中全部块名!

请问各位大师,如何在不打开dwg文件的状态下得到该文件中全部块名!

(defun mn:get-dwgfile-blockname ( dwgfile / *acad* blocks dbxDoc block-object block-lst x )
(setq *acad* (vlax-get-acad-object))
(setq blocks (vla-get-blocks (vla-get-ActiveDocument *acad*)))
(setq dbxDoc (vla-GetInterfaceObject *acad* (strcat "ObjectDBX.AxDbDocument." (itoa (atoi (getvar "AcadVer" ))))))
(vla-open dbxDoc dwgfile)
(setq block-lst nil)
(setq block-object (vla-get-blocks dbxDoc))
(vlax-for x block-object
       (setq block-lst (append block-lst (list (vla-get-name x))))
    )
block-lst
)

这个是我在论坛里研究了一晚上,东拼西凑出来的,基本上能满足我的要求但是看看返回值前面总是出现的四个是什么鬼!请问有什么更好的方法,让前面4个不出现!!多谢了!!!
返回值:("*Model_Space" "*Paper_Space" "*Paper_Space0" "_ArchTick" "aaa" "建筑1" "建筑2" "建筑4" )

edata 发表于 2018-4-2 10:12:49

前面三个是cad自带的,是模型空间和图纸空间的块记录,第四个是标注的箭头符号的块,理论上除了前三个,后面的都是可以插入的块实体定义。

edata 发表于 2018-4-2 10:30:40

(setq block-lst nil)(vlax-for x block-object
(setq blkname(vla-get-name x))
       (if(/= (substr blkname 1 1) "*")(setq block-lst (append block-lst (list blkname))))
    )block-lst

迷不知途 发表于 2018-4-2 17:46:18

edata 发表于 2018-4-2 10:30


多谢!!貌似_ArchTick块。在新建的图中就存在!!是不是安装天正就会出现这个!!!还有一个块_DIMX可以清理掉,但_ArchTick块清理不掉!!不知是为什么??

edata 发表于 2018-4-2 21:37:44

这个是标注的那个建筑箭头符号。。 除非你没有标注。以及样式。。

xyp1964 发表于 2018-4-4 17:41:49

本帖最后由 xyp1964 于 2018-4-4 17:43 编辑

(defun DbxGetBlocks (dwgfile / dbxDoc lst x)
(setqdbxDoc (vla-GetInterfaceObject (vlax-get-acad-object) (strcat "ObjectDBX.AxDbDocument." (itoa (atoi (getvar "AcadVer"))))))
(vla-open dbxDoc dwgfile)
(vlax-for x (vla-get-blocks dbxDoc)(setq lst (cons (vla-get-name x) lst)))
(vl-remove-if'(lambda (x) (member x '("*Model_Space" "*Paper_Space" "*Paper_Space0"))) (reverse lst)
)
)

迷不知途 发表于 2018-4-10 17:11:00

xyp1964 发表于 2018-4-4 17:41


多谢!!多谢!很多函数还是不理解如何使用!只能慢慢摸索,多谢大师的代码!!!学习了!!
页: [1]
查看完整版本: 请问各位大师,如何在不打开dwg文件的状态下得到该文件中全部块名!