The StL Format(StL 格式)
Fabber 的标准数据格式
背景
一个StL(StereoLithography)文件是 3 维表面几何的三角形表示。表面被细分或逻辑分解为一系列小三角形(面)。每个面由一个垂直方向(法线向量)和代表三角形顶点(角)的三个点描述。切片算法使用这些数据来确定制造商要构建的 3 维形状的横截面。
Format Specifications(格式规格)
StL 文件由一系列(方)面数据组成。每个面由单位法线(垂直于三角形且长度为 1.0 的线)和三个顶点(角)唯一标识。法线和每个顶点分别由三个坐标指定,因此每个面总共存储了 12 个数字。
Facet orientation(面方向)。定义了 3 维对象的表面。因此,每个面都是对象内部和外部之间边界的一部分。面的方向(哪条路“out”,哪条路“in”)以两种必须一致的方式冗余指定。首先,法线方向是向外的;其次,当从外面看对象时,顶点是按逆时针顺序列出的(右手法则),这些规则是在图1中示出。
小平面的方向由单位法线的方向和顶点的列出顺序决定。
Vertex-to-vertex rule(顶点到顶点规则)。每个三角形必须与其相邻的每个三角形共享两个顶点。换句话说,一个三角形的顶点不能位于另一个三角形的边上。如图 2 所示。
顶点到顶点规则。左图显示违反规则。正确的配置显示在右侧。
表示的对象必须位于全正八分圆中。换句话说,所有顶点坐标必须是正定(非负和非零)数。StL 文件不包含任何比例信息;坐标是任意单位。
官方的 3D Systems StL 规范文档指出,有一项规定包含“建筑参数的特殊属性”(special attributes for building parameters),但没有给出包含这些属性的格式。此外,该文件还指定了“三角形边的最小长度”(minimum length of triangle side)和“三角形的最大尺寸”(maximum triangle size)的数据,但这些数字的含义令人怀疑。(但这些数字的含义还有待揣摩)
建议按 z 值升序对三角形进行排序,但不是必需的,以优化切片程序的性能。
通常,StL 文件以扩展名“StL”保存,不区分大小写。切片程序可能需要此扩展名,也可能允许指定不同的扩展名。
StL 标准包括两种数据格式,ASCII 和二进制。这些将在下面单独描述。
StL ASCII Format(stl ASCII格式)
ASCII 格式主要用于测试新的 CAD 界面。其文件的大尺寸使其不适合一般用途。
ASCII StL 文件的语法如下:
粗体表示关键字;些必须以小写形式出现。请注意,“facet normal”和“outer loop”中有一个空格,而任何以“end”开头的关键字中都没有空格。缩进必须有空格;不允许使用标签。符号“{…}+”表示大括号中的内容可以重复一次或多次。斜体符号是将被用户指定的值替换的变量。facet normal和vertex中的数值数据是单精度浮点数,例如,1.23456E+789。一个facet normal坐标可能有一个前导减号;vertex坐标可能不是。
StL Binary Format(stl二进制格式)
二进制格式使用 IEEE 整数和浮点数字表示。
二进制 StL 文件的语法如下:
符号“{…}+”表示大括号中的内容可以重复一次或多次。正式规范中没有记录属性语法。指定属性字节计数应设置为零。