陳智淵,馮驁驁
(1.青海師范大學(xué) 民族師范學(xué)院 青海 海南藏族自治州 813000;2.清華大學(xué) 經(jīng)濟(jì)管理學(xué)院,北京100084)
?
STL文件格式的機(jī)械零件網(wǎng)格化剖分技術(shù)研究
陳智淵1,馮驁驁2
(1.青海師范大學(xué) 民族師范學(xué)院 青海 海南藏族自治州 813000;2.清華大學(xué) 經(jīng)濟(jì)管理學(xué)院,北京100084)
為了給機(jī)械仿真實(shí)驗(yàn)的后處理階段提供網(wǎng)格化的基本剖分單元,現(xiàn)以AutoCAD作為圖形輸入環(huán)境,以機(jī)械零件的STL文件作為數(shù)據(jù)交換接口,通過(guò)對(duì)STL文件的圖元結(jié)構(gòu)、數(shù)據(jù)組織方法的分析,利用VC++6.0編程讀取由AutoCAD生成的STL格式的零件三維實(shí)體文件,然后利用OpenGL圖形處理技術(shù)再現(xiàn)所讀取的圖形數(shù)據(jù),并實(shí)現(xiàn)機(jī)械零件的網(wǎng)格剖分功能,附帶平移、旋轉(zhuǎn)、縮放、三視圖等幾何變換處理,最終完成了基于STL文件的網(wǎng)格剖分程序開(kāi)發(fā).
網(wǎng)格化剖分單元;機(jī)械零件;STL;VC++6.0;OpenGL
隨著計(jì)算機(jī)技術(shù)的不斷更新發(fā)展,網(wǎng)格剖分這種離散對(duì)象的前置處理技術(shù)在航空航天,機(jī)械制造,生物工程等領(lǐng)域得到了推廣應(yīng)用,特別是在機(jī)械制造行業(yè),這種應(yīng)用最為廣泛.利用有限元分析復(fù)雜模型時(shí),通常采用人工方法很難對(duì)數(shù)據(jù)模型進(jìn)行剖分,這十分不利于高級(jí)有限元分析程序的推廣和使用[1].通常,當(dāng)我們掌握了網(wǎng)格剖分技術(shù)時(shí),在進(jìn)行復(fù)雜、經(jīng)濟(jì)成本較高的制造加工之前,我們就可以先在計(jì)算機(jī)中進(jìn)行建模,設(shè)置加工特征及參數(shù),模擬真實(shí)的加工環(huán)境,然后進(jìn)行網(wǎng)格剖分前處理.在我們得到了基本的剖分單元后,就可進(jìn)行中間處理和后處理,如對(duì)零件進(jìn)行應(yīng)力場(chǎng)的仿真[2]和溫度場(chǎng)的仿真[3]等,這與零件使用壽命的長(zhǎng)短直接掛鉤.因此,對(duì)網(wǎng)格化自動(dòng)剖分技術(shù)的研究理論與實(shí)際意義重大.
本課題就是針對(duì)機(jī)械零件模擬仿真實(shí)驗(yàn)的前置處理進(jìn)行的研究,基本任務(wù)是處理從STL文件中讀取獲得的三維實(shí)體數(shù)據(jù),再現(xiàn)機(jī)械零件的三維實(shí)體內(nèi)容并實(shí)現(xiàn)零件的網(wǎng)格化剖分.
Fig.1 System flow structure圖1 整體方案流程圖
系統(tǒng)整體方案流程如圖1所示,主要內(nèi)容包含以下三個(gè)部分:
(1)STL文件格式的分析和讀取
分析STL文件的圖元和文件結(jié)構(gòu),在VC++6.0環(huán)境下進(jìn)行STL零件圖形文件的讀取程序的編制,完成對(duì)STL文件格式的AutoCAD三維實(shí)體圖形的讀取.
(2)圖形的再現(xiàn)
利用OpenGL圖形處理技術(shù)對(duì)讀取到的零件三維實(shí)體數(shù)據(jù)進(jìn)行描述、繪制,實(shí)現(xiàn)圖形的再現(xiàn).
(3)圖形處理技術(shù)
進(jìn)行網(wǎng)格化剖分內(nèi)容的實(shí)驗(yàn),并實(shí)現(xiàn)機(jī)械零件的平移、放大、縮小以及旋轉(zhuǎn)等操作處理.
2.1 STL網(wǎng)格剖分原理簡(jiǎn)介
有限差分法( FMD)的網(wǎng)格單元多為直六面體,進(jìn)行網(wǎng)格剖分的目的是將剖分對(duì)象的三維實(shí)體在三維空間上進(jìn)行多邊形剖片處理,從而獲得由大量小六面體“堆砌”而成的目標(biāo)數(shù)據(jù)對(duì)象,為后續(xù)處理作準(zhǔn)備[4-5].立方體三角剖分如圖2所示,圖3為三角形網(wǎng)格分層切片處理示意圖.
Fig.2 Triangle meshing of box圖2 立方體三角形剖分
Fig.3 Triangle layer meshing圖3 三角形網(wǎng)格分層切片
Fig.4 Main program flow圖4 主程序流程圖
2.2 程序流程圖
2.2.1 主程序流程圖
主程序流程如圖4所示,主程序流程是對(duì)STL網(wǎng)格剖分原理的補(bǔ)充說(shuō)明.
2.2.2 STL讀取與再現(xiàn)
文獻(xiàn)[6]對(duì)文本及二進(jìn)制格式的STL文件結(jié)構(gòu)、讀取的方法作了詳細(xì)介紹,另外,關(guān)于如何添加OpenGL庫(kù)文件、編寫(xiě)OpenGL程序等參見(jiàn)文獻(xiàn)[7],這里不再累述,只給出STL文件讀取與圖形再現(xiàn)的流程圖(圖5)供參考.
Fig.5 STL read and display flow圖5 STL文件讀取與圖形再現(xiàn)流程圖
2.3 核心程序
2.3.1 STL數(shù)據(jù)讀取
采用逐行讀取數(shù)據(jù)的方法,對(duì)ASCII的STL文件數(shù)據(jù)信息進(jìn)行讀取.對(duì)于三角面片數(shù)據(jù)信息的處理,采取循環(huán)結(jié)構(gòu)體進(jìn)行讀取,最后將表示空間三角面片的法向矢量和頂點(diǎn)坐標(biāo)數(shù)據(jù)存入動(dòng)態(tài)數(shù)組vert[3]中.具體算法描述如下:1)設(shè)置面緩存和點(diǎn)緩存;2)打開(kāi)文件;3)判斷文件類型(是ASCII格式還是Binary格式);4)探尋關(guān)鍵字facet normal,讀取并保存面法向量;5)探尋關(guān)鍵字vertex,讀取并保存頂點(diǎn)坐標(biāo);6)進(jìn)行下一個(gè)三角面片的讀取;7)讀取完畢.ASCII讀取流程如圖6所示.
Fig.6 ASCII read flow圖6 ASCII讀取流程
2.3.2 STL數(shù)據(jù)模型的顯示
在OpenGL中,可通過(guò)調(diào)用glBegin(GLTRIANGLES)和glEnd()函數(shù)來(lái)直接生產(chǎn)和渲染三角面片,從而生成所需的實(shí)體數(shù)據(jù)模型,因此通過(guò)OpenGL來(lái)實(shí)現(xiàn)STL三維模型的真實(shí)感圖形顯示,效果更好.圖形再現(xiàn)的部分代碼如下:
void CWelcomeView::myplane()
{……;
for(int i_0;i {glBegin(GLTRIANGLES); //繪制三角面片 glVertex3f(Vertices[i].x0,vertices[i].y0,vertices[i].z0); glVertex3f(Vertices[i+1].x0,vertices[i+1].y0,vertices[i+1].z0); glVertex3f(Vertices[i+2].x0,vertices[i+2].y0,vertices[i+2].z0); glEnd();)} 運(yùn)行系統(tǒng)程序,在出現(xiàn)的系統(tǒng)界面上導(dǎo)入STL測(cè)試件1,進(jìn)行剖分處理,得到的不同視圖的網(wǎng)格剖分結(jié)果分別如圖7和圖8所示. Fig.7 Text 1 mesh result圖7 測(cè)試件1網(wǎng)格剖分 Fig.8 Text 1 mesh result圖8 測(cè)試件1網(wǎng)格剖分 通過(guò)以上測(cè)試可知,利用VC++6.0進(jìn)行語(yǔ)言編程,并結(jié)合OpenGL圖形處理技術(shù)能較好地讀取STL格式文件,實(shí)現(xiàn)STL實(shí)體圖形的再現(xiàn),能夠有效的劃分零件單元,亦包含旋轉(zhuǎn)、放大、縮小等操作,為有限元分析的前期處理作了必要準(zhǔn)備. 本文通過(guò)對(duì)STL文件的深入研究,以VC++6.0為開(kāi)發(fā)平臺(tái),利用VC++標(biāo)準(zhǔn)IO庫(kù)的ifstream類型定義對(duì)象并綁定STL文件,再用標(biāo)準(zhǔn)庫(kù)string類型中的getline函數(shù)逐行讀取綁定的STL文件并對(duì)其中的三角面片頂點(diǎn)數(shù)據(jù)進(jìn)行存儲(chǔ),最后結(jié)合OpenGL編程技術(shù)實(shí)現(xiàn)了對(duì)STL文件讀取與顯示以及網(wǎng)格化剖分的功能,可得出以下結(jié)論: (1)利用VC++6.0和OpenGL等軟件,可以順利實(shí)現(xiàn)對(duì)STL文件的讀取. (2)OpenGL圖形處理技術(shù)能夠?qū)崿F(xiàn)圖形再現(xiàn)和網(wǎng)格剖分等功能. (3)根據(jù)網(wǎng)格剖分技術(shù),可以提高實(shí)體模擬精度. [1]戴文芳,曹宗杰,謝軍.有限元網(wǎng)格自動(dòng)剖分方法及其在工程中的應(yīng)用[J].長(zhǎng)春工程學(xué)院學(xué)報(bào)(自然科學(xué)版),2009,10(1):61-64. [2]平學(xué)成,陳夢(mèng)成,鄭冰冰,等.受熱載荷兩相材料界面端應(yīng)力場(chǎng)的新型有限元分析[J].固體力學(xué)學(xué)報(bào),2013,34(6):591-596. [3]李治國(guó),陳剛.鐘罩式感應(yīng)爐的結(jié)構(gòu)設(shè)計(jì)及溫度場(chǎng)有限元分析[J].機(jī)械工程師,2014(3):131-132. [4]戴鼎漢,侯華,王忠,等.基于射線法的STL無(wú)鋸齒變形六面體網(wǎng)格剖分算法[J].鑄造技術(shù),2009,30(6):808-811. [5]邱宗文,孫國(guó)雄,劉永剛,等.基于STL的切片法有限元差分網(wǎng)格剖分的研究[J].特種鑄造及有色合金,2003(6):28-30. [6]耿鐵,任清海.基于OpenGL的STL文件三維模型真實(shí)感圖形可視化研究[J].制造業(yè)自動(dòng)化,2011,33(16):121-124. [7]劉慧杰,靳海亮.基于VC++的OpenGL三維圖形開(kāi)發(fā)設(shè)計(jì)[J].計(jì)算機(jī)與數(shù)字工程,2009,37(7):122-124. [責(zé)任編輯:王軍] Research on meshing techniques based on STL machine part CHEN Zhiyuan1,FENG Aoao2 (Minorities Teachers College of Qinghai Teachers University,Hainan Tibetan Autonomous Prefecture,Hainan 813000,China;2.School of Economics and Management,Tsinghua University,Beijing 100084,China) For providing the simulation of post-processing stage the basic mesh units,it takes AutoCAD as the graphic input environment,with STL machine part file as the data exchange interface.Through the analysis of STL graphics file structure,data organization method,with VC++6.0 programming,it reads STL three-dimensional entity graph generated by AutoCAD,and then used OpenGL graphics processing technology to reproduce the graphics data read,achieved the functions of graphical mesh,with translation,rotation,scaling,three views and other geometric transformation processing,finally completed the development of programs based on STL mesh. mesh unit; machine part; STL; VC++6.0; OpenGL 2015-12-02 陳智淵(1981-),男,土族,青海樂(lè)都人,青海師范大學(xué)講師,主要從事計(jì)算機(jī)語(yǔ)音圖像處理的研究. TP311 A 1672-3600(2016)12-0050-034 測(cè)試結(jié)果
5 結(jié) 論