APP下载

基于C#的装配式BIM构件库二次开发★

2021-02-01张晓丹毛燕红

山西建筑 2021年4期
关键词:二次开发插件绘制

黄 岩 张晓丹 毛燕红

(江苏建筑职业技术学院,建筑工业化与信息应用技术研究所,江苏 徐州 221116)

0 引言

建筑工业化和信息化正在引领着建筑业的发展,装配式建筑和BIM又是工业化和信息化在建筑工程的重要体现,通过BIM技术实现装配式构件的建立和修改是关键内容之一,基于BIM的装配式生产发展模式已经成为建筑行业发展的必然趋势[1]。装配式构件库作为BIM的一个重要组成部分,对于企业和高校都有重要意义。对于企业而言,逐步在建模过程中建立自己的构件库,对于今后的BIM应用是一个极大的积累,可以大量的节约时间和金钱成本。对于高校而言,建立自己的构件库,不仅对教学的可视化带来帮助,使同学们可以直观控制参数来调节构件,而且也能明显提高服务企业时的建模的速度和准确性。

国内在2015年后逐步开始对Revit二次开发进行研究。2016年,肖贝利用Revit二次开发程序,结合基坑开挖工程案例,实现开挖模型建立,相应的土方量也可以同时准确计算得到[2]。2017年,刘济凡和靳鸣对基于Revit的装配式建筑项目深化设计插件进行研究开发,使用BIM软件Revit对某装配式建筑项目进行深化设计的过程中,遇到软件没有装配式专用模块、效率低下的问题,通过对Revit软件的二次开发,减少了大量重复性的工作,使深化设计工作如期完成[3]。2019年,乔恩懋和丁琦基于Revit二次开发对空间网架结构BIM建模技术进行研究,通过对数据库接口进行二次开发,使建模流程自动化,进行干涉和遗漏自动检查,大大提高了钢结构空间网架的建模效率[4]。陶婉婉对BIM模型数据进行二次开发研究,有效的提取模型构件的基本属性、层次以及关联关系等相关数据信息[5]。

然而,现阶段的BIM软件对装配式建筑的支持还处于初始阶段,开发人员正在努力开发适应装配式的BIM软件,虽然市面上已经出现了很多相关软件,但由于装配式建筑发展迅速,现有软件不能完全适应装配式需求。作为主要的BIM软件Revit,本身没有单独的装配式模块,建模效率低下,导致装配式模型BIM模型建立和使用较常规现浇模型困难很多,建立的族参数化受限,钢筋等信息不能完全体现,没有令人满意的装配式插件可供用户使用,需要探索准确方便的Revit构件库插件来帮助装配式建模。

1 程序基本原理

本程序二次开发采用C#和Revit API。C#作为一款面向对象的编程语言,继承了C和C++的强大功能,同时和Java一样具有易用性,在编程语言排行榜常年位居前五,有大量编程案例。C#具有大量的函数和类库,调用十分方便,功能非常强大,且使用难度较C和C++低,面向对象的编程语句友好,非常适合Revit软件的二次开发[6]。

Revit API是AutoCAD为Revit二次开发专门提供的类库,包含了创建、删除、修改构件和构件信息,批量化操作构件,导入外部数据文件,执行第三方程序,自动分析BIM模型信息等几乎所有Revit操作。Revit API和C#有良好的接口,通过Visual Studio等集成开发环境可以灵活进行装配式构件库二次开发。

2 软件开发过程

2.1 需求分析和深化设计

遵循软件开发的一般过程,首先是需求分析,以较为复杂的叠合板为例,三维模型需要基本的参数来控制,这些参数要满足工程实际。然后是深化设计,将叠合板的每一个控制参数细化见表1。每个变量需要有一个唯一的名称作为区分,变量类型根据实际需要确定为整形、浮点型等,取值区间为变量的范围,是否可以为空值,防止不合理的数据带来软件错误。给每个变量定义合适的初始默认值,方便用户使用。

表1 叠合板控制变量参数表 mm

2.2 程序入口模块

Revit API提供了外部命令(IExternal Command)的形式来调用类库,最后生成DLL动态链接库文件,通过外部工具调用绘图命令,需要调用System,System.Collections.Generic,System.Text,System.Diagnostics,Autodesk.Revit,Autodesk.Revit.DB,Autodesk.Revit.UI等类库。

2.3 三维图形绘制模块

装配式构件绘制的实质是Revit中的族的建立。Revit API提供了Family类来管理族类型和族参数,包括FamilyManager,FamilyType,FamilyParameter等若干类。

