陳智淵,馮驁驁
(1.青海師范大學 民族師范學院 青海 海南藏族自治州 813000;2.清華大學 經濟管理學院,北京100084)
?
STL文件格式的機械零件網格化剖分技術研究
陳智淵1,馮驁驁2
(1.青海師范大學 民族師范學院 青海 海南藏族自治州 813000;2.清華大學 經濟管理學院,北京100084)
為了給機械仿真實驗的后處理階段提供網格化的基本剖分單元,現以AutoCAD作為圖形輸入環境,以機械零件的STL文件作為數據交換接口,通過對STL文件的圖元結構、數據組織方法的分析,利用VC++6.0編程讀取由AutoCAD生成的STL格式的零件三維實體文件,然后利用OpenGL圖形處理技術再現所讀取的圖形數據,并實現機械零件的網格剖分功能,附帶平移、旋轉、縮放、三視圖等幾何變換處理,最終完成了基于STL文件的網格剖分程序開發.
網格化剖分單元;機械零件;STL;VC++6.0;OpenGL
隨著計算機技術的不斷更新發展,網格剖分這種離散對象的前置處理技術在航空航天,機械制造,生物工程等領域得到了推廣應用,特別是在機械制造行業,這種應用最為廣泛.利用有限元分析復雜模型時,通常采用人工方法很難對數據模型進行剖分,這十分不利于高級有限元分析程序的推廣和使用[1].通常,當我們掌握了網格剖分技術時,在進行復雜、經濟成本較高的制造加工之前,我們就可以先在計算機中進行建模,設置加工特征及參數,模擬真實的加工環境,然后進行網格剖分前處理.在我們得到了基本的剖分單元后,就可進行中間處理和后處理,如對零件進行應力場的仿真[2]和溫度場的仿真[3]等,這與零件使用壽命的長短直接掛鉤.因此,對網格化自動剖分技術的研究理論與實際意義重大.
本課題就是針對機械零件模擬仿真實驗的前置處理進行的研究,基本任務是處理從STL文件中讀取獲得的三維實體數據,再現機械零件的三維實體內容并實現零件的網格化剖分.

Fig.1 System flow structure圖1 整體方案流程圖
系統整體方案流程如圖1所示,主要內容包含以下三個部分:
(1)STL文件格式的分析和讀取
分析STL文件的圖元和文件結構,在VC++6.0環境下進行STL零件圖形文件的讀取程序的編制,完成對STL文件格式的AutoCAD三維實體圖形的讀取.
(2)圖形的再現
利用OpenGL圖形處理技術對讀取到的零件三維實體數據進行描述、繪制,實現圖形的再現.
(3)圖形處理技術
進行網格化剖分內容的實驗,并實現機械零件的平移、放大、縮小以及旋轉等操作處理.
2.1 STL網格剖分原理簡介
有限差分法( FMD)的網格單元多為直六面體,進行網格剖分的目的是將剖分對象的三維實體在三維空間上進行多邊形剖片處理,從而獲得由大量小六面體“堆砌”而成的目標數據對象,為后續處理作準備[4-5].立方體三角剖分如圖2所示,圖3為三角形網格分層切片處理示意圖.

Fig.2 Triangle meshing of box圖2 立方體三角形剖分

Fig.3 Triangle layer meshing圖3 三角形網格分層切片

Fig.4 Main program flow圖4 主程序流程圖
2.2 程序流程圖
2.2.1 主程序流程圖
主程序流程如圖4所示,主程序流程是對STL網格剖分原理的補充說明.
2.2.2 STL讀取與再現
文獻[6]對文本及二進制格式的STL文件結構、讀取的方法作了詳細介紹,另外,關于如何添加OpenGL庫文件、編寫OpenGL程序等參見文獻[7],這里不再累述,只給出STL文件讀取與圖形再現的流程圖(圖5)供參考.

Fig.5 STL read and display flow圖5 STL文件讀取與圖形再現流程圖
2.3 核心程序
2.3.1 STL數據讀取
采用逐行讀取數據的方法,對ASCII的STL文件數據信息進行讀取.對于三角面片數據信息的處理,采取循環結構體進行讀取,最后將表示空間三角面片的法向矢量和頂點坐標數據存入動態數組vert[3]中.具體算法描述如下:1)設置面緩存和點緩存;2)打開文件;3)判斷文件類型(是ASCII格式還是Binary格式);4)探尋關鍵字facet normal,讀取并保存面法向量;5)探尋關鍵字vertex,讀取并保存頂點坐標;6)進行下一個三角面片的讀取;7)讀取完畢.ASCII讀取流程如圖6所示.

Fig.6 ASCII read flow圖6 ASCII讀取流程
2.3.2 STL數據模型的顯示
在OpenGL中,可通過調用glBegin(GLTRIANGLES)和glEnd()函數來直接生產和渲染三角面片,從而生成所需的實體數據模型,因此通過OpenGL來實現STL三維模型的真實感圖形顯示,效果更好.圖形再現的部分代碼如下:
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();)} 運行系統程序,在出現的系統界面上導入STL測試件1,進行剖分處理,得到的不同視圖的網格剖分結果分別如圖7和圖8所示. Fig.7 Text 1 mesh result圖7 測試件1網格剖分 Fig.8 Text 1 mesh result圖8 測試件1網格剖分 通過以上測試可知,利用VC++6.0進行語言編程,并結合OpenGL圖形處理技術能較好地讀取STL格式文件,實現STL實體圖形的再現,能夠有效的劃分零件單元,亦包含旋轉、放大、縮小等操作,為有限元分析的前期處理作了必要準備. 本文通過對STL文件的深入研究,以VC++6.0為開發平臺,利用VC++標準IO庫的ifstream類型定義對象并綁定STL文件,再用標準庫string類型中的getline函數逐行讀取綁定的STL文件并對其中的三角面片頂點數據進行存儲,最后結合OpenGL編程技術實現了對STL文件讀取與顯示以及網格化剖分的功能,可得出以下結論: (1)利用VC++6.0和OpenGL等軟件,可以順利實現對STL文件的讀取. (2)OpenGL圖形處理技術能夠實現圖形再現和網格剖分等功能. (3)根據網格剖分技術,可以提高實體模擬精度. [1]戴文芳,曹宗杰,謝軍.有限元網格自動剖分方法及其在工程中的應用[J].長春工程學院學報(自然科學版),2009,10(1):61-64. [2]平學成,陳夢成,鄭冰冰,等.受熱載荷兩相材料界面端應力場的新型有限元分析[J].固體力學學報,2013,34(6):591-596. [3]李治國,陳剛.鐘罩式感應爐的結構設計及溫度場有限元分析[J].機械工程師,2014(3):131-132. [4]戴鼎漢,侯華,王忠,等.基于射線法的STL無鋸齒變形六面體網格剖分算法[J].鑄造技術,2009,30(6):808-811. [5]邱宗文,孫國雄,劉永剛,等.基于STL的切片法有限元差分網格剖分的研究[J].特種鑄造及有色合金,2003(6):28-30. [6]耿鐵,任清海.基于OpenGL的STL文件三維模型真實感圖形可視化研究[J].制造業自動化,2011,33(16):121-124. [7]劉慧杰,靳海亮.基于VC++的OpenGL三維圖形開發設計[J].計算機與數字工程,2009,37(7):122-124. [責任編輯:王軍] 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-),男,土族,青海樂都人,青海師范大學講師,主要從事計算機語音圖像處理的研究. TP311 A 1672-3600(2016)12-0050-034 測試結果


5 結 論