許向彥,羅國偉,王立凱
(1.中國飛機(jī)強(qiáng)度研究所,陜西 西安 710065;2.廣東亞太新材料科技有限公司,廣東 肇慶 526000)
HAJIF是中國飛機(jī)強(qiáng)度研究所研發(fā)的一款大型有限元分析軟件,其功能全面,具備靜力、屈曲、模態(tài)等通用分析求解能力,在諸多航空產(chǎn)品結(jié)構(gòu)分析中獲得應(yīng)用。當(dāng)前,隨著軍民融合的不斷深入,以及工業(yè)CAE軟件自主化的緊迫需求,HAJIF軟件所服務(wù)的行業(yè)也從航空航天領(lǐng)域拓展到軌道交通、汽車等領(lǐng)域。
汽車工業(yè)中,汽車零部件是構(gòu)成汽車主機(jī)的基礎(chǔ),精確無誤的汽車零部件有限元模型是得到整車正確分析結(jié)果的基本保證?;贖AJIF平臺(tái)建立的汽車部件模型庫,作為零部件模型與分析軟件之間的連接紐帶,可以集成前人優(yōu)秀的建模經(jīng)驗(yàn)及技巧,同時(shí),鑒于HAJIF結(jié)構(gòu)分析軟件的國產(chǎn)自主化,可以有效保證該模型庫的延續(xù)性,方便后續(xù)修改與改進(jìn)。
本文以HAJIF平臺(tái)為依托,基于XML與OpenGL技術(shù)實(shí)現(xiàn)了汽車零部件模型庫的搭建。該模型庫可以同時(shí)存儲(chǔ)STL幾何模型與BDF、HJF等有限元模型,支持將其無縫加載至HAJIF系統(tǒng)中進(jìn)行顯示與分析,具有一定的工程實(shí)用價(jià)值。
XML(Extensible Markup Language)是一種類似于HTML的標(biāo)記語言,但是XML沒有使用預(yù)定義的標(biāo)記。因此,XML允許根據(jù)自己的設(shè)計(jì)需要定義專屬的標(biāo)記。這是一種十分有用的可存儲(chǔ)、可搜索和可共享的格式存儲(chǔ)數(shù)據(jù)的方法。更重要的是,因?yàn)閄ML的基本格式是標(biāo)準(zhǔn)化的,所以如果跨系統(tǒng)或平臺(tái)共享或傳輸XML,無論是在本地還是在互聯(lián)網(wǎng)上,接收方仍然可以根據(jù)標(biāo)準(zhǔn)化的XML語言解析數(shù)據(jù)。
XML文件的讀取技術(shù)有3種:分別是QXmlStreamReader、DOM和SAX??紤]到所建立的汽車部件模型庫需要具備模型動(dòng)態(tài)添加與刪除的功能,同時(shí)綜合上述3種XML文件讀取技術(shù)的各自特點(diǎn),本文最終選用DOM技術(shù)進(jìn)行XML文件的讀取與處理。
DOM將XML文檔描述為一棵樹結(jié)構(gòu),Tree數(shù)據(jù)結(jié)構(gòu)的每個(gè)節(jié)點(diǎn)表現(xiàn)為一個(gè)XML標(biāo)記或者XML標(biāo)記內(nèi)的文本項(xiàng)。樹形結(jié)構(gòu)精確地描述了XML文檔中標(biāo)記間以及文本項(xiàng)間的相互關(guān)聯(lián)性。下述XML文檔為系統(tǒng)中存儲(chǔ)汽車部件模型的部分信息,包含部件名稱及部件信息:
其所對應(yīng)的DOM樹如圖1所示。
圖1 XML文檔對應(yīng)DOM樹
由于利用DOM技術(shù)可以將XML文檔轉(zhuǎn)換為樹形數(shù)據(jù)結(jié)構(gòu),所以通過完成樹形結(jié)構(gòu)的遞歸遍歷即可完成XML文檔的完整讀取。反之,將用戶在模型庫中所做的修改保存至XML文檔中即可完成零部件模型信息的修改。
OpenGL是一項(xiàng)成熟的圖形化顯示技術(shù)。在OpenGL中,所有模型都處于3D空間中,而屏幕和窗口只能以2D像素?cái)?shù)組輸出,所以,OpenGL的大部分工作是把3D坐標(biāo)轉(zhuǎn)變?yōu)槠聊贿m應(yīng)的2D像素。3D坐標(biāo)轉(zhuǎn)變?yōu)?D坐標(biāo)的處理過程是由OpenGL的圖形渲染管線管理。本文通過在OpenGL固定渲染管線中加入自定義可編程著色器,完成STL幾何模型的圖形化顯示。
OpenGL的固定渲染管線一般包含以下幾個(gè)步驟:(1)頂點(diǎn)變換。頂點(diǎn)變換作為渲染管線中的首個(gè)處理模塊,所包含的信息非常多,模型的各項(xiàng)操作都在此模塊中完成。(2)圖元裝配。圖元裝配階段將頂點(diǎn)變換模塊輸出的所有頂點(diǎn)作為輸入,并將所有的點(diǎn)裝配成指定圖元的形狀輸出。(3)幾何裝配。幾何裝配模塊會(huì)把圖元裝配階段的輸出數(shù)據(jù)當(dāng)作其輸入,可以通過產(chǎn)生新的頂點(diǎn)構(gòu)造新的圖元來生成其他形狀。幾何裝配階段的輸出既可以輸出至紋理裝配模塊使圖形更為逼真,也可以直接發(fā)送至光柵化階段。(4)紋理裝配。紋理裝配的作用在于其可以通過添加模型細(xì)節(jié)使得模型或場景更為逼真。(5)光柵化。光柵化階段會(huì)把圖元映射為屏幕或窗口中相應(yīng)的像素,生成供片段著色階段使用的片段。(6)片段操作。片段著色階段的主要目的是計(jì)算一個(gè)像素的最終表現(xiàn)形式。在該階段中,利用著色器編程語言編寫相應(yīng)腳本可以自定義設(shè)置模型輸出顏色及光照效果。
在固定渲染管線的基礎(chǔ)上,本文利用圖形著色語言編寫頂點(diǎn)著色器與片段著色器,完成模型的控制與自定義顯示。頂點(diǎn)著色器與片段著色器的代碼片段如下所示:
(1)頂點(diǎn)著色器
#version 120
attribute vec3 vertex_position;
uniform mat4 transform_matrix;
uniform mat4 view_matrix;
varying vec3 ec_pos;
void main() {
gl_Position = view_matrix*transform_matrix*vec4(vertex_position, 1.0);
ec_pos = gl_Position.xyz;
}
(2)片段著色器
#version 120
uniform float zoom;
varying vec3 ec_pos;
void main() {
vec3 base3 = vec3(0.99, 0.96, 0.89);
vec3 base2 = vec3(0.92, 0.91, 0.83);
vec3 base00 = vec3(0.40, 0.48, 0.51);
vec3 ec_normal = normalize(cross(dFdx(ec_pos), dFdy(ec_pos)));
ec_normal.z *= zoom;
ec_normal = normalize(ec_normal);
float a = dot(ec_normal, vec3(0.0, 0.0, 1.0));
float b = dot(ec_normal, vec3(-0.57, -0.57, 0.57));
gl_FragColor = vec4((a*base2 + (1-a)*base00)*0.5 +(b*base3 + (1-b)*base00)*0.5, 1.0);
}
本系統(tǒng)依照XML文件完成系統(tǒng)初始化配置,同時(shí)對外開放3種類型的接口,分別是模型增加刪除的修改接口、模型信息的顯示接口,以及模型與HAJIF系統(tǒng)或幾何模型圖形化顯示模塊的交互接口。系統(tǒng)框架設(shè)計(jì)圖如圖2所示。
圖2 系統(tǒng)框架設(shè)計(jì)圖
對于模型增加與刪除接口,用戶完成模型修改后,通過將相關(guān)信息寫入XML配置文件中完成模型信息的保存與更新。以XML數(shù)據(jù)為基礎(chǔ)的系統(tǒng)搭建完成了數(shù)據(jù)與系統(tǒng)的分離,使模型數(shù)據(jù)的分享更為便捷。用戶可以導(dǎo)出模型相關(guān)文件與配置文件,進(jìn)而分享給其他人。與此同時(shí),用戶也可以直接導(dǎo)入從別處獲得的模型庫,快速實(shí)現(xiàn)相互共享。
對于模型顯示接口,系統(tǒng)提供統(tǒng)一的數(shù)據(jù)結(jié)構(gòu),模型具備以下屬性:(1)模型名稱;(2)模型文件;(3)模型描述信息;(4)模型圖片;(5)模型附加文件。這5項(xiàng)屬性可以較為完整地描述一個(gè)模型的相關(guān)信息。
本系統(tǒng)同時(shí)支持汽車零部件的有限元模型與幾何模型的存儲(chǔ),有限元模型的存儲(chǔ)意義在于其可以固化前人的有限元建模經(jīng)驗(yàn),而幾何模型的存儲(chǔ)則可以固化前人的設(shè)計(jì)經(jīng)驗(yàn),經(jīng)典的設(shè)計(jì)結(jié)構(gòu)對后續(xù)設(shè)計(jì)人員的工作具有重要的指導(dǎo)作用。
在計(jì)算機(jī)圖形應(yīng)用系統(tǒng)中,STL文件是一種描述三角形網(wǎng)格的標(biāo)準(zhǔn)格式,其具有ASCII碼格式與二進(jìn)制兩種格式。主流的CAD系統(tǒng)均可輸出STL格式的幾何模型,鑒于此,本系統(tǒng)同時(shí)提供STL幾何模型的圖形化顯示接口。
幾何模型圖形化模塊的設(shè)計(jì)邏輯如圖3所示。當(dāng)STL幾何模型從汽車部件模型庫中導(dǎo)入進(jìn)來時(shí),通過STL模型解析器首先判斷STL幾何模型文件格式,對于ASCII格式與二進(jìn)制格式分別處理解析得到模型頂點(diǎn)與面法線相關(guān)信息,將所有信息傳入可編程渲染管線中進(jìn)行渲染,同時(shí)通過設(shè)計(jì)模型交互模塊獲取用戶的操作信息(旋轉(zhuǎn),平移,放大縮小),繼而在幾何模型中反饋顯示。
圖3 幾何模型顯示模塊邏輯設(shè)計(jì)圖
本系統(tǒng)基于Visual Studio 2010,采用面向?qū)ο笏枷?,依托HAJIF系統(tǒng)搭建完成,主要涉及到的Qt庫有QtGui庫、QtOpenGL庫、QGLShaderProgram庫、QDomDocument庫及QTreeWidget庫。幾何模型顯示模塊的界面設(shè)計(jì)如圖4所示。
圖4 幾何模型顯示模塊界面
幾何模型顯示模塊支持用戶與模型的交互,用戶可以通過鼠標(biāo)操作實(shí)現(xiàn)模型的旋轉(zhuǎn)、縮放及平移。圖5是測試模型經(jīng)過一定程度的縮放、平移與旋轉(zhuǎn)后的模型顯示圖。
圖5 模型交互顯示圖
幾何模型顯示模塊作為其中一個(gè)功能點(diǎn),可以滿足用戶的基本需求。相對于幾何模型顯示功能,有限元模型的有效管理以及與HAJIF系統(tǒng)的無縫連接會(huì)發(fā)揮更為重要的作用。
圖6描述了某汽車左前門防撞梁的模型信息,通過加載接口,可以將該模型直接導(dǎo)入HAJIF系統(tǒng)中,通過HAJIF系統(tǒng)可直接提交該模型的求解計(jì)算,計(jì)算結(jié)果如圖7所示。完整的模型信息展示以及與HAJIF系統(tǒng)的無縫連接大大提高了分析人員的工作效率。
圖6 左前門防撞梁導(dǎo)入HAJIF系統(tǒng)圖
圖7 左前門防撞梁計(jì)算結(jié)果圖
本文以HAJIF平臺(tái)為依托,基于XML與OpenGL技術(shù)完成了汽車部件模型庫的搭建,可以同時(shí)集成包含大量建模經(jīng)驗(yàn)的有限元模型數(shù)據(jù)與包含設(shè)計(jì)經(jīng)驗(yàn)的幾何模型數(shù)據(jù),大大提高了有限元分析人員的分析效率。自定義的XML配置與HAJIF分析軟件的國產(chǎn)自主化保證了該系統(tǒng)的可拓展性與可延續(xù)性,具有一定的工程實(shí)用價(jià)值。