如何在AutoCAD中处理序列化和句柄
本文关键字:序列化 句柄 处理 AutoCAD | 更新日期: 2023-09-27 18:08:24
我想序列化xml文件中的blockreference句柄和(它的属性(。所以我在初始化时存储这个值:
blockReference.ObjectId.Handle.Value; // decimal value = 10658
但是,当我在AutoCAD中选择blockReference时,控制柄已经更改。
private void database_ObjectModified(object sender, ObjectEventArgs e)
{
long currentId = e.DBObject.ObjectId.Handle.Value; // Now it's 10659 !!!!
...
}
我正确使用手柄否吗?
使用EntityObj.Handle.Value
如果从ObjectId获取If,则在关闭/打开图形时它将发生更改。
请注意,在某些情况下,句柄可能会发生更改,例如,如果块中有一条LINE,如果对块进行BEDIT,则句柄会发生更改。
在XML文件中使用Handle时,需要通过其.Handle
获取ObjectId
,然后使用仅在当前会话中有效的ObjectId
来读取/写入对象。看见http://through-the-interface.typepad.com/through_the_interface/2007/02/getting_access_.html
在SDK文档(托管接口CHM文件(中查找Database.GetObjectId()
方法。简而言之。。。
public ObjectId GetObjectId(
[MarshalAs(UnmanagedType.U1)] bool createIfNotFound,
Handle objHandle,
int identifier
);
[MarshalAs(UnmanagedType.U1)] bool createIfNotFound
输入布尔值,指示如果找不到输入句柄则创建objectId存根- 包含传入句柄的
Handle objHandle
输入句柄对象 int identifier
保留以备将来使用