[20240603有内容更新]外部参照状态查询和管理
本帖最后由 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
下面分享网络找来的两段代码,一段可以清除已卸载的外部参照,另外一段可以清理未使用的外部参照和光栅引用.
经过本坛大佬bao_lai的探索,提供一个C#封装的函数命令:"(getxrefstatus)",利用这个函数可以读取参照管理器一样的参照状态,目前CAD2014还不支持,我测试2018可以用,bao_lai大佬用2020编写,所以2018/2020都可以使用.下面的动图也是大佬提供的.
补充2014版cad适用程序,由bao_lai大佬提供
数据库结构是一样的,要找到节点上面
https://www.cnblogs.com/JJBox/p/12407217.html 你有种再说一遍 发表于 2024-5-30 19:39
数据库结构是一样的,要找到节点上面
https://www.cnblogs.com/JJBox/p/12407217.html
感谢大佬回复,我还需慢慢学习了解 感谢分享代码! 好资料,谢谢分享 谢谢分享{:1_1:} 好资料,谢谢分享
页:
[1]