autocad .net在不使用ObjectId的情况下存储和检索对象ID

时间:2017-10-11 02:36:43

标签: c# wpf mvvm autocad-plugin

我正在开发一个autoCAD .net项目,我在其中创建一个MVVM模式来选择和修改实体。我想将所选实体的信息/值存储到视图模型中,更改信息/值(通过弹出的WPF UI以及我的代码)然后将更改应用于实体。

问题是:如果我想将更改应用于实体,我必须知道“哪个”实体将接收更改。因此,我想存储实体ObjectId并稍后使用来自AutoCAD的acdbmgd.dll的ObjectId结构来检索它,因为这将使我的UI项目依赖于特定版本的AutoCAD(是的,这是我的UI项目工作的要求.net框架)。

我有什么方法可以做到这一点?我打算将objectId存储在一个对象中,然后将其强制转换为objecId,但它不起作用。请帮忙。非常感谢你。

2 个答案:

答案 0 :(得分:0)

您可以将句柄值存储为(long),而不是ObjectId。在检索实体时,您仍然需要将句柄值转换为Autocad句柄,但是我没有办法逃避它

答案 1 :(得分:0)

您可能知道或不知道,图表中的每个实体都可以通过3种独特方式检索:ObjectIDHandle和实例指针。每次打开图形数据库时都会为每个实体创建对象ID,因此它们只有在当前图形关闭之前才是唯一的。重新打开后,所有ObjectID都将完全不同。然而,句柄在会话之间持续存在,并且如前所述,可以转换为长时间和后退。不确定您是否愿意在会话之间保留对实体的引用,但这至少可以解决您的数据类型问题。相信我,我完全理解你希望将autodesk与主装配件分开。 This post将包含您可能需要的所有信息。