APP下载

基于BIM 的轴网与基桩自动生成方法研究

2022-07-25李丹妮张军王凯管昌生

科学技术创新 2022年23期
关键词:基桩二次开发插件

李丹妮 张军 王凯 管昌生

(1、中交第二公路勘察设计研究院有限公司,湖北武汉 430056 2、中交集团隧道与地下空间工程技术研发中心,湖北武汉 430056 3、武汉理工大学,湖北武汉 430070)

1 概述

目前BIM技术的应用得到了大家的普遍认可[1]。传统的二维设计存在着先天不足,本来建筑是以三维空间为主体的,但是传统的设计交付都是以二维图形作为交付物,在这个三维向二维转换过程中,多专业之间的协调很难保证[2],施工过程中又以二维图纸为蓝图进行施工,必然存在信息上的不对位,出现诸如碰撞、设计出来的功能区使用功能的不合理等问题。

BIM是以三维数字技术作为基础,集成工程中各种数据信息进行建筑三维模型建立,通过数字信息仿真模拟建筑物所具有真实信息[3]。BIM技术是一个完整、丰富建筑信息化协作平台,在建筑信息化领域逐步受到广泛关注和认可[4]。BIM理念实现需要一个兼具广度和深度的标准体系,才能实现工程各阶段之间信息共享互换。BIM是集计算机辅助设计与制造于一体的计算机集成制造系统理念和基于产品数据管理PDM 与STEP 标准的产品信息模型[5]。BIM技术是以建筑项目中各种相关数据信息作为基础,进而对数据模型信息进行整合,实现对建筑工程项目设施实体与功能特性数字化表达。标准和完整的建筑信息模型能够使建筑项目生命周期在各个不同阶段的数据、过程和资源得到共享和关联,可以让建筑项目建设方与参与方进行交流和使用[6]。建筑信息模型具有信息集成、协同管理、相同项目数据源功能,可解决分布式以及不同工程数据之间一致性和全生命周期信息共享问题,支持项目生命周期中所有相关工程信息创建、管理、共享以及互换[7]。随着BIM技术高速发展,建筑行业发展必将进入一个全新的时期[8]。

本文通过Revit API 插件开发实现快速道路及场地平整模拟,目前对基于.NET 的Revit 二次开发相关文献相对较少,因此通过Revit 进行二次开发,打通各类软件信息交流以及开发插件使Revit 本土化已成为研究热点。本文开发插件成果,可以提高BIM建模设计的效率,便于BIM技术推广应用。

2 Revit 二次开发技术路线

2.1 Revit 二次开发环境及工具

在Revit 中参数化表现为模型的所有元素之间的关系,简单来说参数化就是让模型各个元素随着用户指定的参数进行协调变化。Revit 模型中所有参数的修改,都可以自动调动Revit 参数化修改引擎,来协调任何相关位置上的模型或者视图等变化。Revit 所提供的API 包含了对几乎所有元素的参数的读取、修改、甚至还可以定义新的参数。

2.2 本文技术方法

软件的外部事件开发方法,不同于大部分现有二次开发方法。目前大部分论研究是用外部命令加外部应用的方式进行组合开发,主要是为了避免选项卡中有过多的按钮、以及可以实现插件非模态运行。因此,本文采用了外部事件、外部命令和外部应用相结合的方式,进行插件软件的开发。关键技术是应用winform 与外部事件相结合组插件程序的主要部分,可以实现操作Revit 和操作本插件之间的灵活切换,实现特定功能创建。其中winform 作为插件的主界面,外部事件作为响应用户操作主界面的响应部分。本插件程序由主界面向主程序传递各类用户输入的参数,整个插件主要由主界面和主程序构成。

3 轴网与基桩自动生成方法

3.1 轴网插件开发

