APP下载

基于Revit的新奥法隧道初期支护构件参数化建模研究

2019-11-07刘兆新田斌华陈元培徐帮树石伟航

隧道建设(中英文) 2019年10期
关键词:弧线钢架格栅

刘兆新, 田斌华, 陈元培, 徐帮树, 石伟航

(1. 山东滨莱高速公路有限公司, 山东 淄博 255200; 2. 山东大学齐鲁交通学院, 山东 济南 250002)

0 引言

近几年来,建筑信息模型(BIM, building information modeling)技术迅速兴起,其结合了计算机辅助设计与数字技术,使得工程设计与建设从二维的CAD图纸升级为含有参数信息的三维模型[1]。但BIM技术在新奥法隧道中的应用尚处于起步阶段,BIM技术的研究对于展示隧道的设计、施工等信息、提高信息化建设管理水平具有重要意义,因此,现已成为隧道工程信息化发展的趋势。

新奥法隧道中构件种类多,数量庞大,若不采用参数化建模,则需要对每一隧道构件进行单独建模,工作量巨大,这将在很大程度上限制BIM技术在隧道工程中的应用。所谓参数化建模,就是将模型的关键特征及单元进行提取,并适当简化,通过编写特定的算法,使其实现模型的自动生成与拼装[2]。参数化建模技术将是以后隧道模型建立发展的趋势。基于现有Revit软件进行二次开发,研究并提出新的公路隧道参数化建模算法,可以在前人的基础上缩短开发周期、降低建模成本,以实现快速批量建模。而目前关于新奥法隧道的参数化建模研究还非常少。一些学者利用Revit在其他方面[3-10]做过一些研究,例如: 丁晓宇等[8]研究了二次曲面网壳的参数化建模,但并未在具体行业领域进行实际应用;饶志华[9]研究并实现了地铁围护结构模型的快速生成,但其利用了手工创建的族库,并未完全实现参数化建模;马佰钰[10]对斜拉桥的参数化设计进行了研究,但只是实现了模型的参数化创建,对于模型的位置还需要手动操作布置。

由以上研究可以看出,关于通过Revit二次开发实现参数化建模的研究已相对较为成熟,但针对隧道模型快速建立的研究较少,且目前大多数参数化建模技术仅仅围绕模型本身进行创建,对于模型的空间位置还需进行手动布置。因此,本文通过对隧道初期支护构件(如小导管、格栅钢架等)在隧道设计与施工过程中的特点进行研究,利用Revit二次开发,设计算法实现了隧道初期支护构件的参数化创建与自动布置; 然后,以某隧道工程实例验证了本文提出的构件参数化建模方法的可行性。以期研究结果为类似工程的参数化建模研究提供一种新思路。

1 Revit二次开发流程

Revit允许通过任何与.NET兼容的语言来进行二次开发,例如: Visual Basic.NET、C#、C++等。本文选择C#语言基于Revit 2017使用Visual Studio 2012来进行编译。

在Revit二次开发过程中,获取用户输入数据主要有2种方式,一种为Windows窗体即Winform,另一种则为WPF窗体。本文采用了Winform编写窗体,本质上,窗体程序也只是一个类,仅仅是主程序在运行时调用它。而窗体程序中的参数向主程序传递的方式通常通过重载构造函数来实现。此外,在Revit的事件响应中修改文档,必须显式地启动一个事务,任何修改都要在事务提交后才写入文档,如果在事件响应前事务未被关闭(提交或撤销),则在该事务中的所有修改都将被丢弃[11]。

本文通过外部命令来执行程序,Revit二次开发流程如图1所示。

2 隧道构件模型的快速生成

2.1 锚杆的参数化创建与布置

新奥法隧道断面通常由几段圆弧组成,这在实际建模过程中比较复杂[12]。本文为此做了相应简化,将隧道断面简化为由2段圆弧组成,即下部仰拱部分单独作为一段圆弧,其余上半部分作为一段圆弧。隧道断面简化示意图如图2所示。

图2 隧道断面简化示意图

本文插件所建立的所有模型均是基于一个较特殊的族文档——概念体量。概念体量的设计功能非常强大,弥补了一部分常规建模方法如公制常规族API(application programming interface)在建立复杂曲面异形结构模型时的不足,在方案推敲、曲面异形建模、高效参数化设计等方面都有非常好的运用。概念体量创建几何图元的方式与其他族文档完全不同,API中有一套独立的函数来实现概念体量中几何图元的创建与编辑。此外,本文中的所有插件均是针对直线形与圆弧形(平曲线)隧道。因为Revit圆弧形阵列API的局限性,本文研究主要针对平曲线,带有缓和曲线或特殊加宽段的隧道需要单独进行手动布置操作。

