一、介紹
STL文件格式(stereolithography,光固化立體造型術的縮寫)是由3D SYSTEMS 公司於1988 年制定的一個接口協議,是一種為快速原型制造技術服務的三維圖形文件格式。STL 文件由多個三角形面片的定義組成,每個三角形面片的定義包括三角形各個定點的三維坐標及三角形面片的法矢量。本文介紹如何通過C語言讀取STL格式文件。
二、STL格式
在快速成型和分層制造領域,STL文件被廣泛應用於實體的表述。其原理是
將復雜的表面用有限個三角面片來擬合。其實和縫足球差不多,只不過足球
多用五邊形和六邊形。由於STL文件和具體的CAD系統無關,也就是說幾乎所
有CAD系統都提供將各自特定格式的實體表示轉換成STL文件的功能,所以非
常好用。
STL文件具有兩種格式ASCII格式和二進制格式,但二進制格式文件的長度
較前者小得多,一般為其1/6。現介紹如下:
ASCII格式:
solid <name>
facet normal ni nj nk
outer loop
vertex v1x v1y v1z
vertex v2x v2y v2z
vertex v3x v3y v3z
endloop
endfacet
......
endsolid<name>
二進制格式:
結構為:84個字節(byte)組成的題頭,其中前80個字節用於表示有關文
件、作者姓名和注釋的信息,最后4個字節用於表示小三角形面面片的數目。
對於每一個小三角形面片,有48個字節用於表示其法向量的X,Y和Z的分量
以及三角形每個頂點的X,Y,Z的坐標,其中每個坐標用4個字節表示。最后
有2個不用的字節。
STL文件的二進制碼輸出形式是用IEEE整數和浮點數來表示的。結構如下:
<Binary STL file>::=<Binary STL file header>{Facet storage}...
<Binary STL file header>::=<80 bytes of solid name. Filled by
SPACE character><4-byte-integer of
facet number>
<Facet storage>::=<Normal Vector><Vetex1><Vetex2><Vetex3>
<Normal Vector>::=<4-byte-float of x><4-byte-float of y>
<4-byte-float of z>
<Vetex>::=<4-byte-float of x coordinate>
<4-byte-float of y coordinate>
<4-byte-float of z coordinate>
有了這些格式的描述,就可以用一段程序方便地將這些數據讀出來並進行
處理了。
三、示例代碼
1 #include <fstream> 2 #include <iostream> 3 using namespace std; 4 5 int main() 6 { 7 int i,ns,ntr; 8 float data; 9 ifstream infile; 10 infile.open("C:\\E.STL",ios::binary); 11 ntr = 100; //Segy文件總道數 12 13 infile.seekg(84,ios::beg); //跳過84字節的卷頭 14 for(i=0;i<ntr;i++){ 15 16 infile.read((char*)&data,sizeof(float)); 17 18 cout<<data<<"\n"; 19 20 } 21 infile.close(); 22 return 0; 23 }
四、總結
通過解析STL格式文件,我們可以開發接口讀取STL文件導入模型到PDMS,或者從PDMS中輸出STL格式文件到其他軟件。