Skip to main content

STL vs. STP/STEP (B-rep)

· 6 min read
mP2Sse

STL

STL 文件格式(标准三角语言)是一种简单的 3D 格式,用于存储和传输 3D 模型。该格式是在 80 年代设计的,但至今仍在使用,并且与许多现代替代格式一样流行,例如 3MF 。 STL 格式是一个简单的三角形列表,每个三角形由代表三角形的 3 个顶点、3D 空间中的位置以及指定其方向的 3 个法线组成。

STL 格式的简单性意味着它可以被大多数 3D 应用程序读取,并且该格式已成为某种标准格式 3D 打印。

对于 STL 文件来说,有两种基本的存储格式:文本和二进制。

文本

顾名思义,STL 文本格式以人类可读的文本格式存储 3D 几何图形。该格式存储有关 3D 模型中每个面(也称为三角形)的信息,包括其顶点位置和法线。包含六个三角形的 STL 文件示例如下:

solid ascii
facet normal 0.000000e+000 0.000000e+000 -1.000000e+000
outer loop
vertex 7.071068e+000 -7.071068e+000 0.000000e+000
vertex -7.071068e+000 -7.071068e+000 0.000000e+000
vertex 7.071068e+000 7.071068e+000 0.000000e+000
endloop
endfacet
facet normal -0.000000e+000 0.000000e+000 -7.071068e-001
outer loop
vertex 7.071068e+000 7.071068e+000 0.000000e+000
vertex -7.071068e+000 -7.071068e+000 0.000000e+000
vertex -7.071068e+000 7.071068e+000 0.000000e+000
endloop
endfacet
facet normal 0.000000e+000 -5.656855e-001 2.000000e-001
outer loop
vertex 0.000000e+000 0.000000e+000 2.000000e+001
vertex -7.071068e+000 -7.071068e+000 0.000000e+000
vertex 7.071068e+000 -7.071068e+000 0.000000e+000
endloop
endfacet
facet normal -5.656855e-001 0.000000e+000 2.000000e-001
outer loop
vertex 0.000000e+000 0.000000e+000 2.000000e+001
vertex -7.071068e+000 7.071068e+000 0.000000e+000
vertex -7.071068e+000 -7.071068e+000 0.000000e+000
endloop
endfacet
facet normal 0.000000e+000 5.656855e-001 2.000000e-001
outer loop
vertex 0.000000e+000 0.000000e+000 2.000000e+001
vertex 7.071068e+000 7.071068e+000 0.000000e+000
vertex -7.071068e+000 7.071068e+000 0.000000e+000
endloop
endfacet
facet normal 5.656855e-001 0.000000e+000 2.000000e-001
outer loop
vertex 0.000000e+000 0.000000e+000 2.000000e+001
vertex 7.071068e+000 -7.071068e+000 0.000000e+000
vertex 7.071068e+000 7.071068e+000 0.000000e+000
endloop
endfacet
endsolid

二进制

二进制 STL 文件格式的结构相对简单。该文件以 80 字节的标头块开始,通常包含用于创建 STL 的 3D 软件工具或程序的 ASCII 文本。接下来是一个 32 位整数字段,其中包含 STL 文件中三角形的数量。接下来是 3D 模型中按顺序找到的每个三角形的详细信息。每个三角形存储的信息如下:

  • 法线三角形 - X、Y、Z 的 3 x 32 位浮点值
  • 三角形顶点 1 - 3 x X、Y、Z 的 32 位浮点值
  • 三角形顶点 2 - 3 x X、Y、Z 的 32 位浮点值
  • 三角形顶点 3 - X、Y、Z 的 3 x 32 位浮点值
  • 属性 - 16 位整数(未使用)

从上述字段可以看出,STL 格式没有任何范围来存储与我们的 STL 工具读入的 3D 模型相关的材质或纹理信息。确实,多年来,一些供应商已经使用 16 位属性字段作为存储有关各个三角形的有限颜色信息的手段;然而,这些从未标准化。我们的 STL 转换工具确实支持创建支持这些有限颜色格式的 STL 文件;但是,用于打开 STL 文件的软件可能无法正确渲染模型。如果您对专为 3D 打印领域设计的现代紧凑 3D 模型格式感兴趣,请参阅专门为此任务设计的 3MF 模型格式。

STP

STP 格式(也称为 STEP)是一种常见的 3D 文件格式,用于计算机辅助设计(计算机辅助设计)圈并用于存储复杂的 3D 建模标准格式的数据可以在 CAD 和 3D 建模应用程序之间轻松可靠地交换。

该格式首次出现于 20 世纪 90 年代,其目的不仅是标准化 3D 内容,还标准化特定于工业用途的附加数据,例如公差和材料。 STP 文件标准被称为 ISO-10303-21 标准,多年来经过修订以支持更多功能。

STP 文件中的 3D 数据使用由面、边和其他几何数据组成的形状组合以文本形式表示。如前所述,STP 格式旨在成为 3D 模型交换的标准,这意味着它在 CAD 和 3D 建模应用程序以及文件转换软件中得到广泛支持。

