我想在xml文件和(其属性)中序列化块引用句柄。所以我在初始化时存储了这个值:
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 !!!!
...
}
我是否正确使用手柄?
答案 0 :(得分:3)
使用 theEntityObj.Handle.Value
如果从ObjectId得到if,则在关闭/打开图形时它会改变。
注意在某些情况下,句柄可能会发生变化,例如,如果你在一个程序段中有一个LINE,如果你对该块进行了BEDIT,则HANDLES会发生变化。
答案 1 :(得分:1)
当您在XML文件中使用句柄时,您需要通过其ObjectId
获取.Handle
,然后使用仅在当前会话中有效的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
保留供将来使用