Autocad图元句柄是否保持不变。
最近编写一个程序。其中需要保存图元,以便后续处理。之前一直问题。但今天突然老是出错。经过不停调试,发现,同一图元的句柄居然会改变?有点蒙了。图元的句柄不是唯一的,保持不变的吗?这面是用vba测试的一段代码
Sub test()
Dim doc As AcadDocument
Set doc = ThisDrawing
Dim u As AcadUtility
Set u = doc.Utility
Dim ent As AcadEntity
Dim pt() As Double
' Set ent = doc.HandleToObject("93448")
u.GetEntity ent, pt
Dim h As String
h = ent.Handle
Debug.Print h
Dim e As AcadEntity
Set e = doc.HandleToObject(h)
End Sub同一图元在不同时间测试的结果:
D272D
D84D1
93448
93448
93448
93448
93448
93448
CFAFA
D272D
D272D
这是我把cad图形打开着,然后做不停操作。隔一段时候点击同一个多线段查看其句柄。
哪位大神能够解释一下这是为什么吗
只能是在同一个进程内不变,关闭后再开就不一定了。靠这个方法不能确保唯一定位某元素。 不好意思。是自己代码搞错了。句柄确实在文档中是唯一,打开重开,图元句柄还是一样的。之所以发生改变,是因为我有个操作克隆一组对象供操作后删除,在代码中,不小心删除了原图元了。后来看到的图元其实新克隆出来的图元,句柄自然不一样。感谢回复的朋友。 你没有理解清楚,新元素的句柄是当前已有最大句柄+1,假设一个文件的最大句柄是100,复制这个文件,分别在不同复制后的文件上新增不同元素,那么新增的元素句柄都是101,如果你根据句柄101去检索元素,在不同的文件中会检索出不同的元素。即便是同一个元素在同一个文件内,如果进行过会改变句柄的操作,那么根据原来记录的句柄,也未必能检索出原来的元素。总之相当不可靠。 句柄自图元画好(出生)即存在,唯一的,编码像是16进制?(不重要),重要的是其终身不变,随文件保证,一年前画好的实体今天打开也维持不变,dwg另存为DXf或DXF 另存dwg也维持不变。
如你发现变化了,说明该图元已死亡(删除),造成这种假象有可能:原位重画,或复制后母体删除,或利用有些插件编辑后重生存尔你不知道(许多程序执行的就是不停重画删除重画删除.....)
句柄本身就是CAD公司用于dwg(或DXF)文件与其他软件交换数据的一个明码,至于有些数据不能直接交换是因为核心技术的保密,比如扩展数据等等一般只能在CAD读取使用,其他软件不能直接获取(如arcgis就无法读取dwg图中的实体扩展数据)。
页:
[1]