锚杆支护是隧道施工中常采用的一种支护加固方式。锚杆的种类有很多,在隧道中常用的锚杆有砂浆锚杆、中空注浆锚杆及药卷锚杆等[13]。本文主要针对砂浆锚杆及中空注浆锚杆的创建进行研究。

在实际工程中,每一榀锚杆都是沿着隧道断面环向布置的[14]。一般可以采用2种方式实现锚杆的快速布置: 1)基于链接CAD图生成布置所有锚杆; 2)在Revit中绘制相应的隧道断面圆弧,由弧线布置所有锚杆。方法1)中CAD图的弧线可能存在多余的重叠线段,需要对线段进行重叠处理;方法2)是首先绘制隧道或各构件布置弧线,基于该模型线布置所有锚杆,可不基于CAD图。因此,本文采用方法2)实现锚杆的快速布置,其弧线布置如图2所示做了适当简化。读取模型弧线信息的代码如下:

UIDocument uiDoc = cmdData.Application

.ActiveUIDocument;

Reference ref1 = uiDoc.Selection.PickObject(

ObjectType.Element, "选取元素");

Element elem = revitDoc.GetElement(ref1);

Options options = new Options();

//取得几何元素

GeometryElement gE = elem.get_Geometry(options);

//取得圆弧几何信息

foreach (GeometryObject item in gE)

{

arc = item as Arc;

k1 = arc.Radius;//弧线的半径

Execute6 _exeventHander2 = new Execute6(k1);

}。

锚杆生成的大致流程是: 1)绘制锚杆布置的模型弧线并选择,输入锚杆生成的相应参数。若为圆弧形隧道,则还需要点击“选择圆曲线”按钮,然后选择相应隧道曲线; 而对于直线段隧道,则无需点击该按钮,直接进行选择即可在体量族环境下生成单个锚杆模型。2)自动导入建筑项目中进行旋转、阵列等操作,最终生成所有的锚杆。锚杆生成流程如图3所示。

依据上述流程,程序需要提供用户输入界面以方便用户输入锚杆类型、直径、长度、环向间距、纵向间距以及标段长度等参数,设定界面如图4所示。点击锚杆生成按钮即提示选择模型弧线,单击选择模型弧线之后,弹出该参数设定界面,在该界面输入相应参数,若为圆弧形隧道,则点击选择圆曲线,然后点击“确定”按钮即可生成所有锚杆。

图3 锚杆生成流程

图4 锚杆参数设定界面

此外,在将单根锚杆导入项目中后,如何使锚杆沿着所任意绘制的弧线进行圆弧形阵列是其中的一个关键问题。针对此问题,本文采取的整体思路为: 1)将锚杆移动到前文所读取到的弧线圆心位置。2)将锚杆向某一方向(如向上)移动弧线半径的距离,并在此建立1条与锚杆轴线重叠的线段,判断该线段是否与弧线相交。3)①若相交,则基于圆心沿某一侧(如逆时针)旋转,每次比上一次多旋转0.001 rad(此处兼顾考虑了模型精度及插件效率),直到旋转至与弧线不再相交的位置,然后往回旋转0.001 rad,此位置即可看作弧线的一侧端点,然后将锚杆旋转至该位置; 将锚杆沿另一侧(如顺时针)进行圆弧形阵列,即可得到一榀锚杆。②若不相交,则同样基于圆心沿某一侧(如逆时针)旋转,每次比上一次多旋转0.001 rad,直到旋转至与弧线相交的位置,此位置即可看作弧线的一侧端点,然后将锚杆旋转至该位置; 将锚杆继续沿该侧(如逆时针)进行圆弧形阵列,即可得到一榀锚杆。一榀锚杆生成的具体过程如图5所示。

(a) 线段与弧线不相交

(b) 线段与弧线相交

因篇幅有限,本文只列出线段与弧线相交时一榀锚杆布设生成的关键代码,具体如下:

private void GetIntersection(Line line2, Arc arc2, FamilyInstance NewIn, Document doc, ModelCurve ml, Line axis1, double m2, Int32 qqq)

