STL格式及其轉換
近期接觸了3D打印的一些東西,也制作了一個vrml轉stl的插件,對該領域多了一些認識。
目前尚沒有打印機直接支持stl、obj等格式,在打印之前需使用廠家提供的軟件將stl等格式轉換為G-CODE(G指令),也就是切片過程。打印過程中也有許多細節問題:
如選擇切片方向、
打印對象底部分無法與打印平台粘牢導致打印過程失敗、
模型頂弧等位置處理不夠精細、
開始打印的棱邊角處容易出現小刺導致對象被打印頭掛到脫離平台、
底面平板打印時熱脹冷縮導致底面自動脫離平台等。
總體來講比較方便打印的對象比較有限,打印機功能細節上還需要進一步完善才能有較好的體驗。
STL只能用來表示封閉的面或者體,stl文件有兩種:一種是ASCII明碼格式,另一種是二進制格式。
一、ASCII格式
ASCII碼格式的STL文件逐行給出三角面片的幾何信息,每一行以1個或2個關鍵字開頭。
在STL文件中的三角面片的信息單元 facet 是一個帶矢量方向的三角面片,STL三維模型就是由一系列這樣的三角面片構成。
整個STL文件的首行給出了文件路徑及文件名。
在一個 STL文件中,每一個facet由7 行數據組成,
facet normal 是三角面片指向實體外部的法矢量坐標,
outer loop 說明隨后的3行數據分別是三角面片的3個頂點坐標,3頂點沿指向實體外部的法矢量方向逆時針排列。
明碼: //字符段意義
solid filenamestl //文件路徑及文件名 facet normal x y z //三角面片法向量的3個分量值 outerloop vertex x y z //三角面片第一個頂點坐標 vertex x y z //三角面片第二個頂點坐標 vertex x y z //三角面片第三個頂點坐標 endloop endfacet //完成一個三角面片定義 ...... //其他facet endsolid filenamestl //整個STL文件定義結束
二、二進制格式
二進制STL文件用固定的字節數來給出三角面片的幾何信息。
文件起始的80個字節是文件頭,用於存貯文件名;
緊接着用 4 個字節的整數來描述模型的三角面片個數,
后面逐個給出每個三角面片的幾何信息。每個三角面片占用固定的50個字節,依次是:
3個4字節浮點數(角面片的法矢量)
3個4字節浮點數(1個頂點的坐標)
3個4字節浮點數(2個頂點的坐標)
3個4字節浮點數(3個頂點的坐標)個
三角面片的最后2個字節用來描述三角面片的屬性信息。
一個完整二進制STL文件的大小為三角形面片數乘以 50再加上84個字節。
1 UINT8//Header//文件頭 2 UINT32//Numberoftriangles//三角面片數量 3 //foreachtriangle(每個三角面片中) 4 REAL32[3]//Normalvector//法線矢量 5 REAL32[3]//Vertex1//頂點1坐標 6 REAL32[3]//Vertex2//頂點2坐標 7 REAL32[3]//Vertex3//頂點3坐標 8 UINT16//Attributebytecountend//文件屬性統計