Building Coder(Revit 二次开发) - 元素层级事件(下)

Building Coder 链接:http://thebuildingcoder.typepad.com/blog/2010/04/element-level-events.html#2

Revit 二次开发论坛链接:http://revit.5d6d.com/viewthread.php?tid=1317&extra=


动态模型更新的使用在两个SDK例程里都有展示:DynamicModelUpdate 和 DistanceToSurfaces。后者还展示了分析可视化框架,因此被归类到 AnalysisVisualizationFramework  文件夹中。这两个例程都以外部
应用程序的形式实现,并且在其 OnStartup() 方法中创建更新器和触发器。

DynamicModelUpdate 例程:

该例程实现了一个外部应用程序,并且使用一个模型模板文件:AssociativeSection.rvt。它通过动态模型更新机制维护元素之间的相对位置。例程中的元素是一扇墙上的窗户和
显示墙及窗户切面的截面视图。例程中使用了硬编码的 Element ID 来定位截面视图。实现细节如下:
1. 在启动时
a. 注册 SectionUpdater 类
b. 在 SectionUpdater 类中为窗户的几何数据变化添加一个触发器
2. 当窗户的几何数据变化时
a. 移动截面标记到一个新位置。新位置坐标根据窗户移动的偏移(存储在窗族参数中)计算得到
b. 更新窗族的X/Y/Z参数到新位置

如果移动窗户,截面视图也会跟着移动,保证它一直显示正确的切面。当然,由于窗户是附着在墙体上的,所以移动墙体也可以看到同样的效果。

DistanceToSurfaces 例程:
该例程的主要目的是展示最新的分析可视化框架:允许程序通过在元素表面喷色的方式图形化地显示分析结果。同时它借助动态模型更新检测触发分析动作的事件。和
DynamicModelUpdate 例程一样,它也使用了一个自定义的模型。该模型是一个球体族实例(sphere.rfa)。DistanceToSurfaces 例程计算球体到所有墙体和聚集元素
表面的距离。

启动时,一个外部应用程序会注册 DocumentOpened 事件。在其事件处理器中会为墙体、聚集元素和族实例的变化创建一个统一的触发器。当其被触发时,程序会计算球体
到每个表面的若干个点的距离。这些距离值将被用于分析可视化显示。实现细节如下:
1. 在启动时,注册 DocumentOpened 事件。当文档被打开时:
a. 检查球体族是否存在
b. 检查 3D 视图“AVF”是否存在
c. 创建一个 GetChangeTypeGeometry 触发器,当墙体、聚合元素或者族实例变化时被触发
2. 当触发器被触发时
a. 找到球体的位置
b. 获取当前的空间字段管理对象,如果不存在就新建一个
   译者注:这是分析可视化框架提供的类,定义在 [SDK]\Sample\AnalysisVisualizeationFramework 目录下
c. 创建一个表面(Face)数组,包含墙体和聚合元素的所有表面
d. 计算球体球心到每个表面上若干个点的距离
e. 通过更新空间字段对象,将这些具体作为分析结果显示到对应的表面上

在 Revit 2010 之前,API 只提供程序级别和文档级别的事件。从 2010 版开始,元素级别事件的引入使 Revit 二次开发变得更加灵活和强大。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值