stl文件格式

最近有用到stl格式的三维文件,学习收藏一下。

转自:http://www.cnblogs.com/ourshell/archive/2010/05/03/1726821.html

STL只能用来表示封闭的面或者体,stl文件有两种:一种是明码格式,另一种是二进制格式。 它的文件格式非常简单


明码:
solid name
facet normal ni nj nk
   outer loop
     vertex v1x v1y v1z
     vertex v2x v2y v2z
     vertex v3x v3y v3z'
   endloop
endfacet

endsolid name


二进制:

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

 

文件格式简单,只能描述三维物体的几何信息,不支持颜色材质等信息,是三维打印机(不知道是不是什么东西加上一个三维就听起来就能比较眩,比较有技术含量,三维打印机这名称总觉得不如快速成型机来的实在)支持的最常见文件格式。


转自:(严梽铭)基于VC++和OpenGL 的STL文件读取显示

STL的二进制格式
二进制STL文件用固定的字节数来给出三角面片的几何信息。文件起始的80个字节是文件头,用于存贮零件名;紧接着用 4 个字节的整数来描述模型的三角面片个数,后面逐个给出每个三角面片的几何信息。每个三角面片占用固定的50个字节,依次是3个4字节浮点数(角面片的法矢量)3个4字节浮点数(1个顶点的坐标)3个4字节浮点数(2个顶点的坐标)3个4字节浮点数(3个顶点的坐标)个三角面片的最后2个字节用来描述三角面片的属性信息。一个完整二进制STL文件的大小为三角形面片数乘以 50再加上84个字节,总共134个字节。

STL的ASCII文件格式
ASCII码格式的STL文件逐行给出三角面片的几何信息,每一行以1个或2个关键字开头。在STL文件中的三角面片的信息单元facet是一个带矢量方向的三角面片,STL三维模型就是由一系列这样的三角面片构成。整个STL文件的首行给出了文件路径及文件名。在一个 STL文件中,每一个facet由7 行数据组成,facet normal 是三角面片指向实体外部的法矢量坐标,outer loop说明随后的3行数据分别是三角面片的3个顶点坐标,3顶点沿指向实体外部的法矢量方向逆时针排列。

ASCII格式的STL 文件结构如下:
solid filename stl     //文件路径及文件名 
facet normal x y z     //三角面片法向量的3个分量值 
outer loop 
   vertex x y z        //三角面片第一个顶点坐标 
   vertex x y z        //三角面片第二个顶点坐标 
   vertex x y z        //三角面片第三个顶点坐标 
   endloop   
   endfacet            //完成一个三角面片定义 
   --- 
endsolid filename stl  //整个STL文件定义结束
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IGES文件是一种CAD文件格式,而STL文件是一种用于3D打印的文件格式。因此,IGES文件转换为STL文件需要进行一定的处理。以下是一个简单的Python代码示例: ```python import numpy as np def read_iges_file(file_path): vertices = [] with open(file_path, 'r') as f: for line in f: if line.startswith('G'): # G开头的行包含顶点信息 x, y, z = line.split()[1:4] vertices.append([float(x), float(y), float(z)]) return np.array(vertices) def write_stl_file(vertices, file_path): num_triangles = len(vertices) - 2 with open(file_path, 'w') as f: f.write('solid\n') for i in range(num_triangles): f.write('facet normal 0 0 0\n') f.write('outer loop\n') f.write(f'vertex {vertices[i][0]} {vertices[i][1]} {vertices[i][2]}\n') f.write(f'vertex {vertices[i+1][0]} {vertices[i+1][1]} {vertices[i+1][2]}\n') f.write(f'vertex {vertices[i+2][0]} {vertices[i+2][1]} {vertices[i+2][2]}\n') f.write('endloop\n') f.write('endfacet\n') f.write('endsolid\n') if __name__ == '__main__': iges_file_path = 'input.igs' stl_file_path = 'output.stl' vertices = read_iges_file(iges_file_path) write_stl_file(vertices, stl_file_path) ``` 这个代码假定IGES文件中的每一行包含一个顶点的坐标信息,以及一些可能用于描述曲面的其他信息。因此,它只提取以G开头的行,并将它们解析为顶点坐标。然后,它使用这些顶点生成STL文件中的三角形面片。 请注意,这个代码只是一个简单的示例,更复杂的IGES文件可能需要更复杂的处理。此外,STL文件的格式可能因3D打印机的不同而有所不同。因此,您可能需要根据您的具体需求进行自定义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值