STL两种格式:文本格式与二进制格式

您所在的位置:网站首页 如何编辑stl文件 STL两种格式:文本格式与二进制格式

STL两种格式:文本格式与二进制格式

2024-02-28 05:54| 来源: 网络整理| 查看: 265

STL格式

​ 一个StL(Stereolithography,光固化立体造型术的缩写)文件是 3 维表面几何的三角形表示。表面被细分或逻辑分解为一系列小三角形(面)。每个面由一个垂直方向(法线向量)和代表三角形顶点(角)的三个点描述。切片算法使用这些数据来确定制造商要构建的 3 维形状的横截面。

ASCII格式

StL 文件由一系列(方)面数据组成。每个面由单位法线(垂直于三角形且长度为 1.0 的线)和三个顶点(角)唯一标识。法线和每个顶点分别由三个坐标指定,因此每个面总共存储了 12 个数字。如图1所示。 在这里插入图片描述 图1

二进制格式

二进制STL文件用固定的字节数来给出三角面片的几何信息。文件起始的80个字节是文件头,用于存贮零件名;紧接着用 4 个字节的整数来描述模型的三角面片个数,后面逐个给出每一个三角面片的几何信息。每一个三角面片占用固定的50个字节,依次是3个4字节浮点数(角面片的法矢量)3个4字节浮点数(1个顶点的坐标)3个4字节浮点数(2个顶点的坐标)3个4字节浮点数(3个顶点的坐标)个三角面片的最后2个字节用来描述三角面片的属性信息。一个完整二进制STL文件的大小为三角形面片数乘以 50再加上84个字节,总共134个字节。 在这里插入图片描述 图2 或者写成如下形式: UINT8[80]//Header//文件头 UINT32//Numberoftriangles//三角面片数量 //foreachtriangle(每个三角面片中) REAL32[3]//Normalvector//法线矢量 REAL32[3]//Vertex1//顶点1坐标 REAL32[3]//Vertex2//顶点2坐标 REAL32[3]//Vertex3//顶点3坐标 UINT16//Attributebytecountend//文件属性统计 在编程中遇到有限元前处理建模时候,可以实现模型中SURFACE的面输出为标准STL格式。 在这里插入图片描述图3

这里是引用“STL文件在医学软件开发中的应用”

FACET法线向量的求取

在这里插入图片描述为了求解一个三角形 Δ p 0 p 1 p 2 \Delta \mathbf{p}_{0} \mathbf{p}_{1} \mathbf{p}_{2} Δp0​p1​p2​ 的平面法线,我们必须先计算该三角形边上的两个向量 : u = p 1 − p 0 \mathbf{u}=\mathbf{p}_{1}-\mathbf{p}_{0} u=p1​−p0​ v = p 2 − p 0 \mathbf{v}=\mathbf{p}_{2}-\mathbf{p}_{0} v=p2​−p0​ 然后求得平面法线为: n = u × v ∥ u × v ∥ \mathbf{n}=\frac{\mathbf{u} \times \mathbf{v}}{\|\mathbf{u} \times \mathbf{v}\|} n=∥u×v∥u×v​ 1.思路 : 1)e0和e1两个向量叉乘得到垂直于该平面的法线 2)对法线向量单位化 2.MATLAB代码 P0=[x0,y0,z0] P1=[x1,y1,z1] P2=[x2,y2,z2] normal = cross(P0-P1, P0-P2); normal = normal / norm( normal ); % just to make it unit length figure quiver3(P0(1), P0(2), P0(3), normal(1), normal(2), normal(3)); axis equal disp(dot((P0 - P1, normal)); disp(dot((P0 - P2, normal));

PYTHON语言读取STL二进制格式文件

1.代码1 #! /usr/bin/env python 3 with open(“stlbinaryfile.stl”, “rb”) as fichier : #! /usr/bin/env python3 with open(“stlbinaryfile.stl”, “rb”) as fichier : head=fichier. read(80) nbtriangles=fichier.read(4) print(nbtriangles) head=fichier.read (80) nbtriangles=fichier. read (4) print(nbtriangles) 2.代码2 import stl with open (‘kiki.stl’, ‘rb’) as f: import stl with open(‘kiki.stl’, ‘rb’) as f : kiki = stl.read_binary_file(f) print(kiki.facets[0]. normal, kiki.facets[0].vertices) print(kiki.name) kiki = stl.read_binary_file(f) print(kiki.facets[0]. normal, kiki.facets[0].vertices) print(kiki.name) 3.代码3 import numpy from stl import mesh your_mesh = mesh.Mesh.from_file(‘cube.stl’) print(‘法线’, your_mesh.normals) print(‘点’, your_mesh.points) print(‘v0表示三角面第一个点’, your_mesh.v0) print(‘x表示所有点的x坐标’, your_mesh.x) 4.实例 import vtkplotlib as vpl from stl.mesh import Mesh path = “your path here.stl” mesh = Mesh.from_file(path) vpl.mesh_plot(mesh) vpl.show() #If you want the brick to be blue you can replace the mesh_plot with vpl.mesh_plot(mesh, color=“blue”) 在这里插入图片描述

这里是引用"python读取stl文件三维坐标,在Python中从STL文件渲染2D图像"

结论

STL格式在建模过程中的应用比较有潜力,研究这种格式的模型文件读取具有重要意义。PYTHON在编程之前需要安装STL库(pip install stl)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3