公路互通匝道桥梁BIM建模方法研究与应用

2021-02-27 02:54
山西建筑 2021年5期
关键词:梁体列表编程

马 遥

(广东赛达交通科技股份有限公司,广东 广州 510000)

1 概述

BIM(Building Information Modeling)的概念在建筑结构设计及施工领域已深入人心。Autodesk Revit(以下简称Revit)是目前国内在设计及施工领域方面应用最广泛的一款BIM建模软件。建立参数化的模型是Revit的核心;当通过Revit创建好一个模型之后,与该模型相对应的各类型图纸(平、立、剖)及构件明细表随之产生。也就是说对于一个已建好的参数化模型,与其相关联的所有图纸、视图及明细表都是基于同一个模型数据库的数据外在表现形式。当模型某元素发生改变时,在Revit项目中该元素关联的其他元素将会随之发生同步变化,这是BIM相对于传统设计方法的主要优势之一,每个数据元素均具有关联性。同时随着BIM技术的不断完善和发展,在正向设计领域中的应用越来越广,特别是对 Dynamo技术的应用,表现的尤为突出。

另外,BIM技术不同于传统设计方法的另一特征是对于Revit已建好的模型,可根据项目实际要求添加关于模型及其构件的各种信息,包括但不限于模型构件的材料供应方、加工方、施工方、验收方、监理方、材质的外观、材质的物理力学属性(密度、弹性模量、压缩模量、泊松比等)等信息。对于已建好的Revit模型,不仅可以实现整体及不同类型构件工程量的统计输出外,而且还可以将该模型成果文件用于力学分析、绿色节能分析、模拟光照分析、实景漫游等。Revit在建筑行业的应用已经拥有众多优异的表现,与建模相关联的功能模块也主要是和建筑结构相关。与市政工程诸如道路、桥梁、隧道相关的功能模块则少之又少,直接使用Revit来创建形态结构复杂的桥梁、隧道(特别是盾构及其管片配筋)是非常困难的。

为解决Revit在创建复杂形态模型时的缺陷,本文以Revit内置插件Dynamo作为程序主要开发工具,结合Revit,Civil3D,Excel开发了T梁桥主体结构、下部结构及桥面系布置程序。数据获取及分类处理如图1所示。

另外所有的图形处理、程序设计和编辑均是基于一定数量的基础数据(点数据),基础数据处理的是否恰当,直接影响最终模型的显示效果和精度。由于Revit有图形界限的限制,从Civil3D中导出的点数据直接应用于Dynamo中,会造成图形无法正确显示的问题。所以在将原始点数据导入Dynamo之前,需进行处理——采用相对坐标。这种处理方式既保证了图形的正常显示,又保证了建模精度。图1所示将原始坐标点数据转变为相对坐标的具体步骤为:修改Revit项目基点(系统默认状态为0,0,0,结合工程项目实际情况,将其设定为340 000,287 300,0),随后基于该基点对原坐标值进行转换,结果如图1中“变更坐标”所示。

2 Dynamo使用原理及节点开发

2.1 Dynamo可视化编程简介

Dynamo可视化编程的主要特点是程序编辑过程中可随时查看编辑成果,程序编辑与结果输出相同步。同时该种类型的编程有别于传统编程,传统编程是基于过程的,Dynamo可视化编程是基于对象的。下面通过一个范例来说明两种编程思想的区别。

通过圆心和半径做圆,常规的程序源代码如下:

my Point=Point.By Coordinates(0,0,0);

x=3;

y=4;

other Point=Point.By Coordinates(x,y,0);

dist=my Point.Distance To(other Point);

my Circle=Circle.By Center Point Radius(my Point,dist);

通过可视化编程创建圆的过程如图2所示。

以上2种方法均可以创建圆形,很明显采用Dynamo可视化编程去创建图形更加直观和便捷。

2.2 Dynamo中不同类型数据列表之间的连缀方式

在模型创建过程中,Dynamo通过内置的不同类型节点将各种类型数据列表以某种逻辑关系进行相互连接来解决相关模型创建问题。不同节点之间的数据列表运算是基于某种类型的数据连缀方式,数据连缀方式共分为三种类型:最短类型、最长类型和叉积类型。最短类型:两个相对应的数据列表内部元素一一对应相互连接,直至某一数据列表最后元素相连接;最长类型:一组数据列表内部数据元素一直连接到另一数据列表没有相对应的数据元素为止;叉积类型:每组数据列表中的每一个数据元素均与另一组数据列表中的所有数据元素相互连接。处于不同连缀状态下的数据列表运算结果是不同的。现结合图3~图5来说明列表数据运算中的三种不同连缀状态。