{

IntersectionResultArray results;

SetComparisonResult result = line2.Intersect(arc2,

out results);

if (SetComparisonResult.Disjoint != result)//相交

{

double o = 0;

SetComparisonResult result2 = 0;

do

{

ElementTransformUtils.RotateElement(doc, ml.Id, axis1, -o);

o = o + 0.001;

ElementTransformUtils.RotateElement(doc, ml.Id, axis1, o);

Curve c1 = ml.GeometryCurve;

XYZ end3 = c1.GetEndPoint(0);

XYZ end4 = c1.GetEndPoint(1);

Line line3 = Line.CreateBound(end3, end4);

IntersectionResultArray results1;

SetComparisonResult result1 =

line3.Intersect(arc2, out results1);

result2 = result1;

}while(SetComparisonResult.Disjoint!= result2);

//旋转锚杆至弧线端点位置

ElementTransformUtils.RotateElement(doc, NewIn.Id, axis1, o - 0.001);

//圆弧形阵列

RadialArray.Create(doc, doc.ActiveView, NewIn.Id, qqq, axis1,-(m2 / (qqq - 1)), ArrayAnchorMember.Second);

//删除辅助模型线

ICollection deletedElements1 = doc.Delete(ml.Id);

}

}。

在实际工程中,相邻2榀锚杆通常会呈梅花形布置。因此,在程序中需要复制这一榀锚杆并旋转相应弧度,使2榀锚杆呈现交错布置,并分别进行后续阵列操作。

直线形隧道的生成相对较为简单,直接利用前面生成并复制的2榀锚杆分别进行线形阵列即可; 而圆弧形隧道的生成则是通过读取平曲线相关信息并分别对每一榀锚杆进行相应的圆弧形阵列,其具体代码思路与前文单榀锚杆的布设类似。锚杆生成效果如图6所示。

图6 锚杆生成效果

2.2 小导管的参数化创建与布置

小导管与锚杆的设计参数创建与布置主要有3个方面不同: 1)小导管一般不会垂直打入隧道围岩内部,通常具有一定的外插角[15]; 2)相邻2榀小导管之间具有一定的搭接长度; 3)在同一标段内,可能会布置双排小导管,2排小导管的长度、搭接长度和外插角等设计参数可能均不相同。小导管参数设定界面如图7所示。其程序操作步骤与锚杆基本一致。

图7 小导管参数设定界面

小导管生成的基本思路与锚杆(尤其是中空注浆锚杆)类似,生成流程如图8所示。此外,小导管搭接长度的设定相对较简单,利用线形阵列或圆弧形阵列即可实现。因此,此处主要针对另外2个方面进行说明。首先,外插角的设置是在体量族环境下进行的,主要应用了API中的ElementTransformUtils.RotateElement函数,该函数可以通过给定的轴线和角度对一个元素进行旋转。

图8 小导管生成流程

在小导管布置方面,本文利用Winform中的下拉菜单供用户进行选择。当用户选择“单排小导管”时,右侧“第2排小导管”的有关参数设定将变为不可用;当用户选择“双排小导管”时,右侧的参数设定将变为可用,如图7所示,此时即可自动生成、布置双排小导管类型。双排小导管生成的立面效果和整体效果分别如图9和图10所示。

(a) 立面效果

(b) 设计立面效果

Fig. 9 Facade effect and design effect of double-row small conduit generation

图10 双排小导管生成的整体效果

2.3 格栅钢架的参数化创建与布置

在隧道初期支护中除了经常用到的型钢钢架之外,格栅钢架也是隧道施工中常用的钢支撑。格栅钢架主要由若干钢筋焊接而成。格栅钢架主要分为2种类型,一种为V字型格栅钢架,另一种为8字型格栅钢架。本文主要针对8字型格栅钢架的参数化创建与布置进行相应的研究。格栅钢架通常由几段钢架拼接而成。为简便起见,本文将钢架看作一个整体,不考虑钢架连接处的连接钢板等细部构件。

格栅钢架参数设定时需要考虑的参数较多。为了方便用户清楚地了解到各参数代表的含义,特在参数设定界面附加了格栅钢架的截面参数图。此外,格栅钢架主要由主筋、8字筋以及箍筋构成,所以也围绕这几种钢筋的参数进行了相应的设定,具体的参数设定界面如图11所示。格栅钢架生成流程如图12所示。

主筋及箍筋模型的创建相对较为简单,与上文介绍的方法基本类似。8字筋模型的创建相对较为复杂,且规律性较差,对此本文做了相应简化,使其更容易用数学函数所表达。本文采用的基本数学模型为伯努利双纽线,并在三维空间进行了相应改进,改进后建立的8字筋模型基本符合实际工程,能够满足建模后精度的需要。伯努利双纽线改进图如图13所示。

图11 格栅钢架参数设定界面

图12 格栅钢架生成流程

(a) xoy平面

(b) xoz平面

以单个8字筋(上半部分)为例,从图13中可以看出,在xoy平面上其曲线依然为伯努利双纽线,而在xoz平面上其曲线为z=±kx(z>0)。而在Revit二次开发中并没有根据已知函数表达式直接生成曲线的API,所以需要通过微分来间接生成所需要的曲线。最终得出曲线上任意一点的坐标为:

(1)

