我有一个问题,它更多的是“最佳实践”的理论,而不是实际的技术编程。
在我的程序放置了一个元素之后,我正在尝试想出最好的方法来处理元素的编辑。具体地说,我的程序设置如下:
用户单击一个工具,该工具实际上是在Revit中将一些族添加到项目中。它读取用户创建的草图,并根据草图放置项目。
Sketch
Element creation
我想给用户提供“编辑草图”的能力,这些元素类似于楼板。我不相信Revit API提供了使用“草图模式”进行草图绘制的能力。我正试图在我的程序中模仿这个非常有用的功能。
因此,我所做的就是使用可扩展存储,并将UniqueId存储到使用我的工具创建的所有元素中。程序所做的是,当用户单击“编辑元素”工具时,程序要求提供新的草图,要求单击现有元素,读取现有元素的UniqueId并使用该UniqueId调用所有元素并删除它们,然后程序使用用户的"new sketch“将新元素再次添加到项目中。
问题是,如果用户删除了添加到项目中的原始元素,然后尝试编辑它们,如何保证用户不会删除那些具有UniqueId的原始元素呢?我认为方法是使用Revit API中的动态模型更新功能。
这些算法中的大多数是如何编写的?我是不是走对了路?我是否只是将UniqueIds赋值给元素,并将它们存储在元素本身中,以便以后可以调用它们?也许我遗漏了拼图中的一个基本理论部分。数据结构?
发布于 2016-06-20 05:04:44
我认为你基本上是在正确的轨道上。
使用可扩展存储来存储UniqueIds绝对是可行的,而且使用DMU动态模型更新器功能来对更改做出反应听起来也不错。
有一件事似乎不太清楚,那就是Revit会在创建图元时自动将唯一is指定给图元,而您无法对此产生任何影响。唯一的id是唯一的和不可变的,您无法控制它。
因此,最简单的方法可能是删除所有以前的草图元素,并在需要以任何方式修改草图时从头开始重新创建整个草图和定义它的所有元素。
发布于 2016-06-20 16:50:12
对于结构化存储,您应该使用ElementId而不是UniqueId,因为当工作共享更新发生时,ElementId会自动重新映射到新的ElementId。删除元素时,ElementId也设置为ElementId.InvalidElementId。
https://stackoverflow.com/questions/37900020
复制相似问题