2.3 Dynamo中节点开发及自定义节点包制作

2.3.1Dynamo中节点开发及Design Script简介

由于Dynamo内置节点类型毕竟有限,功能随之也受到限制,不可能涉及到任意类型的工程项目BIM模型创建。特别是在创建复杂的空间结构体BIM模型时,除了应用内置节点类型外,还需依据工程的实际特点开发相应的功能型、创建型节点,以满足复杂空间结构体模型的创建及建模精度等要求。在创建不同类型节点的过程中,节点开发均是基于C#(.net)程序语言。通过使用Dynamo导入动态链接库文件(.dll),该DLL类型文件中的类名及静态方法名共同构成节点的名称。DLL文件导入后Dynamo会初始化该文件并生成相应的功能性节点。下述分别以“Geometry.MyPoint”“Vector Viewer”(向量观察节点包)、“Point.Bycoordinates”(几何空间点创建节点)为例,讲述节点的创建过程及节点包、节点的组成结构(见图6,图7)。创建Geometry.MyPoint功能性节点的核心源代码如下所示:

namespace My Note// 命名空间

{

public class Geometry//定义类“Geometry”

{

public static Point My Point (double x = 0, double y = 0, double z = 0) //定义静态变量

{

Point MyPoint; //定义My Point类型为Point

MyPoint=Point.By Coordinates(x, y, z);

return My Point;//返回点

}

}

}

①节点的名称;②节点的输入项;③节点的输出项;④节点数据的连缀状态,不同的连缀状态会影响节点进行列表运算的结果;⑤节点的主体,在此点击鼠标的右键可以对节点的连缀状态、显示预览、预览上游等进行相关设置。

图8,图9所示方法是基于文本数据流加Dynamo可视化编程数据流的方式来开发相应功能性节点。Python Script是Dynamo的内置节点,在节点的创建过程中可以增加多个输入端口,但输出端口只有一个(Output),双击该节点可以进入相应的代码编辑界面,所有的代码编辑均是基于Python这种类型的计算机语言,代码编辑界面如图9所示。通过Python Script或是Code Block节点,可实现可视化数据流编程(Dynamo)和文本数据流编程(Python)相互之间的转化。将参数化设计和计算机算法有机的联系在一起。

2.3.2Dynamo中自定义节点包的制作

项目建模过程中,为实现某一特定的功能,将若干个内置的不同类型节点连接并打包,形成自定义节点包,以便在项目中可以被重复调用,无需再次连接相同的节点。自定义节点的结构组成具体以创建盾构管环的环缝节点为例来进行说明,具体如图10所示。

上述自定义节点包含有多个输入端口、一个输出端口,接口一般是由Code Block来实现。如图10所示,输入端口是由Code Block实现,输出端口为Output默认输出端口。创建好自定义节点包的输入及输出端口后,用鼠标框选各连接节点,在菜单栏(Ribbon)中点击“编辑”选项,从下拉列表中选择 “从所选项创建节点”,在随后弹出的对话框中添加相应的自定义节点包名称及所属类别即可实现自定义节点包的创建。

自定义节点创建完成并发布后,可在类别模块中选取相应节点。

3 参数化T梁族、桥墩族制作

本节内容以某公路互通匝道桥为例,该匝道桥梁中心线位于曲率半径为2 800 m的圆曲线上,上部结构为预应力混凝土结构,梁体类型为T梁,单片梁体宽度为2.4 m,高度为1.2 m,梁跨径组合为(28+28+28+30+25+28)m。同时本节内容主要就参数化T梁族的制作思路进行介绍,至于在族制作过程中如何添加约束、如何建立参数关系等在此不进行详细描述。

3.1 参数化T梁族制作

参数化T梁族制作思路:

将梁体构造图纸进行拆分(T梁拆分为桥面板、肋板、加腋结构、横隔板)—分析梁体结构组成,结构变化处分开建模—确立建模标准(主要包含内容为定位标准、材质标准)—选取自适应公制常规模型族样板—确定模型创建原点—根据各组成部分所处位置添加参照平面—添加尺寸约束—添加类型、实例参数及参数表达式(主要用于梁体横坡、内外边梁翼缘板线形调整等)—绘制截面轮廓(采用参照线绘制,并将参照线与参照平面进行锁定)—创建形状,形成参数化T梁族。所建族实例及参数化设置分别如图11,图12所示。

3.2 参数化桥墩族制作

参数化桥墩族制作思路:

将桥墩构造图纸进行拆分(桥墩拆分为垫石、盖梁、墩柱、系梁、承台、桩基)—选取公制结构基础族样板—确定模型创建原点(选取对称中心所在位置)—根据各结构组成部分所处位置添加参照平面— 添加尺寸约束—添加类型、实例参数及参数表达式(主要用于盖梁坡度调整)—分别绘制各组成部分的截面轮廓(将轮廓线与各参照平面进行锁定)—采用拉伸命令创建实体,最后通过连接命令形成整体参数化桥墩族。所建族实例如图13所示。

3.3 参数化桥台族制作

参数化桥台族制作思路:

将桥台构造图纸进行拆分(桥台拆分为耳墙、台帽、台背、牛腿、倒棱、挡块、垫石、桩基)—分析桥台结构组成—选取公制结构基础族样板—确定模型创建原点(选取对称中心所在位置)—根据各组成部分所处位置添加参照平面— 添加尺寸约束—添加类型、实例参数及参数表达式(主要用于台帽、台背横坡调整)—绘制各截面轮廓(将轮廓与参照平面进行锁定)—创建实体,最后通过融合命令形成参数化桥台族。所建参数化族实例如图14所示。

4 T梁桥上部主体结构、下部结构及桥面系通用布置程序开发

在进行程序开发之前,需将项目实体各项信息统计于Excel表中(Excel是基于Microsoft平台,采用其他平台的Excel软件会造成数据无法读取的情况发生),诸如桥墩信息、桥台信息、步跨信息、T梁预制横坡等,方便后期Dynamo进行数据处理,将相应实体布置在实际位置上。另外本节内容主要介绍创建不同结构模块主要程序节点构成,至于模块与模块之间及对应程序各主要节点之间如何衔接在此不做说明。

4.1 基于Civil3D点坐标生成线路及线路校核程序开发

1)线路生成程序主要节点组成。

美国政府曾多次强调不给任何国家和任何公司制裁豁免,并要求所有国家在“过渡期”后同伊朗的原油交易清零,但遭到很多同伊朗有大宗原油贸易国家的强烈反对。2018年11月5日,特朗普政府宣布给予中国、印度、意大利、希腊、日本、韩国、土耳其和中国台湾地区“重大削减例外”的豁免,理由是这些国家和地区已大幅减少对伊朗石油的购买[20]。美国制裁政策规定了特殊情况下的例外情况。

File Path,File.FromPath,List.RestOfItems,List.Transpose,List.GetItemAtIndex,Point.ByCoordinates,NurbsCurve.ByPoints,PolyCurve.ByJoinedCurves,Curve.PullOntoPlane,Plane.XY,Code Block。

程序基本设计流程:读取Excel数据—数据处理—应用List.GetItemAtIndex节点过滤所需数据—采用Point.ByCoordinates节点生成空间点— 应用NurbsCurve.ByPoints节点将点连接生成线—采用PolyCurve.ByJoinedCurves节点将三维空间线类型转换为PolyCurve类型。

2)线路校核程序主要节点组成。

List.GetItemAtIndex,List.FirstItem,List.LastItem,String.IndexOf,String.Remove,String.ToNumber,Curve.Length,List.Join,AllFalse,Color.ByARGB,Boolean,If,Color Range ,Code Block。

程序基本设计流程:读取Excel数据—数据处理—应用List.GetItemAtIndex节点过滤所需数据—采用Point.ByCoordinates节点生成空间点—应用NurbsCurve.ByPoints节点将点连接生成线—采用PolyCurve.ByJoinedCurves节点将三维空间线类型转换为PolyCurve类型—应用Curve.Length节点获取投影曲线长度—按照桩号计算投影曲线长度并与上一步所测曲线长度进行比较(做差)—通过if和Boolean节点将比较结果转换为不同的颜色显示。

4.2 下部结构布置程序开发程序脚本设计流程

将由Civil3D生成的控制点连接成线(采用NurbsCurve.ByControlPoints节点将空间点连接形成三维空间线)—通过PolyCurve.ByJoinedCurves节点将上步生成的三维空间线转换成PolyCurve类型—将转换后的三维空间曲线投影至二维平面上(为XY平面)—按照跨径在曲线上获取相应位置上的点—放置下部结构族—调整下部结构族偏转角度(角度由该点处的切向量与世界坐标系Y轴或是X轴的夹角),使得与实际布置情况保持一致(线路生成及校核程序未在下列列出)。

4.3 上部结构布置程序开发

