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
留作将来使用
我想在 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
留作将来使用