明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1217|回复: 4

Autocad图元句柄是否保持不变。

[复制链接]
发表于 2020-7-21 16:48:27 | 显示全部楼层 |阅读模式
最近编写一个程序。其中需要保存图元,以便后续处理。之前一直问题。但今天突然老是出错。经过不停调试,发现,同一图元的句柄居然会改变?有点蒙了。图元的句柄不是唯一的,保持不变的吗?
这面是用vba测试的一段代码
  1. Sub test()
  2.     Dim doc As AcadDocument
  3.     Set doc = ThisDrawing
  4.     Dim u As AcadUtility
  5.     Set u = doc.Utility
  6.     Dim ent As AcadEntity
  7.     Dim pt() As Double
  8.    
  9.    ' Set ent = doc.HandleToObject("93448")
  10.    
  11.     u.GetEntity ent, pt
  12.    
  13.     Dim h As String
  14.     h = ent.Handle
  15.     Debug.Print h
  16.     Dim e As AcadEntity
  17.     Set e = doc.HandleToObject(h)
  18. End Sub
同一图元在不同时间测试的结果:
D272D
D84D1
93448
93448
93448
93448
93448
93448
CFAFA
D272D
D272D


这是我把cad图形打开着,然后做不停操作。隔一段时候点击同一个多线段查看其句柄。

哪位大神能够解释一下这是为什么吗
发表于 2020-7-22 12:57:42 | 显示全部楼层
只能是在同一个进程内不变,关闭后再开就不一定了。靠这个方法不能确保唯一定位某元素。
 楼主| 发表于 2020-7-22 14:52:02 | 显示全部楼层
不好意思。是自己代码搞错了。句柄确实在文档中是唯一,打开重开,图元句柄还是一样的。之所以发生改变,是因为我有个操作克隆一组对象供操作后删除,在代码中,不小心删除了原图元了。后来看到的图元其实新克隆出来的图元,句柄自然不一样。感谢回复的朋友。
发表于 2020-7-23 10:10:47 | 显示全部楼层
你没有理解清楚,新元素的句柄是当前已有最大句柄+1,假设一个文件的最大句柄是100,复制这个文件,分别在不同复制后的文件上新增不同元素,那么新增的元素句柄都是101,如果你根据句柄101去检索元素,在不同的文件中会检索出不同的元素。即便是同一个元素在同一个文件内,如果进行过会改变句柄的操作,那么根据原来记录的句柄,也未必能检索出原来的元素。总之相当不可靠。
发表于 2020-9-9 11:58:01 | 显示全部楼层
句柄自图元画好(出生)即存在,唯一的,编码像是16进制?(不重要),重要的是其终身不变,随文件保证,一年前画好的实体今天打开也维持不变,dwg另存为DXf或DXF 另存dwg也维持不变。

如你发现变化了,说明该图元已死亡(删除),造成这种假象有可能:原位重画,或复制后母体删除,或利用有些插件编辑后重生存尔你不知道(许多程序执行的就是不停重画删除重画删除.....)

句柄本身就是CAD公司用于dwg(或DXF)文件与其他软件交换数据的一个明码,至于有些数据不能直接交换是因为核心技术的保密,比如扩展数据等等一般只能在CAD读取使用,其他软件不能直接获取(如arcgis就无法读取dwg图中的实体扩展数据)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 04:35 , Processed in 0.164660 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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