STL (STereoLithography, 立体光刻)是由3D Systems软件公司英语3D Systems创立、原本用于立体光刻计算机辅助设计软件的文件格式。它有一些事后诸葛的字头语英语backronym如“标准三角语言(Standard Triangle Language)”、“标准曲面细分语言(Standard Tessellation Language)”、“立体光刻语言(STereolithography Language)”和“(立体光刻曲面细分语言)”。许多套装软件支持这种格式,它被广泛用于快速成型、3D打印和计算机辅助制造(CAM)。STL文件仅描述三维物体的表面几何形状,没有颜色、材质贴图或其它常见三维模型的属性。STL格式有文字和二进码两种型式。二进码型式因较简洁而较常见。

STL档描述原始非结构化三角网格由表面单位法线和由右手定则排序的顶点用三维三角形笛卡儿座标系。STL座标必须是正数,没有尺度信息,且计量单位为任意的。

文字(ASCII)STL

文字STL档以下列来开始

solid name

name是个可有可无的字符串。不过,即使省略了name,solid后的空白必须存在。这列之后跟着任意数量的以下列方式表示的三角形:

facet normal ni nj nk    outer loop        vertex v1x v1y v1z        vertex v2x v2y v2z        vertex v3x v3y v3z    endloopendfacet

当中,每个nv都是正负-假数英语Significand-"e"-正负-幂数型式的浮点数,如"2.648000e-002"(注意:每个v都必须不是负数)。文件以

endsolid name

来结束。格式结构暗示其他可能的存在(如,不只一个loop定义同一个小面(facet英语Face (geometry)),或一个loop具有三个以上顶点)。然而在实践中,所有小面都是简单三角形。

除了数字或单词内以外,文件中任何地方都可使用空白字符英语White space character(空格、tab、换列)。"facet"和"normal"以及"outer"和"loop"之间的空白是必要的。

二进码 STL

由于文字STL档会非常大,因此有二进码版的STL。二进码STL档有个80字符的标头(内容通常都被忽略但绝不可用"solid"来开始!这样会使不少软件认为这是文字STL档)。接着是一个4字节无号整数英语Signedness,它表示这文件中的三角形数。再来是描述每个三角形的信息。之后就结束。

每个三角形以12个32位浮点数来描述:3个描述法线,接着三顶点的X/Y/Z座标─正如文字STL一样。之后是一个2字节无号整数(unsigned short),它代表“属性字符数”─在标准格式中它该是0,因为多数软件不明白其它事项。

虽然文件内没有说明,浮点数以little-endian的IEEE 754表示。

UINT8[80] – HeaderUINT32 – Number of triangles
foreach triangleREAL32[3] – Normal vectorREAL32[3] – Vertex 1REAL32[3] – Vertex 2REAL32[3] – Vertex 3UINT16 – Attribute byte countend

二进码STL的颜色

二进码STL至少有两种非标准方式来加上颜色信息:

先是漫反射的颜色,第二个是反射高光英语Specular highlight颜色,第三是环境光。物质设置优于颜色。每个小面的颜色是用三角形后的2个“属性字符数”以下列方式来存放:

上述两种小面颜色信息中,2比特里的红/绿/蓝顺序相反,因此,虽然这些格式容易兼容,反序表示并非如此!更糟的是:通用的STL读取器不能自动分别它们!也无法指定小面有透明度!因为没有α值!虽然对当前的快速原型机而言,这不重要。

小面法线

文字(ASCII)和二进码版的STL,小面法线必项是指向模型外部的单位向量。若设为(0,0,0),多数软件会自动以三角形三顶点的顺序根据右手定则计算法线。一些STL读取器(如:Art of Illusion的STL外挂)会检查小面的法线与它们用右手定则算出来的相符。若不同,会警告用户。有的软件会完算用自己根据右手定则算的。虽然可以不使用右手定则来计算法线的情况罕见,为了完全兼容,文件都应提供小面法线及正确指定顶点顺序。一个出名的例外是SolidWorks,它用法线当浓淡处理。

历史

立体光刻机是能用一系列切片来构建任何体积形状的3D打印机。这些机器需要一系列用凝固材料填充在封闭的2D轮廓中,最后再与各层熔合在一起。对这样的机器而言,自然的文件格式是一系列对应不同Z值的封闭的多边形。然而,因为改变层的厚度可能会得到更快(虽然不太精确)的构建,若能以可在必要水平切片封闭多面体来定义模型,会更好。

STL文件格式看似能用多边形来定义多面体,但在实用上它只被用过三角形。这表示ASCII协议的语法是多余的。

要能正确组成3D体,STL档表示的表面必须是封闭同相连的,且每个边都正好是二个三角形的一部分,且没有交叉。由于STL语法对此属性不严紧,应用程序能忽视其封闭性。

作为切片的该软件的封闭性仅事项只要三角形需要它以确保所得到的二维的多边形是封闭的。对切片三角形后须确保所得到的2D多边形是封关闭的软件而言,封闭性才会重要。这类软件有时会移动接近的顶点到同一位置,来清理小的差异。结果是不可预测的,但它往往足够。

其它使用领域

STL文件格式简单且容易输出。因此,许多计算机辅助设计(CAD)系统能输出STL文件格式。虽然输出简单产生,一些联结性信息却被丢弃!例如:A和B在CAD系统是相异、但座标恰好相同的两点。STL只输出点的座标,因此点A和B在STL就有同的表示。还存在其他的问题。

许多计算机辅助制造(CAM)系统必须是三角形化的模型。STL文件格式不是存储器和计算上最有效转换数据的方法,但STL常被CAM系统用于输入三角化的几何。这格式随手可得,所以CAM系统用它。为了使用数据,CAM系统可能要重建连接性。重建会导致误差。

STL也能在CAD、CAM和计算环境(如:Mathematica)间交换数据。

支持STL的软件

139001.net
问题反馈联系QQ:1215,也可发qq邮箱