0

我想序列化 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 !!!!

    ...
}

我是否正确使用了句柄?

4

2 回答 2

4

使用EntityObj.Handle.Value

如果您从 ObjectId 中获取 if,则它会在您关闭/打开绘图时发生变化。

请注意,在某些情况下,句柄可能会更改,例如,如果您在块内有一条线,如果您对块进行 BEDIT,则句柄会更改。

于 2015-08-18T11:27:58.043 回答
1

当您在 XML 文件中使用 Handle 时,您需要ObjectId通过它来获取它.Handle,然后使用ObjectId仅在当前会话中有效来读取/写入对象。请参阅http://through-the-interface.typepad.com/through_the_interface/2007/02/getting_access_.html

Database.GetObjectId()在 SDK 文档(托管接口 CHM 文件)中查找方法。简而言之就是这样...

public ObjectId GetObjectId(
[MarshalAs(UnmanagedType.U1)] bool createIfNotFound, 
Handle objHandle, 
int identifier
);
  • [MarshalAs(UnmanagedType.U1)] bool createIfNotFound 输入布尔值,指示在未找到输入句柄时创建 objectId 存根
  • Handle objHandle 包含传入句柄的输入句柄对象
  • int identifier 留作将来使用
于 2015-08-20T22:59:43.937 回答