2017-10-11 29 views
1

我在其中我创建了一个MVVM模式选择和修改的实体autoCAD的.NET项目工作获取对象ID。我想将所选实体的信息/值存储到视图模型中,更改信息/值(通过弹出的WPF UI以及我的代码),然后将更改应用到实体。AutoCAD的.NET存储,并且不使用的ObjectId

的问题是:如果我想将更改应用到实体,我必须知道“的”实体将收到的变化。因此,我希望存储实体ObjectId并稍后检索它,而不使用AutoCAD的acdbmgd.dll中的ObjectId结构,因为这将使我的UI项目取决于特定版本的AutoCAD(是的,这是我的UI项目的工作原理.net框架)。

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

+0

数据库中的ObjectId类型是什么? – grek40

+0

对不起,我不是很了解你的问题。只是为了清除事情: 1.“实体ObjectId”是我想要进行更改的实体的Id。 2. “的ObjectId” 的类型为:Autodesk.AutoCAD.DatabaseServices.ObjectId。这是一个结构。 如果这不是你想知道的,请向我解释。我是初学者,所以有很多我不知道。 –

+0

如果你说你的UI项目不能依赖于除.NET Framework中其他任何东西,这是否意味着这是确定的UI项目依赖于一个示范工程和样板工程依靠AutoCAD中,只要市民ModelProject的界面独立于AutoCAD,因此UI项目对AutoCAD没有直接依赖性?否则,我真的不知道如何在AutoCAD和UI之间的数据传输将工作 – grek40

回答

0

正如你可能会或可能不知道,在图形中每个实体可以在3检索独特的方法:ObjectID,Handle和一个实例指针。每次打开图形数据库时都会为每个实体创建对象标识,因此它们只有在当前图形关闭之前才是唯一的。一旦重新开放,所有ObjectID将完全不同。然而,处理会在两次会议之间持续下去,并且正如古尔曼所言,可以转换为长时间和后退。不确定您是否在意在会话之间保留对实体的引用,但这至少可以解决您的数据类型问题。相信我,我完全理解您希望将autodesk与主程序分开的愿望。 This post将拥有您可能需要的所有信息。

+0

感谢您的建议,我也通过存储实体手柄可以在视图模型中的字符串字段找到了一个解决方案,然后检索它后来被恢复它的ObjectId如下: viewModel.EntityHandle = entity.Handle.ToString(); 的ObjectId cylinderId = acDb.GetObjectId(假的,新的句柄(Convert.ToInt64(viewModel.EntityHandle,16)),0); 我从来没有使用句柄直接检索实体。这会更容易或更好的表现?你的建议非常感谢。 对不起,凌乱的评论,与换行符 –

+0

还在挣扎,我不相信你可以直接用手柄访问的实体。 .Net API基于使用ObjectID来完成所有可以使用句柄检索的东西。您使用句柄的主要原因之一是在会话之间给定图形中的特定实体的持续引用。 – Nik

0

相反的ObjectId,你可以存储处理的值(长)。您仍然需要检索的实体时,把手值转换为AutoCAD手柄,但我不明白的方式来逃脱

相关问题