樓 濤 ,包騰飛 ,
(1. 河海大學(xué) 水利水電學(xué)院,江蘇 南京 210098;2. 河海大學(xué) 水文水資源與水利工程科學(xué)國家重點(diǎn)實(shí)驗(yàn)室,江蘇南京 210098;3. 三峽大學(xué) 水利與環(huán)境學(xué)院,湖北 宜昌 443002)
拱壩是一種高次超靜定空間殼體結(jié)構(gòu),加之常位處高山峽谷,所以其結(jié)構(gòu)和邊界條件十分復(fù)雜。其中的雙曲拱壩在水平和鉛直界面都呈拱形,且雙曲拱壩的每個(gè)橫切面都不相同,參數(shù)嚴(yán)格約束,一般的三維軟件無法如此精細(xì)化建模[1-2]。隨著技術(shù)的發(fā)展,黃艷芳等[3]將CATIA引入水利工程三維建模中[4-5],但拱壩模型中存在許多異型體,這些異型體的模型參數(shù)復(fù)雜,且不易更改,如果光靠設(shè)計(jì)人員去一一構(gòu)建,需要花費(fèi)較多的時(shí)間,且效率不高。因此,本文基于CATIA進(jìn)行了二次開發(fā),開發(fā)出了能夠?qū)崿F(xiàn)拱壩結(jié)構(gòu)快速構(gòu)建功能的自動(dòng)化建模程序,提高模型構(gòu)建效率。CATIA 二次開發(fā)方法[7-8]主要有: 自動(dòng)化對(duì)象編程(Automation API)和基于構(gòu)件的應(yīng)用編程(CAA-RADE)。達(dá)索公司的3DEXPERIENCE(3DE)平臺(tái)作為CATIA V6版本,集成了CATIA所有功能,并提供并行、修改協(xié)同等功能,因此對(duì)3DE平臺(tái)的CATIA模塊進(jìn)行二次開發(fā)更具有應(yīng)用價(jià)值。本文基于3DE平臺(tái)利用Automation API接口開發(fā)了拱壩三維建模二次開發(fā)程序,以某拱壩模型為例,對(duì)其三維模型進(jìn)行構(gòu)建,全過程以Python程序驅(qū)動(dòng)CATIA模塊,通過模型特征參數(shù)構(gòu)建拱壩[6,9],實(shí)現(xiàn)了拱壩三維模型快速、準(zhǔn)確、智能的構(gòu)建。
與其他主流三維軟件不同,3DE平臺(tái)以多階段建模、疊加模型、關(guān)聯(lián)模型為技術(shù)核心[10-12],為實(shí)現(xiàn)三維環(huán)境下的模型并行協(xié)同設(shè)計(jì)提供了基礎(chǔ)。
以往的工程設(shè)計(jì)中,常以二維圖紙為主,通過二維圖紙轉(zhuǎn)化為三維模型的方法,在三維軟件中進(jìn)行建模。對(duì)于實(shí)際工程設(shè)計(jì)而言,以點(diǎn)線面為基礎(chǔ)元素,將一個(gè)設(shè)計(jì)對(duì)象劃分為多個(gè)基礎(chǔ)結(jié)構(gòu),分為多個(gè)階段進(jìn)行建模,從低維疊加生成高維,使得整個(gè)工程設(shè)計(jì)也可以劃分為多個(gè)階段,提高效率的同時(shí)也降低了設(shè)計(jì)壓力。多階段建模使得三維模型在工序上也能將其分割。
要實(shí)現(xiàn)并行設(shè)計(jì),最重要的一點(diǎn)就是要實(shí)現(xiàn)多人負(fù)責(zé)不同層級(jí)的信息,并能讓這些信息以一定的規(guī)則添加至同一個(gè)對(duì)象中,3DE平臺(tái)引用裝配的概念,使得一個(gè)模型能夠被若干子模型疊加組合,不同層級(jí)的信息也同時(shí)疊加在一起,組合成一個(gè)具備完整信息的模型。
在3DE平臺(tái)中,通過選擇支撐與約束的方法,可以將各個(gè)單獨(dú)的子模型關(guān)聯(lián)起來。3DE具有協(xié)同功能,就是通過對(duì)象的鏈接、引用等方法,將平臺(tái)中他人制作的模型作為自己的建?;A(chǔ),對(duì)其進(jìn)行修改或進(jìn)一步的建模操作,但任何操作均與原模型獨(dú)立開來,不會(huì)修改他人模型,也不會(huì)占用他人模型使其無法編輯。這一特性實(shí)現(xiàn)了多人之間的協(xié)同修改,并統(tǒng)一了數(shù)據(jù)源。
拱壩的外形和邊界條件都很復(fù)雜,其壩體上游面受到的荷載通過拱的作用傳遞到兩岸壩肩,并通過梁的作用傳遞到壩基,承載能力很大,大大減小壩身斷面面積,從而減少混凝土用量,故在水工建筑中得到了廣泛應(yīng)用。
拱壩的建模難度較高,主要是因?yàn)椋海?)壩型繁多:按照水平拱圈的拱軸線的幾何性質(zhì),可劃分為圓弧型、拋物線型、橢圓型、對(duì)數(shù)螺旋線型等;對(duì)于圓弧雙曲拱壩,又可根據(jù)拱弧圓心數(shù)量劃分為單心、雙心、三心等。(2)不對(duì)稱性:由于拱壩的設(shè)計(jì)依托于地形,或受地質(zhì)條件的影響,其左右拱往往不對(duì)稱,從而使左右拱弧拱心、兩端拱厚及圓心角都不相同。(3)對(duì)于雙曲拱壩,每層拱弧的拱心、拱厚及圓心角都不相同。
拱壩三維建模總體設(shè)計(jì)思想是從整體到局部,即先構(gòu)建拱壩整體,再對(duì)其局部結(jié)構(gòu)進(jìn)行單獨(dú)建模,根據(jù)約束關(guān)系對(duì)其進(jìn)行裝配,形成一個(gè)整體,最后根據(jù)地形等高線構(gòu)建壩體周圍的開挖巖體,形成一個(gè)完整的拱壩三維模型。具體步驟如下:
(1)構(gòu)建壩體整體骨架模型。根據(jù)給定的模型參數(shù),建立一系列高程參考平面,在參考平面內(nèi)生成拱圈樣條曲線,連接形成閉合截面,然后根據(jù)多個(gè)截面,通過多截面實(shí)體放樣生成壩體三維實(shí)體模型,得到壩體整體模型。
(2)構(gòu)建局部結(jié)構(gòu)。根據(jù)給定的模型參數(shù),構(gòu)建表孔、深孔、導(dǎo)流底孔和放空底孔等局部結(jié)構(gòu)的三維模型,然后根據(jù)約束關(guān)系與壩體整體進(jìn)行布爾運(yùn)算,達(dá)到建孔的目的,裝配成一個(gè)整體。
(3)構(gòu)建開挖巖體。根據(jù)給定的地形圖和等高線,構(gòu)建壩體開挖面,生成開挖巖體模型,與壩體裝配成一個(gè)完整的產(chǎn)品。
Python作為一門新興的高級(jí)編程語言,它的特點(diǎn)是簡潔明了。它的開源性、可移植性、可擴(kuò)展性和可嵌入性使其能夠被廣泛應(yīng)用。本文使用Python語言通過3DEXPERIENCE Automation(自動(dòng)化)接口進(jìn)行CATIA模塊的二次開發(fā),在Python3.6.5編譯器中通過仿寫VB代碼,利用CATIA模塊本身帶有的VB接口,通過簡單的代碼即可完成Python與3DE平臺(tái)的CATIA模塊的連接,后續(xù)就可以利用Python語言對(duì)需要的功能進(jìn)行代碼編寫,實(shí)現(xiàn)模型構(gòu)建的快捷操作。要對(duì)CATIA模塊進(jìn)行二次開發(fā)首先要添加其編程接口的引用,在Python中操作CATIA COM部件根對(duì)象,需要先添加CATIA編程接口的引用。Python是面向?qū)ο蟮木幊陶Z言,在3DE的Automation中,每個(gè)對(duì)象都有相應(yīng)的接口,要對(duì)某個(gè)對(duì)象進(jìn)行操作必須先引用相對(duì)應(yīng)的接口。3DE平臺(tái)提供了Automation幫助文檔,在幫助文檔中,可以方便快捷地查看某個(gè)對(duì)象所對(duì)應(yīng)的接口。通過引用接口,可以獲取對(duì)象進(jìn)行操作,構(gòu)建所需模型。對(duì)CATIA進(jìn)行二次開發(fā)的程序結(jié)構(gòu)如圖1所示。
圖 1 對(duì)CATIA進(jìn)行二次開發(fā)的程序結(jié)構(gòu)Fig. 1 Program structure of CATIA secondary development
骨架模型是從拱壩整體層面以及所處的地理位置考慮的控制性結(jié)構(gòu),由點(diǎn)、線、面3種要素組成,其中點(diǎn)是最基本的,起控制性作用。拱壩骨架主要由不同高程的拱圈構(gòu)成,其設(shè)計(jì)難點(diǎn)主要在于各層拱圈都不相同,模型參數(shù)復(fù)雜,因此,對(duì)CATIA模塊進(jìn)行了二次開發(fā),針對(duì)不同類型的拱圈控制方程開發(fā)出相對(duì)應(yīng)的建模程序,以達(dá)到快速構(gòu)建拱壩模型的目的。本文以拱圈控制方程為拋物線型的某拱壩為例,控制方程分為4個(gè)區(qū)域,拱圈上的控制點(diǎn)平面(x,y)坐標(biāo)根據(jù)所在位置滿足以下控制方程,參數(shù)根據(jù)不同高程而變化:
式中: Ruli為上游左岸拱圈曲率半徑;Ruri為上游右岸拱圈曲率半徑;Rdli為下游左岸拱圈曲率半徑;Rdri為下游右岸拱圈曲率半徑;Ouli為上游左岸拱圈曲率中心y坐標(biāo);Ouri為上游右岸拱圈曲率中心y坐標(biāo);Odli為下游左岸拱圈曲率中心y坐標(biāo);Odri為下游右岸拱圈曲率中心y坐標(biāo);αuli為上游左岸端點(diǎn)和拱圈曲率中心的連線與拱壩中心線之間的夾角;αuri為上游右岸端點(diǎn)和拱圈曲率中心的連線與拱壩中心線之間的夾角;αdli為下游左岸端點(diǎn)和拱圈曲率中心的連線與拱壩中心線之間的夾角;αdri為下游右岸端點(diǎn)和拱圈曲率中心的連線與拱壩中心線之間的夾角。
為實(shí)現(xiàn)參數(shù)化設(shè)計(jì),將給定的模型特征參數(shù)制成EXCEL表格。在Python編譯器中,導(dǎo)入xlrd模塊,調(diào)用EXCEL表格,讀取所需的模型參數(shù)。以該方法調(diào)用數(shù)據(jù),可以方便快捷地批量導(dǎo)入數(shù)據(jù),同時(shí)也方便尋找和更改某一特定的模型參數(shù),提高設(shè)計(jì)效率。
對(duì)于拋物線型拱圈,可以通過在CATIA草圖中直接生成拋物線的方式來構(gòu)建,為達(dá)到批量生成的目的,通過獲取Factory 2D對(duì)象(用于操作二維對(duì)象)的方法,來繪制控制斷面。首先調(diào)用模型特征參數(shù),通過AddNewPointCoord(添加點(diǎn)坐標(biāo))方法生成高程參考點(diǎn)。以高程參考點(diǎn)為基準(zhǔn),通過AddNewPlaneOffsetPt(通過偏移創(chuàng)建平面)方法可以生成一系列不同高程的草圖參考平面,然后在各個(gè)草圖中根據(jù)頂點(diǎn)坐標(biāo)、拋物線軸線矢量、焦點(diǎn)距離,通過CreateParabola(創(chuàng)建拋物線)方法就能夠準(zhǔn)確生成拋物線,以起始位置和終止位置截取所需要的拋物線段。為提高設(shè)計(jì)效率,該程序采用了for循環(huán)語句,高效批量生成各高程的拱圈拋物線,通過CreateLine(創(chuàng)建直線)命令連接各個(gè)拋物線的端點(diǎn),以AddNewJoin(接合)命令將各條線拼接在一起(用于閉合線框),就形成了各個(gè)拱圈的閉合截面。
給定模型特征參數(shù),以Python程序驅(qū)動(dòng)3DE平臺(tái)中的CATIA模塊,可以快速得到拱壩骨架三維模型(圖2),且易于修改,并根據(jù)需求更改調(diào)用的模型參數(shù)即可獲得不同的拱壩骨架模型。在此基礎(chǔ)上,通過CreateSpline(創(chuàng)建樣條曲線)命令繪制邊坡線,通過CreateReferenceFromObject(以目標(biāo)對(duì)象創(chuàng)建參考對(duì)象)命令添加接合后的各高程截面為參考截面,再以相同方法添加邊坡線作為參考線,最后通過AddGuide(添加引導(dǎo))命令添加參考線作為引導(dǎo)線,以AddSectionToLoft(添加截面到體)命令添加參考截面,即多截面實(shí)體放樣生成拱壩主體,其中添加多條引導(dǎo)線可以避免壩體曲面的扭曲,使得到的拱壩模型更為精確(圖3)。該部分僅生成拱壩主體,且不包含孔洞和局部結(jié)構(gòu),故通過多截面實(shí)體命令就能生成實(shí)體。
圖 2 拱壩骨架模型Fig. 2 Arch dam skeleton model
圖 3 拱壩主體模型Fig. 3 Main model of arch dam
拱壩建模的一個(gè)難點(diǎn)在于其曲面的設(shè)計(jì)和異型體的構(gòu)建,而拱壩模型除了主體壩體之外,還包括各種類型的局部結(jié)構(gòu),如表孔、深孔、導(dǎo)流底孔和放空底孔等,都屬于較難構(gòu)建的異型體。3DE平臺(tái)中的CATIA模塊具有強(qiáng)大的3D設(shè)計(jì)功能,正好可以解決此類問題。依據(jù)給定的模型特征參數(shù),在草圖中構(gòu)建異型體斷面形狀,通過凸臺(tái)、凹槽、倒模等操作就可以生成異型體模型。根據(jù)約束關(guān)系,可以將這些局部結(jié)構(gòu)模型與壩體主體進(jìn)行布爾運(yùn)算,裝配成一個(gè)整體。以表孔為例,整體可分為3部分,即上游壩面部分、下游壩面部分、中空挖孔部分,全過程也分為3個(gè)步驟,即實(shí)體構(gòu)建、定位、裝配。
實(shí)體構(gòu)建:3個(gè)部分實(shí)體均以Python輸入尺寸參數(shù)構(gòu)建截面草圖,如圖4和5所示。
圖 4 表孔下游壩面截面Fig. 4 Sketch of downstream dam surface section for crest outlet
圖 5 中空挖孔截面Fig. 5 Sketch of hollowed-out section
參考平面通過CreateReferenceFromObject(以目標(biāo)對(duì)象創(chuàng)建參考對(duì)象)命令添加AxisYZ(YZ平面),再以AddNewPad(凸臺(tái))命令以指定厚度拉伸成實(shí)體,如圖6和7所示。
圖 6 表孔下游壩面實(shí)體結(jié)構(gòu)Fig. 6 Solid structure of downstream dam surface for crest outlet
圖 7 中空挖孔實(shí)體結(jié)構(gòu)Fig. 7 Hollowed-out solid structure
定位:以指定位置與原點(diǎn)的X,Y,Z坐標(biāo)向量作為偏移方向和數(shù)值,通過AddNewTranslate(位移)命令將原處于原點(diǎn)位置的實(shí)體移動(dòng)至指定位置,再以AddNewRotate(偏轉(zhuǎn))命令以Z軸為旋轉(zhuǎn)軸,添加給定的偏轉(zhuǎn)角度,使其中截面與壩體正交。
裝配:上下游壩面部分以AddNewAssemble(裝配)命令與壩體裝配成一個(gè)整體,其中相交重疊部分會(huì)自動(dòng)融合。中空挖孔部分作為要切除的對(duì)象,這里采用AddNewRemove(移除)命令使之前已裝配的整體移除該部分實(shí)體(圖8),即生成了表孔溢流面,因不是分別建孔后拼接的情況,所以不會(huì)發(fā)生表孔溢流面建模與壩體交叉錯(cuò)位的情況。
全過程以Python程序驅(qū)動(dòng),調(diào)用模型數(shù)據(jù),獲取并添加Body對(duì)象,在草圖編輯器中自動(dòng)生成斷面形狀,在空間中拉伸為三維實(shí)體,通過倒模等操作修正其形態(tài),最終得到準(zhǔn)確的局部結(jié)構(gòu)模型,達(dá)到參數(shù)化建模的功能,完成設(shè)計(jì)參數(shù)向模型的傳遞過程,實(shí)現(xiàn)了拱壩局部結(jié)構(gòu)三維模型快速、準(zhǔn)確、智能的構(gòu)建。
拱壩除自身結(jié)構(gòu)復(fù)雜外,其邊界條件也很復(fù)雜,如果要對(duì)拱壩進(jìn)行全面的分析或者結(jié)構(gòu)計(jì)算,拱壩周圍的開挖巖體必不可少,因此本文還構(gòu)建了壩體開挖巖體以作分析。壩體開挖巖體的構(gòu)建主要通過LSV軟件和global mapper軟件獲取壩體周圍地形等高線圖,在CAD中對(duì)地形圖進(jìn)行處理,提取點(diǎn)云數(shù)據(jù),導(dǎo)入3DE中。在3DE的Terrain Preparation(地形)模塊中以點(diǎn)云生成地形網(wǎng)格面,修正之后根據(jù)拓?fù)潢P(guān)系生成質(zhì)量較好的地形曲面,最后通過凸臺(tái)命令將整個(gè)曲面拉伸成三維實(shí)體結(jié)構(gòu),達(dá)到生成壩體開挖巖體的目的。左岸混凝土墊座作為單獨(dú)的部分以相同的方法生成三維實(shí)體模型。依據(jù)約束關(guān)系,將拱壩模型與開挖巖體裝配成一個(gè)產(chǎn)品,整體產(chǎn)品模型如圖9所示。該模型還可以輸出為CAE文件以作計(jì)算,這也是CATIA模塊的一大優(yōu)勢所在。
圖8 表孔裝配結(jié)果Fig.8 Assembly result of crest outlet
圖 9 整體產(chǎn)品模型Fig. 9 Integrated product model
基于3DE平臺(tái)的CATIA模塊的二次開發(fā),利用Python語言簡潔、開源、可移植性、可擴(kuò)展性、可嵌入性和具有豐富的庫的特點(diǎn),能夠高效、準(zhǔn)確、智能地完成拱壩骨架三維模型的構(gòu)建,后續(xù)再通過多截面實(shí)體、凸臺(tái)、裝配等命令和布爾運(yùn)算依次構(gòu)建生成壩體整體和開挖巖體。3DE平臺(tái)的CATIA模塊功能強(qiáng)大,可以進(jìn)行復(fù)雜的曲面設(shè)計(jì),應(yīng)用于多種領(lǐng)域;在水工建筑物方面也有很大的應(yīng)用空間,3DE平臺(tái)更是提供了協(xié)同設(shè)計(jì)的功能,從設(shè)計(jì)到施工到管理,包含了多種強(qiáng)大功能,有待利用。針對(duì)CATIA模塊,可以通過對(duì)其進(jìn)行二次開發(fā),實(shí)現(xiàn)智能、高效、快捷的三維模型構(gòu)建的功能,發(fā)展?jié)摿薮?。?duì)于開發(fā)語言,如VB,Matlab,Python和C都可以使用,而簡潔的Python語言更是較好的選擇。