STL(StereoLithography:立体光刻)文件是 3 维表面几何形状的三角形表示。 表面被逻辑地细分或分解为一系列小三角形(面)。 每个面由垂直方向和代表三角形顶点(角)的三个点来描述。 切片算法使用这些数据来确定制造商要构建的 3 维形状的横截面。
本文描述了 STL 文件格式的技术细节,主要面向有兴趣开发可读写 STL 文件的硬件或软件的人提供。大多数用户不需要关心,可以使用 3DConvert在线工具将其他格式的3D模型转换为STL格式。
推荐:用 NSDT设计器 快速搭建可编程3D场景。
1、STL格式规格
STL 文件由构面数据列表组成。 每个面由单位法线(垂直于三角形且长度为 1.0 的线)和三个顶点(角)唯一标识。 法线和每个顶点分别由三个坐标指定,因此每个面总共存储 12 个数字。
1.1 STL 文件中的面方向
图1:面的方向由单位法线的方向和顶点列出的顺序决定
面(facet)定义了 3 维对象的表面。 因此,每个面都是对象内部和外部之间边界的一部分。 面的方向(哪个方向是“外”,哪个方向路是“内”)以两种方式冗余指定,这两种方式必须一致。 首先,法线的方向是向外的。 其次,从外部观察对象时,顶点按逆时针顺序列出(右手定则)。 这些规则如图 1 所示。
1.2 顶点到顶点规则
每个三角形必须与其相邻的每个三角形共享两个顶点。 换句话说,一个三角形的顶点不能位于另一个三角形的一边上。 图 2 对此进行了说明。
图2:顶点到顶点规则。 左图显示了违反规则的情况。 正确的配置如右图所示
所代表的物体必须位于全正八分圆内。 换句话说,所有顶点坐标必须是正定(非负且非零)数。 STL文件不包含任何比例信息; 坐标采用任意单位。
官方 3D Systems StL 规范文档指出,有一项规定包含“建筑参数的特殊属性”,但没有给出包含此类属性的格式。 此外,该文件还指定了“三角形边的最小长度”和“三角形最大尺寸”的数据,但这些数字的含义是可疑的。
建议按 z 值升序对三角形进行排序,但不是必需的,以便优化切片程序的性能。
通常,STL 文件以扩展名“STL”保存,不区分大小写。 切片程序可能需要此扩展名,也可能允许指定不同的扩展名。
StL 标准包括两种数据格式:ASCII 和二进制。 下面分别进行描述。
2、STL ASCII 格式
ASCII 格式主要用于测试新的 CAD 界面。 其文件较大,不适合一般用途。
ASCII STL 文件的语法如下:
粗体表示关键字; 这些必须以小写形式出现。 注意:
- facet normal和 outer loop中都有空格, end开头的关键字都没有空格。
- 缩进必须有空格; 不允许使用 tab。
- 符号 {…}+表示大括号中的内容可以重复一次或多次。
- 斜体符号是要替换为用户指定值的变量。
- 平面法线和顶点线中的数值数据是单精度浮点数,例如 1.23456E+789。
- 面法线坐标可能有一个前导减号; 顶点坐标可能不会。
3、STL 二进制格式
二进制格式使用 IEEE 整数和浮点数值表示形式。
二进制 STL 文件的语法如下:
符号 {…}+ 表示大括号中的内容可以重复一次或多次。 属性语法未记录在正式规范中。 指定属性字节计数应设置为零。
原文链接:STL模型格式详解 — BimANt