Revit族有五种常见的绘制方式,包括拉伸、融合、旋转、放样、放样融合等,三维图形绘制模块正是采用这五种基本方法进行模型建立。通过族的五种方式创建的模型,可以进行移动、旋转、镜像、复制等方法来绘制和调整。本程序叠合板创建核心代码如下:

CurveArrArray caay = new CurveArrArray();

CurveArray cay1 = new CurveArray();

Autodesk.Revit.DB.XYZ nor1 = BasisZ;

SketchPlane skp = CreateSketchPlane(nor1, XYZ.Zero);

XYZ pt0 = XYZ.Zero;

XYZ pt1 = new XYZ(dhbl, 0, 0);

XYZ pt2 = new XYZ(dhbl, dhbk, 0);

XYZ pt3 = new XYZ(0, dhbk, 0);

Line linep1 = Line.CreateBound(pt0, pt1);

Line linep2 = Line.CreateBound(pt1, pt2);

Line linep3 = Line.CreateBound(pt2, pt3);

Line linep4 = Line.CreateBound(pt3, pt0);

cay1.Append(linep1);

cay2.Append(linep2);

cay3.Append(linep3);

cay4.Append(linep4);

curveArrArray.Append(cay1);

Extrusion rion = creationFamily.NewExtrusion(true, caay, skp, dhbg);

XYZ trans1 = new XYZ(0, 0, 0);

ElementTransform.Move(familyDocument, rion.Id, trans1);

2.4 图形界面交互模块

要友好的运行软件,必须有合理的GUI(Graphical User Interface),图形界面使用户更加利于接受软件,使用常用的Ribbon界面模式,设计较为合理的图标,包含在Ribbon UI库中,使用Ribbon界面调出对话框。

以绘制叠合板为例,用户交互界面如图1所示。

2.5 注册程序

Revit调用插件时,需要提供插件的ID,才能正确加载,程序完成后,需要在Revit的addin文件中定义如下语句,进行程序注册。

3 装配式参数构件绘制

打开Revit 2019,创建项目模型或者族模型,使用外部程序加载装配式构件库插件后,提示绘制构件。根据提示可以绘制装配式构件,输入合适的参数,可以进行相应图元的绘制。如图2所示为Revit中布置的叠合板。

以叠合板为例,根据右侧图形界面提示,需要输入叠合板的长度、宽度、高度、桁架高度、上弦钢筋直径、下弦钢筋直径、腹杆钢筋直径、定尺长度以及桁架间距等参数,并注意系统提示的输入单位,点击确定按钮,系统会根据输入参数在Revit模型绘制界面自动绘制叠合板构件,并把相应参数传递到Revit族类型和族参数中,以方便下次修改。

图3为Revit中布置的叠合梁,包括叠合梁长,宽、高、顶部和底部钢筋直径、箍筋间距、箍筋直径、钢筋保护层厚度等参数。

图4为Revit中布置的预制剪力墙。包括剪力墙长、宽、高、墙洞数量和位置、墙洞长、宽、高、纵向和横向钢筋直径和间距、钢筋保护层厚度等。

开发环境采用Visual Studio 2019社区版开发,NetFramework 4.7版本,i5-4210u CPU,8G内存,Autodesk Revit采用2019版。

4 结论

本文采用C#对Revit进行装配式BIM构件库二次开发,得到以下结论:1)基于C#的Revit二次开发扩充了BIM装配式族库,减少了重复性工作,在一定程度上解决了Revit没有单独的装配式模块,建模效率低下的问题。2)基于C#的Revit二次开发可以较好的实现叠合板、叠合梁、预制柱、预制剪力墙、预制楼梯等常见装配式构件的参数化绘制和修改,形成参数化构件库。3)可以在此二次开发基础上进一步开发Revit装配式插件,进行装配式建筑整体建模,统计钢筋和混凝土量,基于Revit的装配式算量和造价,计算构件预制率,装配式5D施工动画制作等。

猜你喜欢

二次开发插件绘制
基于Excel VBA和AutoCAD的滚动轴承参数化比例图绘制方法
自编插件完善App Inventor与乐高机器人通信
西门子Operate高级编程的旋转坐标系二次开发
超萌小鹿课程表
基于OSGi的军用指挥软件插件机制研究
浅谈Mastercam后处理器的二次开发
西门子Easy Screen对倒棱机床界面二次开发
为雄安的交通绘制一张蓝图
基于jQUerY的自定义插件开发
在转变中绘制新蓝图