【问题标题】:Revit API Editing Elements After Creation创建后的 Revit API 编辑元素
【发布时间】:2016-10-20 09:08:30
【问题描述】:

我有一个问题更多是关于“最佳实践”的理论,而不是实际的技术编程。

我正在尝试考虑在我的程序放置元素后处理对其进行编辑的最佳方法。具体来说,我的程序设置如下:

用户单击 Revit 中实质上“将一些族添加到项目中”的工具。它读取用户创建的草图并根据草图放置项目。

Sketch

Element creation

我想让用户能够“编辑草图”那些类似于楼板的元素。我不相信 Revit API 公开了使用“草图模式”绘制草图的能力。我正在尝试在我的程序中模仿这种非常有用的功能。

所以,我所做的是使用可扩展存储并将 UniqueId 存储到使用我的工具创建的所有元素中。程序所做的是当用户单击“编辑元素”工具时,程序要求新草图,要求单击现有元素,读取现有元素的 UniqueId 并调用具有该 UniqueId 的所有元素并删除它们,然后程序使用用户“新草图”再次将新元素添加到项目中。

问题是,如果用户删除了添加到项目中的原始元素,然后尝试对其进行编辑,我如何保证用户不会删除那些具有 UniqueId 的原始元素?我认为要走的路是使用 Revit API 中的动态模型更新功能。

这些算法中的大多数是如何编写的?我在正确的轨道上吗?我是否只是将 UniqueIds 分配给元素并将它们存储在元素本身上,以便稍后调用它们?也许我缺少这个难题的基本理论部分。数据结构?

【问题讨论】:

    标签: c# api elements editing revit


    【解决方案1】:

    我认为你基本上是在正确的轨道上。

    使用可扩展存储来存储 UniqueIds 绝对是要走的路,而且使用 DMU 动态模型更新器功能来响应变化听起来不错。

    似乎不清楚的一件事是,Revit 会在创建元素时自动为元素分配唯一 ID,您无能为力。唯一 ID 是唯一且不可变的,您无法控制它。

    因此,最简单的方法可能是删除所有以前的草图元素,并在需要以任何方式修改草图时重新创建整个草图以及从头开始定义它的所有元素。

    【讨论】:

    • 感谢您的回答。为了澄清问题,我使用了可扩展存储并创建了一个唯一 ID,并将其应用于属于该草图的所有元素。因此,在编辑草图时,软件会查找该模式和分配给实体中字段的通用 ID。我确实可以控制的唯一标识。此外,在阅读了很多 Revit api 帮助文章之后,我的印象是 uniqueid 是要走的路,因为我可以将元素从一个项目复制到另一个项目,并且 id 仍然是唯一的。 Maxence,你是说 elementid 会发生这种情况?
    • 如果您使用存储在可扩展存储中的元素 ID,revit 会以智能方式处理关系转换:thebuildingcoder.typepad.com/blog/2011/06/…
    【解决方案2】:

    您应该使用 ElementId 而不是 UniqueId 进行结构化存储,因为当工作共享更新发生时,ElementId 会自动重新映射到新的 ElementId。删除元素时,ElementId 也设置为 ElementId.InvalidElementId。

    【讨论】:

    猜你喜欢
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    相关资源
    最近更新 更多