Revit 2022 API中选择旧版升级结构框架时Idling事件不触发咨询
Revit 2022 API:旧版本升级文档中选中结构框架时Idling事件不触发的问题
已知问题确认
这是Revit 2022 API的已知兼容性问题,仅针对从旧版本(如2021及更早)升级到2022的文档中原有的结构框架实例。这类元素在升级过程中,内部的选择状态标记未被正确更新,导致选中时无法触发Idling事件;而新绘制或复制的结构框架是基于2022的格式创建,不存在该问题。
解决方案
批量重置旧结构框架元素
通过API遍历文档中所有旧结构框架,执行以下操作强制更新元素内部状态:- 调用
Element.Regenerate()方法(需在事务内执行) - 修改一个非关键参数(如"注释")后再恢复原值,触发元素状态刷新
示例代码片段:
Using trans As New Transaction(uiApplication.ActiveUIDocument.Document, "Reset Structural Frames") If trans.Start() = TransactionStatus.Started Then Dim collector As New FilteredElementCollector(uiApplication.ActiveUIDocument.Document) _ .OfCategory(BuiltInCategory.OST_StructuralFraming) _ .WhereElementIsNotElementType() For Each frame In collector.Cast(Of FamilyInstance)() ' 修改并恢复注释参数触发状态更新 Dim origComment As String = frame.LookupParameter("注释")?.AsString() frame.LookupParameter("注释")?.Set("temp") frame.LookupParameter("注释")?.Set(origComment) Next trans.Commit() End If End Using- 调用
迁移元素到新文档
将旧文档中的结构框架复制到新建的Revit 2022空白文档中,元素会以2022原生格式重新创建,彻底解决兼容性问题。
替代方案:使用SelectionChanged事件替代Idling事件
如果不想修改原有元素,可以直接监听SelectionChanged事件,该事件不受旧元素兼容性问题影响,能精准捕获选择变更:
' 替换Idling事件注册为SelectionChanged事件 AddHandler uiApplication.ActiveUIDocument.Selection.SelectionChanged, AddressOf Selection_SelectionChanged Private Sub Selection_SelectionChanged(sender As Object, e As EventArgs) Dim selected As List(Of ElementId) = uiApplication.ActiveUIDocument.Selection.GetElementIds ' 执行你的业务逻辑 ' 注意:频繁选择变更会多次触发事件,可添加防抖逻辑(如延迟执行或标记位)避免重复操作 End Sub
内容的提问来源于stack exchange,提问作者Georg
相关产品推荐
相关产品推荐