由式(1)可以确定曲线上点的坐标,然后利用API中的NewCurveByPoints函数可以根据点集合生成所需要的8字筋曲线,进而通过NewSweptBlendForm函数生成单个8字筋模型,再利用MirrorElement函数进行镜像即可生成单个水平网构架立筋或竖向网构架立筋; 然后,将其导入项目环境中,通过读取模型线弧长及所输入的8字筋长度与间距,计算各构架立筋所需阵列的数目,最后进行后续阵列操作即可。格栅钢架生成效果如图14所示。

图14 格栅钢架生成效果

3 模型信息附加

BIM的基础是模型,而它的灵魂则是信息,模型只是信息的载体。通过所研发的插件,可以快速创建隧道中的初期支护构件,针对这些构件同样可以利用Revit进行模型信息附加,并且Revit的数据信息可以被很多其他软件包括GIS平台所解析利用。

在Revit中存在2种参数属性: 类型参数与实例参数。为了实现工程设计、施工及运营的信息化管理,仅仅依靠Revit构件本身的类型属性参数列表很难满足实际管理需求,这时需要手动添加实例参数,录入相应数据。实例参数可以被GIS平台如SuperMap所解析,方便用户后期利用这些数据。因此,可以利用“管理”菜单下的“项目参数”,添加相应的实例参数(如图15所示),然后在模型的实例属性栏中编辑相应的属性信息。

以锚杆为例,根据需求添加默认没有的实例参数,例如里程桩号、施工人员、施工时间、工程量等。锚杆实例参数信息添加界面如图16所示。

图15 实例参数添加界面

图16 锚杆实例参数信息添加界面

4 工程实例

某隧道为双向6车道分离式隧道,设计时速为100 km,隧道左线轴线里程为 ZK11+886~ZK12+098,长212 m,全隧位于直线上;隧道右线轴线里程为K11+930~K12+123,长193 m,属于短隧道。

隧道洞身采用复合式衬砌,曲墙带仰拱的形式,按新奥法原理设计,初期支护采用喷锚网支护,必要时辅以钢架加强,采用湿喷工艺; 二次衬砌采用混凝土或钢筋混凝土结构。洞身衬砌支护参数如表1所示。

表1 洞身衬砌支护参数

依据表1并根据相应的图纸获得各构件的相应参数,利用Revit插件即可参数化生成小导管、锚杆以及钢拱架等构件,手动辅助建立仰拱填充等模型,附加相应的实例属性信息,并赋予材质与贴图,隧道BIM最终效果如图17所示。

(a) 局部效果

(b) 整体效果

5 结论与建议

1)通过对隧道初期支护构件(如锚杆、小导管、格栅钢架)的特点进行分析,归纳出各构件建模所需要的参数,结合Revit API编制相应程序,实现各构件的参数化建模和自动布置。

2)利用Revit可以对参数化创建的模型进行信息附加,添加设计与施工过程中的相应信息,完成各构件BIM的创建。

3)与传统的建模方式相比,本文所开发的插件不仅能够对隧道构件的模型完成快速批量创建,还能对模型的位置实现自动设置,能明显提高建模效率,避免相关人员做大量重复性工作,保证相关人员把更多精力放在BIM系统的功能及性能优化方面,具有一定的使用价值。

本文所创建的插件是基于简化的隧道断面轮廓进行的,仅适用于对模型精度要求不高的情况。按照《建筑信息模型施工应用标准》,该插件可以满足LOD200~300等级的精度要求。下一步研究中可继续设计算法对多段隧道轮廓线进行处理,以实现更高精度的隧道模型参数化创建。由于目前Revit没有提供对缓和曲线进行编辑的API,插件目前还不能实现缓和曲线段隧道的参数化建模,因此,可继续对此进行进一步的研究与完善。另外,本文主要对锚杆、小导管以及格栅钢架进行了研究,今后可继续研究型钢钢架、衬砌等构件的参数化创建,并可进行适当整合。此外,BIM的核心理念是模型与信息,本文主要介绍了模型的创建,对于模型信息的附加也主要利用Revit通过手动进行。因此,后期也可对模型信息的自动附加以及模型命名规则等方面开展相应研究。

猜你喜欢

弧线钢架格栅
导流格栅对发射箱内流场环境影响研究
You're my eyes
基于经济性和热平衡的主动进气格栅策略开发(续2)
基于经济性和热平衡的主动进气格栅策略开发(续1)
中国钢架雪车队备战北京冬奥会
基于上衣袖山吃势分配方法的研究
“一带一路”背景下的钢架雪车项目文化交流研究
弧线齿面齿轮成形原理及3D成形
上跨公路钢架拱桥的拆除方案选择
基于销轴连接的承力钢架强度校核