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

How to deal with serialization and Handles in AutoCAD

我想在 xml 文件和(其属性)中序列化块引用句柄。所以我在初始化时存储这个值:

blockReference.ObjectId.Handle.Value; // decimal value = 10658

但是当我 select AutoCAD 中的 blockReference 句柄已更改。

private void database_ObjectModified(object sender, ObjectEventArgs e)
{
    long currentId = e.DBObject.ObjectId.Handle.Value;  // Now it's 10659 !!!!

    ...
}

我是否正确使用了handle no?

使用theEntityObj.Handle.Value

如果您从 ObjectId 获取 if,它会在您 close/open 绘图时发生变化。

请注意,在某些情况下,句柄可能会发生变化,例如,如果您在块中有一条 LINE,如果您对块进行 BEDIT,则 HANDLES 会发生变化。

当您在 XML 文件中使用句柄时,您需要通过其 .Handle 获取 ObjectId 然后使用有效的 ObjectId 仅在当前会话到read/write对象。参见 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 留作将来使用