如何在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 !!!!
    ...
}

我正确使用手柄否吗?

如何在AutoCAD中处理序列化和句柄

使用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保留以备将来使用