3.1.1 创建插件主界面。Revit 允许用户自定义Ribbon 面板[10],方便用户按照自己的意图在Revit 中实现用户与Revit 的交互。本文应用强大的Winform 来实现交互的用户友好性。WinForm 是.Net 开发平台中对Windows Form 的一种称谓,它功能强大、操作方便、使用安全,可以应用它创建丰富的界面,其本身自带大量功能强大的控件,甚至可以让用户不写一行代码也能创建简单的窗体程序。为了调用Winform 来作为主程序的交互界面,本文先调用RevitAPI 中的外部应用方法来生成调用Winform,在Revit 中创建一个Ribbon 面板以及在面板上生成弹出主界面窗口的命令按钮。编写代码实现弹出主窗口,在对button Data 变量初始化时,指定了要实现的命令的类的名字Auto generation For Foundation Pile. Foundation Piles Command,单击命令按钮时,将会调用这个类。而Foundation Piles Command 这个类的实现将会把主界面弹出来。

通过两步代码编写,并在整个项目中添加一个Winform 窗体,即可实现单击Ribbon 面板上的命令按钮,弹出主界面窗口,生成的窗口为非模态窗口,便于用户在插件窗口与Revit 窗口之间自由切换,实现模态窗口所不能实现的功能。

3.1.2 轴网生成主要算法。轴网相当于地球的经纬网,在Revit 里起到“定海神针”的作用,整个建筑都是以轴网为定位依据建立起来的。目前在Revit 里建立轴网的一般步骤为:①一般选择场地楼层平面→②选择建筑选项卡→③单击轴网命令按钮→④在目标位置画出轴网→⑤重复第④步→⑥生成目标轴网。

通过这几个步骤,就可以将想要的轴网画出来,在轴网轴线比较少时,感觉不出用传统Revit 轴网绘制方式的缺陷,如果轴线很多时,传统绘制轴网方法就比较费时了。因此,可以通过Revit 的二次开发来解决这一重复性高的工作,利用输入几个参数来自动画出轴网,为设计师节省宝贵的时间,提升设计效率。本插件的自动生成轴网功能借鉴了PKPM生成轴网的方式,使用了下开间间距、下开间数量、左进深深度、左进深数量四个参数控制轴网的生成。为了保护这四个变量不受BuildGrid类之外的代码对它们进行直接修改,在BuildGrid 类内部设立了四个与这四个变量一一对应的属性,它们分别是XKJ_D、XKJ_N、ZJS_D、ZJS_N。通过这种设立属性的方式,可以保护整个程序数据的稳定性,从而减少因为变量被意外修改而引起的难以发现的错误。

此方法将下开间的轴线与左进深的轴线进行分开生成,这样的好处在于,方便维护升级算法、便于发现错误。此方法的前四个参数由BuildGrid 类内的四个双精度浮 点 变 量 doubleXiaKaiJian_Distance、double XiaKaiJian_Number、double ZuoJingSheng_Distance、double ZuoJingSheng_Number 传入,而这四个双精度浮点变量的值由BuildGrid 类内部的四个属性进行赋值。为了从BuildGrid 类外部获得XKJ_D、XKJ_N、ZJS_D、ZJS_N 的属性值,因此从主界面的四个文本框把用户输入的值赋予XKJ_D、XKJ_N、ZJS_D、ZJS_N 四个属性,界面如图1 所示。然后,通过外部事件建立连接建立主界面与主程序的连接。在非Revit 内部环境中建立外部应用、外部命令,这在目前的几个版本的Revit 中是被禁止的,因此需要借助外部事件来解决这一问题。但在应用外部事件做开发时,要注意外部事件在被触发后,外部事件触发之后的代码会与外部事件同时执行,它们分别属于不同的线程。通过代码设计,可以看到下开间间距属性与左进深属性,分别都除以变量ZhuanHuanZhi,这是因为Revit内部基本单位是英尺,如果要获取或设置构件参数数值需要进行单位转换。轴网生成效果如图2 所示。

图1 参数选择界面

图2 轴网生成效果图

3.2 基桩族插件开发

用户自己在Revit 中创建基桩族、使用族库大师等插件获得基桩族、编程开发自动生成基桩族。无论是从各大插件还是用户自行创建,都可以很方便的获得各类基桩族。因此本文采用从外部载入基桩族,作为自动生成的基桩功能的基桩族来源。

基桩作为与轴网具有强烈关系的地下构件,因此基桩的定位点主要是定位在捕捉轴网中的轴线交点上。以下就是基桩的自动定位和生成的主要代码及开发思路:

