【问题标题】:Keep track of element editings or element edited event in Revit 2018/ 2019跟踪 Revit 2018/ 2019 中的元素编辑或元素编辑事件
【发布时间】:2019-04-08 10:38:01
【问题描述】:

我正在处理 Revit 2018 和 Revit 2019 中为主体元素添加钢筋的项目。在我的代码为主体元素重新生成钢筋钢筋后,我不知道用户是否手动编辑了我的主体或我的钢筋(生成当然,通过我的代码)。我只是想出了这两个想法:

  1. 在我的代码生成钢筋时,将所有钢筋和主机信息存储到主机的可扩展存储(字面意思是每个属性、ID 等)中。当我再次调用我的代码在主机上工作时,我会将所有当前信息与主机实体中保存的信息进行比较,以找出已更改的内容。 显然,这种方法会让我付出很多代价,并且会对性能产生巨大的影响。

  2. 通过“元素 - 编辑 - 事件”捕捉用户可能对我的钢筋和主体所做的所有更改。但是,我似乎无法找到适合我需要的正确事件。我已经尝试过 Element 和 Document 事件以及 ITransactionFinalizer 类,但没有结果。

我在哪里可以找到我想要的活动或如何实现我想要的?非常欢迎另一种更好的方法。提前谢谢大家。

【问题讨论】:

  • 我刚刚发现了一种非常有趣的方法,它可以让我得到我想要的东西。我会在测试后将其作为官方解决方案。这是遇到相同问题的人的链接:link

标签: c# visual-studio revit-api revit


【解决方案1】:

我(以及 Jeremy Tammik 先生)提到的解决方案 Tracking Element Modification

是我需要的,但它有点太通用了。

对于这个特定问题的更详细的解决方案,我过滤了我的钢筋主机(梁、柱、墙……),获取所有托管钢筋,然后对其参数进行快照。

给像我这样的新手的一些小笔记:

  1. 某些参数的变化取决于其他参数。如果用户修改是您所追求的,过滤掉已更改的 ReadOnly 参数将使列表缩小很多。

  2. 如果您从主机中删除所有钢筋,或将钢筋添加到空主机,则会相应地删除或添加一些参数。

【讨论】:

    【解决方案2】:

    恭喜您发现了指向Tracking Element Modification 的链接。我也会指出这一点。您可能还想查看该项目的 GitHub 存储库,以及后续项目的想法:

    期待听到您的最终解决方案。如果它的通用性足以引起其他人的兴趣,我很乐意在博客上为您分享。谢谢!

    【讨论】:

    • 感谢您的回复。您提到的解决方案确实解决了我的问题,但我想到了一些事情:假设我想拍摄快照然后将当前状态更新到我的数据库,如果项目包含许多模型,这种方法是否需要很多时间?它可能是解决最终用户“看起来不好”的好方法。
    • 您认为在为最终用户对文档所做的每一个小更改订阅“文档更改”事件时更新数据库的小开销可以弥补这一点吗?我非常感谢您对这种规模问题的想法。
    • 您可以尝试使用DocumentChanged 事件在每次修改时收到通知。这将花费多少时间取决于您的确切实施。我认为它可以做得非常快速和不引人注目。但是,您真的需要通知每一次修改吗?是否只实现一个每 15 分钟左右触发 Revit API 外部事件的 Windows 计时器事件?或者你喜欢的任何其他时间间隔?这对性能的影响几乎为零。
    猜你喜欢
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多