- 积分
- 13925
- 明经币
- 个
- 注册时间
- 2016-1-26
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 tigcat 于 2024-6-3 20:03 编辑
外部参照有四种状态,如下图:1-需要重载;2-已卸载;3-已加载;4-未参照
如何获取这四种状态呢?
首先,外部参照是一种特殊的块,所以我们可以查询组码,打开cad帮助,提示组码"70"对应的值.
有了上面的组码,那么我们可以获取外部参照的数据表验证一下.
首先,我们用vla函数可以获取所有的外部参照名称
;获取所有的外部参照名称
(defun getallxref ()
(setq blocklst '())
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
(vlax-for block (vla-get-Blocks doc)
(if
(eq (vla-get-IsXRef block) :vlax-true)
(setq blocklst (cons (vla-get-Name block) blocklst))
)
)
blocklst
)
;获取外部参照名称和组码70的数值的二元表
(defun xref-dxf70(lst)
(setq name-dxfs '())
(foreach x lst
(setq name-dxfs (cons (cons x(cdr (assoc 70 (tblsearch "block" x))))name-dxfs))
)
)
用上面2个程序就可以获得如下图的"参照名称" 70组码的点对表
从上图知只有"2"的组码值为4,其余"1" "3" "4"外部参照70组码值均为36,结合上面组码说明,4表示为外部参照,此时是未融入或者引用的状态,36=4+32,表示融入的外部参照.从上面实例可知,单从70组码能判断外部参照是否卸载,但是无法判断是否是需要重载/未参照的情况.
下面是配套的测试的dwg和lsp
下面分享网络找来的两段代码,一段可以清除已卸载的外部参照,另外一段可以清理未使用的外部参照和光栅引用.
[20240602新增内容]经过本坛大佬bao_lai的探索,提供一个C#封装的函数命令:"(getxrefstatus)",利用这个函数可以读取参照管理器一样的参照状态,目前CAD2014还不支持,我测试2018可以用,bao_lai大佬用2020编写,所以2018/2020都可以使用.下面的动图也是大佬提供的.
[20240603]补充2014版cad适用程序,由bao_lai大佬提供
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
评分
-
查看全部评分
|