STL(文件格式)

本页使用了标题或全文手工转换,现处于中国大陆简体模式
求闻百科,共笔求闻
STL
STL vs CAD 格式的例子。STL提供的是小面凑出来的近似面(黑实线),CAD要的是曲面(红虚线)。CAD常用NURBS来达到近似的曲面。
扩展名.stl
开发者3D Systems软件公司
格式类型立体光刻

STLSTereo Lithography,“立体光刻”)是由3D Systems软件公司创立、原本用于立体光刻电脑辅助设计软件文件格式[1][2][3]

许多套装软件支持这种格式,它被广泛用于快速成型3D打印电脑辅助制造(CAM)。[4]STL文件仅描述三维物体的表面几何形状,没有颜色材质贴图或其它常见三维模型的属性。STL格式有文字二进码两种型式。二进码型式因较简洁而较常见。[5]

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

文字(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
    endloop
endfacet

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

endsolid name

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

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

二进码 STL

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

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

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

UINT8[80] – Header
UINT32 – Number of triangles

foreach triangle REAL32[3] – Normal vector REAL32[3] – Vertex 1 REAL32[3] – Vertex 2 REAL32[3] – Vertex 3 UINT16 – Attribute byte count end

二进码STL的颜色

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

  • VisCAMSolidView软件用每个三角形后的2个“属性字符数”存放15比特RGB色码:
    • 比特 0到 4是蓝的强度(0~31)。
    • 比特 5到 9是绿的强度(0~31)。
    • 比特10到14是红的强度(0~31)。
    • 比特15是1表颜色有效;0表无效(同正常的STL档)。
  • Materialise Magics软件用开头的80位档头表示模型整体颜色。若有使用颜色,档头某处会是文字字符串"COLOR="接着4字节RGBA(透明度),值域为0–255。这是整个模型的颜色,每个小面可以另外指定。这软件还可以指定更详细的表面特性,即物质(电脑图形)。在"COLOR=RGBA"后可加上ASCII字符串",MATERIAL=",接着3颜色(3×4位):

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

  • 比特 0到 4是红的强度(0~31)。
  • 比特 5到 9是绿的强度(0~31)。
  • 比特10到14是蓝的强度(0~31)。
  • 比特15是0表用小面颜色;1表用模型颜色。

上述两种小面颜色资讯中,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的软件

参见

  • Additive Manufacturing文件格式 (AMF), 一个自然支持颜色、多种物质和星座的较新标准。
  • PLY, 一个比多数立体光刻规格提供更弹性的格式。
  • Wavefront .obj文件, 一个副档名为.obj的3D几何定义文件格式。
  • X3D, 免专利费的三维电脑图形ISO标准。

参考资料

  1. StereoLithography Interface Specification, 3D Systems, Inc., July 1988 
  2. StereoLithography Interface Specification, 3D Systems, Inc., October 1989 
  3. SLC File Specification, 3D Systems, Inc., 1994 
  4. Chua, C. K; Leong, K. F.; Lim, C. S., Rapid Prototyping: Principles and Applications 2nd, World Scientific Publishing Co, 2003, ISBN 981-238-117-1 第6章,快速原型格式(Rapid Prototyping Formats)。第237页6.2节STL档问题、6.4节STL档修复:“STL (STeroLithography)档,如事实上的标准,已被广泛(即使不是全部)使用在快速原型系统。("The STL (STeroLithography) file, as the de facto standard, has been used in many, if not all, rapid prototyping systems.")”
  5. 5.0 5.1 5.2 Burns, Marshall. Automated Fabrication. Prentice Hall. 1993. ISBN 978-0-13-119462-5. 
  6. Fabbers.com, The StL Format: Standard Data Format for Fabbers, reprinted from Marshall Burns, Automated Fabrication, http://www.ennex.com/~fabbers/StL.asp 描述:“所代表的对象必须位于全正的卦限。换言之,所有的顶点坐标必须是正数(非负且非零)。STL档不含任何尺度信息;计量单位为任意的。(The object represented must be located in the all-positive octant. In other words, all vertex coordinates must be positive-definite (nonnegative and nonzero) numbers. The StL file does not contain any scale information; the coordinates are in arbitrary units.)

外部链接