本文内容,为博主在网上看到资料总结整合而来
一、stl格式简介
.stl文件是在计算机图形应用系统,来表示封闭的面或者体,用来表示三角形网格的一种文件格式。为STereo Lithography的缩写,由3D Systems公司于1987年开发而来,利用三角片离散近似表示三维模型,近年来已经成为快速原型技术领域广泛应用的文件格式和接口标准。
一个stl文件坐标必须是正数,没有比例信息,单位是任意的。
二、stl文件格式
stl文件分为ASCII明码格式和二进制格式。
ASCII格式的stl结构如下:
1 solid filename.stl//文件路径及文件名字 2 facet normal x y x//三角片的外法向量 3 vertex x y z//第一个顶点 4 vertex x y z//第二个顶点 5 vertex x y z//第三个顶点 6 end loop 7 endfacet 8 . 9 . 10 . 11 endsolid
上图为我运行生成的stl文件的一个片段例子
一个三角片包含三角片的外法向量和按右手螺旋规则排列的三个顶点。
因为ASCII格式可能非常大,所以便存在了二进制的格式
二进制格式的stl结构如下:
1 UINT8//文件头 2 UINT32//三角片数量 3 foreach triangle 4 REAL32[3]//法线矢量 5 REAL32[3]//顶点一 6 REAL32[3]//顶点二 7 REAL32[3]//顶点三 8 UINT16//文件属性统计 9 end
三、.stl文件导出及显示工具
这里我利用vtk来写.stl文件,再利用MeshLab来打开文件进行显示
导出代码如下:
1 // VTK 2 ...... 3 #include"vtkSTLWriter.h" 4 5 int main(int argc, char *argv[]) 6 {//argc表示传入main函数的参数个数;argv0表示程序的名称,并且包含了程雪所在的完整路径 7 8 ....... 9 vtkSTLWriter *writer = vtkSTLWriter::New();//Stereo lithography files only contain triangles. If polygons with more than 3 vertices are present, only the first 3 vertices are written. 10 writer->SetInputConnection(skinStripper->GetOutputPort()); 11 writer->SetFileName("D:/DATAOUT/poly2procs.stl"); 12 writer->Update(); 13 writer->Write(); 14 15 system("pause"); 16 17 return 0; 18 }