3.2.1 加载族到项目中。单击图3 中的“加载基桩族”按钮,通过Open File Dialog open Foundation = new Open File Dialog() 创建加载外部基桩族对话框,而后将读取到外部基桩族的路径传递到主程序中的Load Foundation Family 类中,将Load Foundation Family 类中Path of Foundation Family 属性赋值,为加载基桩族对话框所读取到路径值。 使用 doc.Load Family(path_O_Foundation,out family)这条语句。若这条语句返回True,则对话框中选定的基桩族将成功加载进项目中,其中doc 是Document 类的一个实例化对象。在将基桩族加载进入项目的同时,主界面将同时使用timer 控件进行对加载进入项目中的基桩族进行族类型的扫描。由于本插件中Load Foundation Family 类与生成基桩的类Build Foundation 有很强的顺序关系,Build Foundation类需要得到已经加载到项目中的外部基桩族的族类型参数,所以在Load Foundation Family 类中,将Load Foundation Family 类所需要的参数进行属性化设置,方便保护类本身的数据安全、以及不同类之间传递信息。

图3 加载基桩族

3.2.2 捕捉轴网交点。在生成基桩之前需要获知基桩的定位点,工程中基桩一般位于轴线交点上,本插件将采用轴线交点作为基桩生成的定位点。为了增加主程序的可读性、简洁性以及代码的模块化、复用性,单独编写了一个方法类method,在这个类中包含多个主程序需要的通用方法。其方法是Get Intersection From Grids(Document doc),本方法只需读入一个文档类Document参数,即可返回此文档中轴线交点集合List<XYZ>,本方法获取交点集合的思路是通过两个for each 遍历语句来实现交点集合的寻找与装载。

通过方法Get Intersection From Grids(Document doc),就可以获得基桩群的定位点集,这个点集是至关重要的基桩群定位信息集合。有了这个集合,就可以为创建指定位置的基桩群做好准备。

3.2.3 获取基桩族类型及标高。Revit 为了系统化管理图元,将所有的图元都进行了分类,分类的级别有三级,即:一级分类:族类别,将项目进行专业上的分类,例如梁、结构柱、条形基础等就归为结构类的族类别,放在结构选项卡中方便用户寻找。二级分类:族,每种族都是一系列子构件的集合,例如一级分类中的梁元素就包括了很多种类型的梁,例如矩形梁、工字钢梁、叠合梁等。三级分类:族类型,族类型是更小一级的单位,它是二级分类的细化,是同一族下的不同子类型,例如300×600矩形梁、400×800 矩形梁等。

由上可知,用户在通过插件主界面加载外部基桩族后,需要指定用户想要生成的族类型。本插件会默认一个族类型供用户使用如图4 中红色矩形框中所示,当然用户也可以通过主界面中的下拉列表选择来指定自己想要的族类型。

图4 默认族类别

3.2.4 生成基桩。单击“生成基桩”按钮,将外部基桩族与用户所选用的外部基桩族类型,这两个参数传入主程序中的Build Foundation 类中的两个对应属性,随后触发Build Foundation 类的外部事件,开启事物,生成基桩群。因为前面已经获得生成基桩群的所有参数,故生成基桩群的核心代码在这一步只有一个遍历语句和一条创建语句。生成的基桩群如图5。

图5 生成的基桩群三维示例

4 结论

本文探讨了revit 插件开发的基本方法,针对轴网设计与桩基设计,对基于BIM技术建模的快速绘制BIM模型方法进行了研究。其中包括代码编写、模块主要功能实现与测试,功能算法分析。对具体开发过程中的外部事件与外部应用、外部命令相结合、发挥了外部事件、外部应用、外部命令各自特特征,并对插件软件进行了模块化编制与应用。通过AUOTODEAK 公司对外界开放RevitAP,可以通过软件工程师开发相应算法来解决国内用户的本土化需求。

猜你喜欢

基桩二次开发插件
AutoCAD 与PDMS 二次开发在三维复杂形体设计建模上的应用
基桩超声检测有限元数值模拟研究
用好插件浏览器标签页管理更轻松
例谈对高中数学教材中习题的二次开发
浅谈CAD软件二次开发的方法及工具
例谈课本习题的“二次开发”
请个浏览器插件全能管家
剪切变形对基桩P—A效应的影响
基于jQUerY的自定义插件开发
美国社交网站的周末大战