revit-api - 元素选择更改事件 - 实施斗争
问题描述
我正在努力监控 Revit 的元素选择更改。
窗口选择没有问题;监视元素选择随着用户“控制选择”而发生变化,这是我正在研究解决方案的主要问题。回溯 Revit 显然有一个“元素选择已更改”方法,但它被隐藏/弃用,令我们社区中的许多人感到沮丧。
因此,我们社区中的许多人提出了一些好主意来解决这个看似基本的问题。
具体来说,Jeremy Tammicks 很棒的网站 The Building Coder 上详细介绍了这篇文章,其中列出了三种最可行的解决方法。
- 使用 OnIdling 事件检查当前选择
- 使用 Timer 在指定的时间间隔引发事件。
- 使用 Revit 的修改选项卡 PropertyChanged 事件返回选定元素的列表。
我尝试实现的是#3,它最初是由我们社区的一位名叫 Vilo 的成员在这里提出的。Jeremy Tammick 已将此代码提供给我们在 SDK 示例中使用。这是我的实现的当前“工作状态”的存储库。
Jeremy Tammick 像往常一样提出了很好的建议,但以下问题仍然存在。
- “PropertyChanged”事件在取消订阅事件后继续触发。
- 根据订阅/取消订阅事件的次数,多次报告元素 ID。请参阅屏幕截图 #1(可能与项目 #1 事件仍然触发。我的另一个想法是,由于初始“PropertyChanged”事件产生的 PropertyChange,“PropertyChanged”是否再次被触发?
- 并非所有 ElementId 在它们被选中时都会被报告。预感是在某些时候没有财产变化。一旦选择了不同的元素导致属性更改,事件就会触发并显示所有元素 ID。如果您找到了“元素选择更改监控”的主要问题的解决方案或 Vilo 建议订阅修改选项卡属性更改事件 i 的解决方案,并且我怀疑还有许多其他问题,将不胜感激一些反馈。
解决方案
Autodesk Revit API 论坛上的 Fair69 提供了解决选择监控整体问题的最佳解决方案。请参阅答案:https ://forums.autodesk.com/t5/revit-api-forum/element-selection-changed-event-implementation-struggles/mp/9237464/highlight/true#M43721
推荐阅读
- python - 如何在 Python 中比较不同函数中的两个列表?
- geojson - 导入 ArcGIS Web 时的 GeoJSON 多边形始终是实心填充的,而不是我们为 geoJson 设置的透明度/不透明度样式
- http - 考虑到 GET 请求应该是安全的,如何处理 Stripe 上的成功 URL?
- java - FutureTask get() 方法可能会禁用 LockSupport.park
- sql - Oracle sql:如何使用 regexp_* 将标记带到两列或更多列
- c++ - 使用 H264 编码 RGB 帧数据
- java - Create a Local Terminal Emulator App in JavaFX
- javascript - 根据javascript中的深度获取对象的序列号
- operating-system - 一种新的文件系统结构
- python - Python 在 Windows 10 中有 2 条路径