基于Revit的排水沟快速建模插件开发

2021-12-08 06:13湖北理工学院土木建筑工程学院北京橄榄山软件有限公司
智能建筑与智慧城市 2021年11期
关键词:排水沟视图实例

(1.湖北理工学院土木建筑工程学院;2.北京橄榄山软件有限公司)

谢星星1,罗显枫1,叶雄进2

1 引言

建筑信息模型简称BIM(Building Information Modeling),是一款先进的三维数字设计解决方案,应用在房屋建筑工程、结构、机电等领域,利用数字信息在三维平台模拟建筑物的真实信息。BIM 技术有五大特点:可视化、协调性、模拟性、可出图性、优化性[1]。

虽然BIM技术给我们带来了便利,但是依然有许多不便的地方,例如,在水利、交通等方面就存在诸多不便,需要工程师在Revit平台进行二次开发。

2 Revit API的介绍

Autodesk Revit 不仅功能强大,而且还提供了应用程序接口API(Application Programming Interface)。软件工程师可以通过调用API 对Revit 应用程序进行操作和使用,将繁琐、重复的工作自动化[2]。

VB.NET、C++、C#等语言可以调用Revit API 进行BIM 软件开发。利用Revit API进行二次开发的优点:直接读取模型的几何参数;直接创建、修改、删除图元等操作。

3 开发环境配置

3.1 新建一个项目

在Visual Studio 里选择项目类型并创造新的类库,指定对应的命名空间和存储位置,单击ok即可。

3.2 添加相应的引用

在Revit的安装程序中找到RevitAPI.dll和RevitAPIUI.dll文件,为减少成本,可将两个文件的复制本地文件属性改成false(见图1)[3]。

图1 开发流程

3.3 编写代码

在编写代码前需要引用相应的命名空间,根据需求判断是实现IExternalApplication,还是IExternalCommand接口,同时,实现相应函数。

下列代码是一个简单的程序:

3.4 添 加AddInManager 和Revit-Lookup

AddInManager 的作用是在指定路径加载脚本文件到Revit 平台中运行,便于使用和调试,RevitLookup 的作用是查看元素的各个信息,便于查看和使用API。

将两个文件的addin 文件和dll 文件放到指定文件夹中,将addin 文件中的路径改为当前文件下AddInManager.dll文件路径,保存关闭即可。图2 是打开Revit后添加成功的效果。

图2 添加成功后的Revit界面

4 排水沟快速建模开发

本节将利用前述配置的Revit开发环境进行排水沟快速建模的开发。

4.1 手动做族

排水沟在建筑物室外和停车场内部随处可见,能有效解决城市的内涝问题,也能解决人们生活用水的正常排放处理。排水沟分为暗沟和明沟(见图3)。左侧是带盖排水沟,右侧是无盖排水沟。注意:需要勾选加载时剪切。

图3 族效果图

4.2 界面设计

如图4 所示,该设计左侧是一个treeview,右侧是一个Plane 用来放previewcontrol 控件,设计简单易懂,避免用户的消极情绪。当用户选择了族类别时,右侧的previewcontrol 就显示该类型的截面形状,让用户修改。

图4 界面设计

4.3 开发思路

首先获取指定文件夹里面的族文件,根据族名字过滤相应的族,例如,族文件名字是否含有“排水沟”。把族的名字和族类型的名字记录下来,当程序运行时(Form.Loaded),填到treeview 里,部分代码如下:

用户点击族类型时,首先加载族到当前项目中,打开族文档并且找到族文档里的剖面1(见图5),用Dictionary 对象记录当前族类型里面族参数名称和ID和值的三者的关系,随后previewcontrol 显示这个剖面,该图支持缩放,支持滑动修改操作。

图5 加载族剖面图界面

用户切换视图时,需要判断当前previewcontrol 是否有视图显示,如果有,需要把当前显示的视图dispose(),随后在加载其他的视图,以下是加载和切换视图的部分代码:

当用户点击注释的时候,判断附近是否有参数,如果有,则显示一个TextBox,如图6。用户输入后回车即可修改族参数,其注册事件代码如下:

图6 点击事件效果

随即点击绘制线的按钮,窗口关闭,程序调用Revit 自带的绘制模型线API(PostCommand),在DocumentChanged 事件中获取当前文档中变化的元素,最后捕捉键盘的Esc 异常错误,使程序退出绘制,进入空闲事件,在空闲事件中开启事务,创建族实例,图7 就是创建的两个族实例后的样子,连接和剪切良好,事件注册部分代码如下:

图7 通过绘制线创建排水沟效果

用户点击拾取边线按钮创建族实例时,先沿两条线的中心线创建一条红色的模型线,用来提示这个地方已经创建了,当选择的两条线不平行或者两条线没有交集时,应该提示用户重新选择(见图8),创建良好。

图8 拾取边线创建族实例效果

5 研究的问题和未来展望

该研究的难点是当用户切换previewcontrol界面时,要关闭当前还打开的文档,会触发将要打开的族文档的载入事件,如果用document.close(),会报异常,但是用document.dispose()就切换正常。目前,剪切和连接板互相剪切时,API 会导致板连接进来,这一问题有待解决。

猜你喜欢
排水沟视图实例
Thalidomide for refractory gastrointestinal bleeding from vascular malformations in patients with significant comorbidities
皇家库府遇盗
5.3 视图与投影
视图
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
动词“Get”的用法
完形填空Ⅱ
完形填空Ⅰ