ISO-10303-21;
HEADER;
/* Generated by software containing ST-Developer
* from STEP Tools, Inc. (www.steptools.com)
*/

FILE_DESCRIPTION(
/* description */ (''),
/* implementation_level */ '2;1');

FILE_NAME(
/* name */ 'c5.stp',
/* time_stamp */ '2024-02-05T06:35:35+00:00',
/* author */ (''),
/* organization */ (''),

/* authorisation */ '');

FILE_SCHEMA (('AUTOMOTIVE_DESIGN { 1 0 10303 214 3 1 1 }'));
ENDSEC;

DATA;
#10=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#22544,#11);
#11=ADVANCED_BREP_SHAPE_REPRESENTATION($,(#11436),#22538);
#12=ORIENTED_CLOSED_SHELL($,*,#11433,.F.);
#13=ORIENTED_CLOSED_SHELL($,*,#11434,.F.);
#14=ORIENTED_CLOSED_SHELL($,*,#11435,.F.);
#15=CONICAL_SURFACE($,#11713,0.59315625,0.759762754875772);
#16=CONICAL_SURFACE($,#11720,0.59315625,0.759762754875772);
#17=SPHERICAL_SURFACE($,#11545,0.01265625);
#18=SPHERICAL_SURFACE($,#11591,0.050625);
#19=SPHERICAL_SURFACE($,#11689,0.050625);
#20=SPHERICAL_SURFACE($,#11742,0.050625);
#21=TOROIDAL_SURFACE($,#12201,0.3290625,0.0759375);
#22=TOROIDAL_SURFACE($,#12206,0.4809375,0.0759375);
#23=TOROIDAL_SURFACE($,#12211,0.1771875,0.0759375);
#24=(
BOUNDED_SURFACE()
B_SPLINE_SURFACE(2,2,((#16169,#16170,#16171,#16172,#16173,#16174,#16175,
#16176,#16177),(#16178,#16179,#16180,#16181,#16182,#16183,#16184,#16185,
#16186),(#16187,#16188,#16189,#16190,#16191,#16192,#16193,#16194,#16195),
(#16196,#16197,#16198,#16199,#16200,#16201,#16202,#16203,#16204),(#16205,
#16206,#16207,#16208,#16209,#16210,#16211,#16212,#16213),(#16214,#16215,
#16216,#16217,#16218,#16219,#16220,#16221,#16222),(#16223,#16224,#16225,
#16226,#16227,#16228,#16229,#16230,#16231),(#16232,#16233,#16234,#16235,
#16236,#16237,#16238,#16239,#16240),(#16241,#16242,#16243,#16244,#16245,
#16246,#16247,#16248,#16249)),.UNSPECIFIED.,.T.,.T.,.F.)
B_SPLINE_SURFACE_WITH_KNOTS((3,2,2,2,3),(3,2,2,2,3),(-3.14159265358979,
-1.5707963267949,0.,1.5707963267949,3.14159265358979),(0.,1.5707963267949,
3.14159265358979,4.71238898038469,6.28318530717959),.UNSPECIFIED.)
GEOMETRIC_REPRESENTATION_ITEM()
RATIONAL_B_SPLINE_SURFACE(((1.,0.707106781186548,1.,0.707106781186548,1.,
0.707106781186548,1.,0.707106781186548,1.),(0.707106781186548,0.500000000000001,
0.707106781186548,0.500000000000001,0.707106781186548,0.500000000000001,
0.707106781186548,0.500000000000001,0.707106781186548),(1.,0.707106781186548,
1.,0.707106781186548,1.,0.707106781186548,1.,0.707106781186548,1.),(0.707106781186548,
0.500000000000001,0.707106781186548,0.500000000000001,0.707106781186548,
0.500000000000001,0.707106781186548,0.500000000000001,0.707106781186548),
(1.,0.707106781186548,1.,0.707106781186548,1.,0.707106781186548,1.,0.707106781186548,
1.),(0.707106781186547,0.5,0.707106781186547,0.5,0.707106781186547,0.5,
0.707106781186547,0.5,0.707106781186547),(1.,0.707106781186548,1.,0.707106781186548,
1.,0.707106781186548,1.,0.707106781186548,1.),(0.707106781186548,0.5,0.707106781186548,
0.5,0.707106781186548,0.5,0.707106781186548,0.5,0.707106781186548),(1.,
0.707106781186548,1.,0.707106781186548,1.,0.707106781186548,1.,0.707106781186548,
1.)))
REPRESENTATION_ITEM($)
SURFACE()
);

由于基于文本的格式,将复杂的 3D 数据保存为该格式时,STP 文件可能会变得非常大。 STP 文件也可能需要一些时间才能加载到编辑软件中,因此在编辑这些文件时请留出更多时间。

Reference

  1. STP (STEP-File)
  2. STL (Standard Triangle Language)