齊成龍
(中國鐵路設計集團有限公司,天津300308)
目前基于達索軟件的BIM 設計中,大多借助EKL 腳本語言和action 功能,采用“骨架-模板”的建模思想[1]。這種方法雖然能夠實現批量建模,但是實例化結果包含建模過程,導致效率低下,同時由于建模過程向所有使用者開放,也不利于傳遞過程中的數據穩(wěn)定[2]。
本文介紹一種不同于傳統(tǒng)方法的全新橋梁基礎批量建模和審核工具,該工具使用達索∕組件應用架構(CAA)二次開發(fā)語言實現,嵌入到達索軟件內部,通過生成承臺和樁特征避免了工程模板的復雜內部邏輯結構,提高了效率,同時,該工具還具備批量修改模型IFC 屬性值及輸出審核結果的功能[3]。
根據橋梁基礎設計過程的需要,設計出如圖1 所示的用戶交互界面。該人機交互的基礎設計工具具備以下幾個特點:①設計功能嵌入到達索裝配設計(Assembly Design)模塊中;②設計參數采用表格輸入的手段[4];③程序在批量創(chuàng)建基礎模型的同時,自動為IFC 屬性賦值;④承臺和樁分別作為用戶定義特征組合成最終的基礎模型,用戶可手動修改這些特征結果;⑤用戶手動修改承臺和樁特征后,程序可根據最終特征結果輸出數據表格供模型審核所用,并更新IFC屬性值。
圖1 全橋基礎設計用戶交互界面Fig.1 User interface of whole bridge foundation design
使用此工具進行橋梁基礎BIM設計及審核時應遵循以下幾個步驟。
(1)設計準備工作
填充基礎信息表格,該表格存儲了承臺和樁在結構尺寸、空間位置及混凝土等級方面的參數。然后,使用達索EKL 腳本語言生成基礎骨架坐標系。
(2)選擇用于存儲基礎骨架的幾何圖形集
選擇幾何圖形集后,程序會自動識別并讀入存儲在幾何圖形集內的骨架坐標系和基礎信息表格。
(3)選擇用于存儲各基礎零件的父級根節(jié)點
生成的橋墩基礎零件將附屬在該節(jié)點下。
(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 所示。三者的關系是:幾何拓撲模塊創(chuàng)建承臺和樁的幾何拓撲形狀;特征模塊生成承臺和樁特征[5],特征的三維形狀通過幾何拓撲模塊獲??;界面模塊用于建模工具條的實現,基礎零件批量生成,以及特征的批量實例化和屬性修改、審核數據輸出等功能。以下將從底層開始依次介紹各模塊的開發(fā)流程。
2.2.1 單層承臺
圖5 模塊設計Fig.5 Module design
每一個基礎的承臺可分為多層,其定位坐標系位于最上層承臺頂部。每一層承臺是一個立方體,如圖6 左所示,承臺頂面到定位坐標系原點有一個向下的偏移值Depth,單層承臺拓撲體創(chuàng)建流程如下:
使用CATMathVector 類的GetDirections()和GetOrigin()方法獲取定位坐標系的原點和方向向量[6],通過原點和方向向量之間的運算,并結合尺寸參數,創(chuàng)建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),通過此拓撲運算器創(chuàng)建立方體形狀的空間拓撲體,從而完成單層承臺幾何拓撲的生成。
2.2.2 多層承臺組裝
上一節(jié)介紹了如何創(chuàng)建考慮豎向偏移的單層承臺,本節(jié)介紹如何組裝這些單層承臺。從上到下各單層承臺的數據依次存儲在一個列表(list)當中,組裝多層承臺時,在這個列表范圍內循環(huán),流程如圖7所示。
圖7 組裝多層承臺的流程Fig.7 Assembly process for multi-layer platform
對于第一層承臺,由于承臺頂面與定位坐標系重合,令豎向偏移值Depth=0,調用單層承臺創(chuàng)建函數,生成CATBody 類型的幾何拓撲,將Depth值與當前承臺高度相加獲取下一層承臺的豎向偏移值。如果此時處理的承臺為最后一個,當前幾何拓撲即為返回值,否則,繼續(xù)創(chuàng)建下一層承臺的幾何拓撲,并與上一步獲取的拓撲體布爾合并作為新的拓撲體。
循環(huán)操作,最終獲取合并后的各層承臺拓撲結果。
2.2.3 多根樁組裝
單根樁數據存儲在一個名為PileStruct 的結構體中,該結構體包含樁的平面定位坐標值和樁身直徑、樁長等信息。
多根樁組裝函數聲明格式如下:
CATBody_var CreatePileBody(CATGeoFactory_var isp?GeoFac, CATTopData* iData, CATListPV iPileStructList,CATMathAxis iMathAxisTop)();
這個函數的輸入參數iPileStructList 是一個PileStruct 類型的列表(list),其中存儲了當前基礎下所有樁的數據,每個列表元素代表一根樁;輸入參數iMathAxisTop 表示承臺底部定位坐標系,PileStruct 結構體中存儲的樁平面定位坐標值即是相對于此坐標系而言的。
函數執(zhí)行流程如下:
在列表范圍內循環(huán),對于當前列表元素,使用CATMathVector 類的GetDirections()和GetOrigin()方法獲取定位坐標系的原點和方向向量,通過原點和方向向量之間的運算,并結合樁平面定位坐標值及樁長,創(chuàng)建當前樁的上、下部頂點。有了單根樁的上下部頂點及樁身直徑,調用如下CAA內部函數創(chuàng)建代表單根樁的圓柱形拓撲體:
CATICGMSolidCylinder*CATCGMCreateSolidCylinder(CATGeoFactory*iFactory,CATTopData*iData,const CAT?MathPoint& iFirstPointOnAxis, const CATMathPoint& iSec?ondPointOnAxis,double iRadius);
在循環(huán)過程中,對代表每根樁的圓柱體執(zhí)行布爾合并運算,循環(huán)結束后完成樁的建模。
2.3.1 特征概述
在本程序當中,為了實現承臺和樁基的快速批量建模,需要將二者封裝為特征,從而保證這兩種模型的輕量化和封裝性。在達索CAA 架構中,特征作為一種面向對象的模型[7],有兩層含義:
(1)數據模型
特征作為一種對象,它的數據是以屬性的方式存儲的,特征的屬性分為兩類,數值類型的屬性,例如整型、浮點型數值;特征類型的屬性,也就是說這個屬性本身也是一種特征。例如對于直線特征,它的兩個端點可以作為其屬性,端點本身也是特征。
(2)行為模型
每一種特征對象都包含多種與其關聯(lián)的行為,CAA 當中使用接口來描述對象的行為。例如,在達索中創(chuàng)建一個線的特征Line3D,這個特征具備在三維空間中畫線的行為,因此,Line3D特征執(zhí)行CATILine 接口,其中包含的函數Draw()具備畫線功能。
2.3.2 模塊架構
為了定義承臺和樁這兩個特征,需要擴展三個對象:Footing,Pile,CATPrtCont。特征模塊的架構如圖8所示。
Footing 表示承臺對象,對其擴展類型接口BridgeIFooting,這個接口包含一系列Get 和Set 函數,這些函數的作用是獲取承臺對象的屬性值或者給承臺對象屬性賦值。同時,對承臺對象擴展CATIFmFeatureBehaviorCustomization 接口,此接口包含Build()函數,其作用是,當用戶對承臺對象執(zhí)行更新操作時,調用幾何拓撲模塊,生成幾何拓撲體,從而實現幾何拓撲形狀與特征的關聯(lián),Build()函數在運行時需要引用類型接口的Get系列函數,從而獲取特征的屬性值,作為創(chuàng)建幾何拓撲體的輸入參數。與承臺類似,Pile 表示樁對象,對其擴展 BridgeIPile 類型接口以及CATIFmFeatureBehaviorCustomization 接口。
圖8 特征模塊架構Fig.8 Feature module framework
CATPrtCont 是一個特征容器(Container)對象,對CATPrtCont 對象擴展兩個工廠接口BridgeIFootingFactory 和BridgeIPileFactory,這 兩個接口分別包含CreateFooting()和CreatePile()函數,分別用于實例化承臺和樁特征。這兩個函數在執(zhí)行過程中需要引用各自類型接口的Set 系列函數從而為特征屬性賦值。
界面模塊的作用是實現以下功能:
將程序的各命令以菜單按鈕的形式保存在工具條當中,并創(chuàng)建用戶交互窗口;創(chuàng)建承臺及樁特征的生成、修改命令;實現基礎批量建模、模型結果批量審核及IFC屬性修改功能。
2.4.1 命令按鈕及用戶交互窗口
菜單按鈕采用Add-in 的方式添加,基礎裝配功能和特征生成功能分別嵌入到裝配設計(Assembly Design)模塊和零件設計(Part Design)模塊中,因此,二者分別實現CATIAssyWork Bench Addin和CATIPrtCfg Addin接口。
派生 CATMmrPanelStateCmd 類 ,重載GiveMyPanel()方法,將派生類與對話窗口Dialog文件關聯(lián)。重載BuildGraph()方法,通過這種方式實現用戶交互。
2.4.2 特征的創(chuàng)建和修改
CATMmrPanelStateCmd 類 的OkAction()方法,表示用戶點擊OK 按鈕時系統(tǒng)需要執(zhí)行的操作。重載OkAction()方法,從而實現了圖3 命令窗口所示的創(chuàng)建特征功能。
圖9所示為特征的創(chuàng)建和修改流程。
圖9 創(chuàng)建及修改特征流程Fig.9 Work flow for feature creation and modification
在創(chuàng)建模式下,用戶點擊工具欄按鈕,激活CATMmrPanelStateCmd 派生類,打開用戶交互窗口,用戶在窗口中輸入特征屬性值,點擊OK 按鈕以后,程序調用特征的工廠接口,創(chuàng)建特征結果并更新拓撲形狀。
在修改模式下,當用戶雙擊某已經存在的特征,即激活CATIEdit接口的Activate()方法,此方法調用CATMmrPanelStateCmd 派生類的構造函數,啟動特征修改模式,在此模式下,程序提取當前特征的屬性值并顯示在命令交互窗口中供用戶修改,點擊OK按鈕后調用特征類型接口的Set系列函數更新特征屬性,完成特征修改及幾何拓撲更新。
2.4.3 基礎批量建模、模型結果批量審核及IFC屬性修改
這三項功能在同一個用戶交互窗口中實現。
批量建模流程為,通過CATICkeSheet 接口獲取結構樹中設計表格的數據,將其轉化為承臺和樁結構體數據列表(List)。在此列表范圍內循環(huán),由于目前達索CAA暫不支持擴展鐵路IFC類型產品的生成功能,因此,對于每一個基礎,使用CATAdpDuplicator 類對特定IFC 類型的產品進行復制,生成基礎、承臺、樁的產品(Product)節(jié)點,通過CATIPLMProducts 接口的AddProduct()方法完成產品的結構樹層級關系組織[8]。
借助特征模塊的工廠接口,在產品節(jié)點下?lián)饺氤信_和樁的特征,特征屬性從結構體數據列表中獲取。使用CATCkeObjectAttrWriteServices 類的一系列屬性賦值方法,給產品節(jié)點的IFC 屬性賦值,屬性值可以從數據列表中計算求得,也可以通過類型接口的Get系列函數從特征結果中獲取。
基礎批量建模結果的結構樹如圖3 所示,模型結果的批量審核及修改功能都需要遍歷這種樹形結構,從而獲取所有模型并對這些模型進一步操作,流程如圖10 所示。CATIPLMNavReference接口的ListChildren()方法可用于獲取結構樹中某個產品(Product)的所有子節(jié)點,多次遞歸使用該方法從而實現對結構樹的遍歷。對于遍歷出來的每一個零件(Part)根節(jié)點,使用CATIPart Request 和CATIMmiUseBodyContent 接 口 依 次 獲取零件中的所有的Body,以及每個Body中的所有特征,將這些特征與BridgeIFooting,BridgeIPile 類型接口進行比較,從而識別獲取的特征。
圖10 模型結構樹遍歷流程Fig.10 Model tree structure navigation process
使用類型接口Get 系列函數獲取特征的最新屬性值。對于遍歷出來的結構樹中所有產品(Product)節(jié)點,通 過CATCkeObjectAttrWrite Services 類的一系列方法,使用這些屬性值為IFC屬性賦值,從而實現產品IFC 屬性值的批量修改;使用這些特征屬性值向數據表格寫出數據,從而實現批量輸出模型審核數據。
針對既有的以工程模板和action 功能為手段的橋梁基礎BIM 建模方法的局限性,本文介紹了一種使用達索∕CAA 架構開發(fā)的橋梁基礎BIM 批量建模及審核工具。
使用該工具進行建模時,程序讀取設計表格中的基礎尺寸及其他數據,批量創(chuàng)建符合IFC 類型的產品(Product)節(jié)點,向其中插入樁及承臺特征,并對產品的IFC 屬性賦值。用戶可單獨修改特征結果,并使用該工具根據最終的特征結果批量修改產品IFC 屬性值,還可以使用審核工具,以excel 表格的形式輸出總結點下所有基礎的數據,為BIM建模結果審核提供便利。
從開發(fā)架構的角度上講,該設計和審核工具通過界面模塊、特征模塊、幾何拓撲模塊三部分實現其功能。幾何拓撲模塊的作用是生成承臺和樁的CATBody 類型拓撲結果;特征模塊將樁和承臺各自封裝為一種面向對象的模型,并調用幾何拓撲模塊結果實現特征的三維顯示;界面模塊通過調用特征模塊實現批量建模及模型的審核和IFC屬性修改。