齐成龙
(中国铁路设计集团有限公司,天津300308)
目前基于达索软件的BIM 设计中,大多借助EKL 脚本语言和action 功能,采用“骨架-模板”的建模思想[1]。这种方法虽然能够实现批量建模,但是实例化结果包含建模过程,导致效率低下,同时由于建模过程向所有使用者开放,也不利于传递过程中的数据稳定[2]。
本文介绍一种不同于传统方法的全新桥梁基础批量建模和审核工具,该工具使用达索∕组件应用架构(CAA)二次开发语言实现,嵌入到达索软件内部,通过生成承台和桩特征避免了工程模板的复杂内部逻辑结构,提高了效率,同时,该工具还具备批量修改模型IFC 属性值及输出审核结果的功能[3]。
根据桥梁基础设计过程的需要,设计出如图1 所示的用户交互界面。该人机交互的基础设计工具具备以下几个特点:①设计功能嵌入到达索装配设计(Assembly Design)模块中;②设计参数采用表格输入的手段[4];③程序在批量创建基础模型的同时,自动为IFC 属性赋值;④承台和桩分别作为用户定义特征组合成最终的基础模型,用户可手动修改这些特征结果;⑤用户手动修改承台和桩特征后,程序可根据最终特征结果输出数据表格供模型审核所用,并更新IFC属性值。
图1 全桥基础设计用户交互界面Fig.1 User interface of whole bridge foundation design
使用此工具进行桥梁基础BIM设计及审核时应遵循以下几个步骤。
(1)设计准备工作
填充基础信息表格,该表格存储了承台和桩在结构尺寸、空间位置及混凝土等级方面的参数。然后,使用达索EKL 脚本语言生成基础骨架坐标系。
(2)选择用于存储基础骨架的几何图形集
选择几何图形集后,程序会自动识别并读入存储在几何图形集内的骨架坐标系和基础信息表格。
(3)选择用于存储各基础零件的父级根节点
生成的桥墩基础零件将附属在该节点下。
(4)生成全桥基础模型
上述所有步骤均完成后,对话框OK 按钮即被激活,点击此按钮后生成全桥基础模型,如图2所示。
图2 全桥基础BIM模型Fig.2 Foundation BIM model of the whole bridge
(5)修改基础模型
双击承台或桩基模型后,打开特征修改用户交互窗口,其中,桩特征修改界面如图3 所示。在承台特征交互窗口,用户可以增加、删除、修改一层承台的数据,并修改混凝土等级;在桩基特征交互窗口,用户可增加或删除某根桩数据,并修改混凝土等级以及桩长。
(6)基础属性批量修改及基础模型审核数据输出
承台和桩的部分IFC属性如图4所示,这两种特征修改后,零件属性值无法随之自动更新,为实现这种更新功能,可在图1 所示的用户界面点击RefreshAttributes 按钮,所有零件的IFC 属性值根据最新的特征自动更新。
图3 桩特征修改界面Fig.3 Pile feature modification UI
图4 承台和桩基零件IFC属性Fig.4 IFC attributes for platform and pile parts
同时,程序可以输出最新的基础数据表格,其中存储了尺寸、位置、混凝土等级,可用于BIM 建模结果审核。
将该设计工具划分为3 个模块以实现其功能,分别为界面模块(UI Module)、特征模块(Feature Module)和几何拓扑模块(Topological Module),如图5 所示。三者的关系是:几何拓扑模块创建承台和桩的几何拓扑形状;特征模块生成承台和桩特征[5],特征的三维形状通过几何拓扑模块获取;界面模块用于建模工具条的实现,基础零件批量生成,以及特征的批量实例化和属性修改、审核数据输出等功能。以下将从底层开始依次介绍各模块的开发流程。
2.2.1 单层承台
图5 模块设计Fig.5 Module design
每一个基础的承台可分为多层,其定位坐标系位于最上层承台顶部。每一层承台是一个立方体,如图6 左所示,承台顶面到定位坐标系原点有一个向下的偏移值Depth,单层承台拓扑体创建流程如下:
使用CATMathVector 类的GetDirections()和GetOrigin()方法获取定位坐标系的原点和方向向量[6],通过原点和方向向量之间的运算,并结合尺寸参数,创建iPt1-iPt4 四个点,如图6 右所示,并在这四个点的生成过程中考虑每层承台的竖向偏移值Depth。
图6 单层承台图示Fig.6 Single-layer platform sketch
有了iPt1-iPt4 四个点,调用了如下CAA 内部函数:
CATICGMSolidCuboid * CATCGMCreateSolidCuboid(CATGeoFactory* iFactory, CATTopData* iData, const CAT⁃MathPoint& iPt1, const CATMathPoint& iPt2, const CAT⁃MathPoint&iPt3,const CATMathPoint&iPt4);
这个函数以图6 右的iPt1-iPt4 四个点为输入参数,生成CATICGMSolidCuboid 类型的拓扑运算器(Topological Operator),通过此拓扑运算器创建立方体形状的空间拓扑体,从而完成单层承台几何拓扑的生成。
2.2.2 多层承台组装
上一节介绍了如何创建考虑竖向偏移的单层承台,本节介绍如何组装这些单层承台。从上到下各单层承台的数据依次存储在一个列表(list)当中,组装多层承台时,在这个列表范围内循环,流程如图7所示。
图7 组装多层承台的流程Fig.7 Assembly process for multi-layer platform
对于第一层承台,由于承台顶面与定位坐标系重合,令竖向偏移值Depth=0,调用单层承台创建函数,生成CATBody 类型的几何拓扑,将Depth值与当前承台高度相加获取下一层承台的竖向偏移值。如果此时处理的承台为最后一个,当前几何拓扑即为返回值,否则,继续创建下一层承台的几何拓扑,并与上一步获取的拓扑体布尔合并作为新的拓扑体。
循环操作,最终获取合并后的各层承台拓扑结果。
2.2.3 多根桩组装
单根桩数据存储在一个名为PileStruct 的结构体中,该结构体包含桩的平面定位坐标值和桩身直径、桩长等信息。
多根桩组装函数声明格式如下:
CATBody_var CreatePileBody(CATGeoFactory_var isp⁃GeoFac, CATTopData* iData, CATListPV iPileStructList,CATMathAxis iMathAxisTop)();
这个函数的输入参数iPileStructList 是一个PileStruct 类型的列表(list),其中存储了当前基础下所有桩的数据,每个列表元素代表一根桩;输入参数iMathAxisTop 表示承台底部定位坐标系,PileStruct 结构体中存储的桩平面定位坐标值即是相对于此坐标系而言的。
函数执行流程如下:
在列表范围内循环,对于当前列表元素,使用CATMathVector 类的GetDirections()和GetOrigin()方法获取定位坐标系的原点和方向向量,通过原点和方向向量之间的运算,并结合桩平面定位坐标值及桩长,创建当前桩的上、下部顶点。有了单根桩的上下部顶点及桩身直径,调用如下CAA内部函数创建代表单根桩的圆柱形拓扑体:
CATICGMSolidCylinder*CATCGMCreateSolidCylinder(CATGeoFactory*iFactory,CATTopData*iData,const CAT⁃MathPoint& iFirstPointOnAxis, const CATMathPoint& iSec⁃ondPointOnAxis,double iRadius);
在循环过程中,对代表每根桩的圆柱体执行布尔合并运算,循环结束后完成桩的建模。
2.3.1 特征概述
在本程序当中,为了实现承台和桩基的快速批量建模,需要将二者封装为特征,从而保证这两种模型的轻量化和封装性。在达索CAA 架构中,特征作为一种面向对象的模型[7],有两层含义:
(1)数据模型
特征作为一种对象,它的数据是以属性的方式存储的,特征的属性分为两类,数值类型的属性,例如整型、浮点型数值;特征类型的属性,也就是说这个属性本身也是一种特征。例如对于直线特征,它的两个端点可以作为其属性,端点本身也是特征。
(2)行为模型
每一种特征对象都包含多种与其关联的行为,CAA 当中使用接口来描述对象的行为。例如,在达索中创建一个线的特征Line3D,这个特征具备在三维空间中画线的行为,因此,Line3D特征执行CATILine 接口,其中包含的函数Draw()具备画线功能。
2.3.2 模块架构
为了定义承台和桩这两个特征,需要扩展三个对象:Footing,Pile,CATPrtCont。特征模块的架构如图8所示。
Footing 表示承台对象,对其扩展类型接口BridgeIFooting,这个接口包含一系列Get 和Set 函数,这些函数的作用是获取承台对象的属性值或者给承台对象属性赋值。同时,对承台对象扩展CATIFmFeatureBehaviorCustomization 接口,此接口包含Build()函数,其作用是,当用户对承台对象执行更新操作时,调用几何拓扑模块,生成几何拓扑体,从而实现几何拓扑形状与特征的关联,Build()函数在运行时需要引用类型接口的Get系列函数,从而获取特征的属性值,作为创建几何拓扑体的输入参数。与承台类似,Pile 表示桩对象,对其扩展 BridgeIPile 类型接口以及CATIFmFeatureBehaviorCustomization 接口。
图8 特征模块架构Fig.8 Feature module framework
CATPrtCont 是一个特征容器(Container)对象,对CATPrtCont 对象扩展两个工厂接口BridgeIFootingFactory 和BridgeIPileFactory,这 两个接口分别包含CreateFooting()和CreatePile()函数,分别用于实例化承台和桩特征。这两个函数在执行过程中需要引用各自类型接口的Set 系列函数从而为特征属性赋值。
界面模块的作用是实现以下功能:
将程序的各命令以菜单按钮的形式保存在工具条当中,并创建用户交互窗口;创建承台及桩特征的生成、修改命令;实现基础批量建模、模型结果批量审核及IFC属性修改功能。
2.4.1 命令按钮及用户交互窗口
菜单按钮采用Add-in 的方式添加,基础装配功能和特征生成功能分别嵌入到装配设计(Assembly Design)模块和零件设计(Part Design)模块中,因此,二者分别实现CATIAssyWork Bench Addin和CATIPrtCfg Addin接口。
派生 CATMmrPanelStateCmd 类 ,重载GiveMyPanel()方法,将派生类与对话窗口Dialog文件关联。重载BuildGraph()方法,通过这种方式实现用户交互。
2.4.2 特征的创建和修改
CATMmrPanelStateCmd 类 的OkAction()方法,表示用户点击OK 按钮时系统需要执行的操作。重载OkAction()方法,从而实现了图3 命令窗口所示的创建特征功能。
图9所示为特征的创建和修改流程。
图9 创建及修改特征流程Fig.9 Work flow for feature creation and modification
在创建模式下,用户点击工具栏按钮,激活CATMmrPanelStateCmd 派生类,打开用户交互窗口,用户在窗口中输入特征属性值,点击OK 按钮以后,程序调用特征的工厂接口,创建特征结果并更新拓扑形状。
在修改模式下,当用户双击某已经存在的特征,即激活CATIEdit接口的Activate()方法,此方法调用CATMmrPanelStateCmd 派生类的构造函数,启动特征修改模式,在此模式下,程序提取当前特征的属性值并显示在命令交互窗口中供用户修改,点击OK按钮后调用特征类型接口的Set系列函数更新特征属性,完成特征修改及几何拓扑更新。
2.4.3 基础批量建模、模型结果批量审核及IFC属性修改
这三项功能在同一个用户交互窗口中实现。
批量建模流程为,通过CATICkeSheet 接口获取结构树中设计表格的数据,将其转化为承台和桩结构体数据列表(List)。在此列表范围内循环,由于目前达索CAA暂不支持扩展铁路IFC类型产品的生成功能,因此,对于每一个基础,使用CATAdpDuplicator 类对特定IFC 类型的产品进行复制,生成基础、承台、桩的产品(Product)节点,通过CATIPLMProducts 接口的AddProduct()方法完成产品的结构树层级关系组织[8]。
借助特征模块的工厂接口,在产品节点下掺入承台和桩的特征,特征属性从结构体数据列表中获取。使用CATCkeObjectAttrWriteServices 类的一系列属性赋值方法,给产品节点的IFC 属性赋值,属性值可以从数据列表中计算求得,也可以通过类型接口的Get系列函数从特征结果中获取。
基础批量建模结果的结构树如图3 所示,模型结果的批量审核及修改功能都需要遍历这种树形结构,从而获取所有模型并对这些模型进一步操作,流程如图10 所示。CATIPLMNavReference接口的ListChildren()方法可用于获取结构树中某个产品(Product)的所有子节点,多次递归使用该方法从而实现对结构树的遍历。对于遍历出来的每一个零件(Part)根节点,使用CATIPart Request 和CATIMmiUseBodyContent 接 口 依 次 获取零件中的所有的Body,以及每个Body中的所有特征,将这些特征与BridgeIFooting,BridgeIPile 类型接口进行比较,从而识别获取的特征。
图10 模型结构树遍历流程Fig.10 Model tree structure navigation process
使用类型接口Get 系列函数获取特征的最新属性值。对于遍历出来的结构树中所有产品(Product)节点,通 过CATCkeObjectAttrWrite Services 类的一系列方法,使用这些属性值为IFC属性赋值,从而实现产品IFC 属性值的批量修改;使用这些特征属性值向数据表格写出数据,从而实现批量输出模型审核数据。
针对既有的以工程模板和action 功能为手段的桥梁基础BIM 建模方法的局限性,本文介绍了一种使用达索∕CAA 架构开发的桥梁基础BIM 批量建模及审核工具。
使用该工具进行建模时,程序读取设计表格中的基础尺寸及其他数据,批量创建符合IFC 类型的产品(Product)节点,向其中插入桩及承台特征,并对产品的IFC 属性赋值。用户可单独修改特征结果,并使用该工具根据最终的特征结果批量修改产品IFC 属性值,还可以使用审核工具,以excel 表格的形式输出总结点下所有基础的数据,为BIM建模结果审核提供便利。
从开发架构的角度上讲,该设计和审核工具通过界面模块、特征模块、几何拓扑模块三部分实现其功能。几何拓扑模块的作用是生成承台和桩的CATBody 类型拓扑结果;特征模块将桩和承台各自封装为一种面向对象的模型,并调用几何拓扑模块结果实现特征的三维显示;界面模块通过调用特征模块实现批量建模及模型的审核和IFC属性修改。