将由Civil3D生成的控制点连接成线(采用NurbsCurve.ByControlPoints节点将空间点连接形成三维空间线)—通过PolyCurve.ByJoinedCurves节点将上步生成的三维空间线转换成PolyCurve类型—将转换后的三维空间曲线投影至二维平面上(为XY平面)—按照梁体跨径在投影曲线上获取相应位置上的桩号点—将上步形成点投影至原三维曲线—以三维曲线上的点为局部坐标系原点建立梁体放置空间坐标系—根据梁体的横向排布特征及横坡参数建立整体桥跨梁体放置空间坐标系—利用节点List.Sublist实现外边梁、中梁、内边梁点位编排。

2)创建梁体程序脚本设计流程。

放置梁体点位编排程序脚本如前所述,在此不再详述。在梁体点位编排程序脚本基础之上对所布置的各分片梁体进行命名(核心是应用生成字符串相关节点进行命名)—复制梁体类型(应用白马包中的CopyType节点)—采用放置自适应族相关节点AdaptiveComponent.ByPoints进行梁体布置(注意相关连接节点的数据结构必须保持一致)。本实际案例中的T梁族分为“两种类型”:a.未置入直线类型(第一阶段T梁);b.置入直线类型(第二阶段T梁,该种“类型”的T梁主要通过内置直线的端点来实现梁体的空间布置)。

3)边梁、中梁梁体类型划分及梁体横坡、梁长、梁端角度调整程序脚本设计流程。

继在梁跨整体布置脚本程序的基础之上采用Element.SetParameterByName节点对处于不同位置处的分片梁体所属类型进行划分(外边梁、中梁、内边梁)—采用List相关节点对梁体类型列表数据进行处理—采用Element.SetParameterByName节点对不同分片梁体类型的横坡、梁体长度、梁体梁端角度参数值进行设置。

4.4 桥面系布置脚本程序开发

1)横隔板及湿接缝定位点编排、放置族实例程序设计流程。

根据自适应族样板创建8点自适应族(注意编排自适应点的顺序,同时在绘制图形时采用参照线绘制)—按照一定的顺序在参数化的T梁族里面置入模型线(后续程序相应节点会根据依照此线产生的端点按绘制顺序放置自适应族,所以在绘制该类型模型线时需注意绘制的方向和顺序)—采用Element.Curves获取每片梁体中的内置线—应用list相关节点进行数据处理,获得放置自适应族的空间点坐标列表—采用文本数据流选取项目文件中的自适应族类型—应用CopyType节点对梁片进行命名(相关操作节点的数据结构必须保持一致)—应用AdaptiveComponent.ByPoints节点放置自适应族。

另外湿接缝定位点编排脚本程序与横隔板定位点编排脚本程序结构一致,可参照湿接缝定位点编排脚本程序进行点位编排和命名。

2)放置桥面板、行车道标志线及护栏程序设计流程。

通过CodeBlock文本数据流获取项目文件中相应类型族文件—通过世界坐标系(WGS)原点放置族—采用List.Cycle节点生成对应数目的轮廓族—设置相同类型轮廓的空间偏转角度(桥面板、行车道标志线、护栏断面轮廓)—获取组成各构件轮廓的曲线—采用Group Curves节点对组成各轮廓曲线进行分组,所得每一组曲线均可独立构成闭合曲线—将组成每个闭合轮廓的线进行聚合处理,使得多线组成一个整体的闭合轮廓线(在行车道标志线、护栏断面、桥面板横断面数据处理中应用)—采用CoordinateSysterm.ByOriginVectors节点将生成的闭合轮廓由世界坐标系变换至目标空间坐标系—采用Solid.Byloft节点实现同一类型不同位置处闭合曲线之间的放样融合,形成相应位置处的实体—采用Springs.FamilyInstance.ByGeometry节点对生成实体进行命名。

另外放置桥面板、防撞护栏脚本程序与放置行车道脚本程序结构一致,可参照放置行车道脚本程序进行相应放置。

5 结语

本文通过将Dynamo可视化编程技术应用于互通桥梁中的匝道桥建模过程中,从模型搭建及数据的处理过程当中不难发现Dynamo在处理复杂空间体结构建模及多类型数据处理方面具有很强的应用优势。同时基于C#,Python语言的Dynamo功能节点开发及可视化编程的灵活性、代码的开源性也为Dynamo在今后BIM正向设计中的发展提供了无限的可能性。

猜你喜欢
梁体列表编程
一种适用于薄型梁体的周转装置
梁体混凝土实体强度弹模强度检测研究
学习运用列表法
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
扩列吧
纺织机上诞生的编程
铁路桥梁梁体裂损原因分析和整治措施
浅谈圬工梁体病害整治