我在 python3 上编写的简单代码参考:https ://www.fabbers.com/tech/STL_Format#Sct_binary
import struct
def ffb(x):
return str(round(struct.unpack('f',x)[0],6))
f=open('3dtest.stl','rb')
print(f.read(84))
temp=''
for j in range(4):
temp='facet normal: '
for i in range(3):
temp=temp+ffb(f.read(4))+' '
print (temp)
for n in range(3):
temp='vertex: '
for i in range(3):
temp=temp+ffb(f.read(4))+' '
print (temp)
attr=f.read(2)
print('###################################')
f.close()
temp=temp[:-1]
print(temp)
结果:
b'MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH\n\x0c\x00\x00\x00'
facet normal: 0.0 1.0 0.0
vertex: 12.671906 11.296659 0.0
vertex: -11.984282 11.296659 0.0
vertex: -11.984282 11.296659 10.0
###################################
facet normal: 0.0 1.0 -0.0
vertex: 12.671906 11.296659 0.0
vertex: -11.984282 11.296659 10.0
vertex: 12.671906 11.296659 10.0
###################################
facet normal: 1.0 0.0 0.0
vertex: 12.671906 -10.8055 0.0
vertex: 12.671906 11.296659 0.0
vertex: 12.671906 11.296659 10.0
###################################
facet normal: 1.0 0.0 0.0
vertex: 12.671906 -10.8055 0.0
vertex: 12.671906 11.296659 10.0
vertex: 12.671906 -10.8055 10.0
###################################
通过 numpy-stl 将相同的二进制 STL 转换为文本:
solid MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH
facet normal 0,000000 246,561890 0,000000
outer loop3
vertex 12,671906 11,296659 0,000000
vertex -11,984282 11,296659 0,000000
vertex -11,984282 11,296659 10,000000
endloop
endfacet
facet normal 0,000000 246,561890 -0,000000
outer loop
vertex 12,671906 11,296659 0,000000
vertex -11,984282 11,296659 10,000000
vertex 12,671906 11,296659 10,000000
endloop
endfacet
facet normal 221,021591 0,000000 0,000000
outer loop
vertex 12,671906 -10,805500 0,000000
vertex 12,671906 11,296659 0,000000
vertex 12,671906 11,296659 10,000000
endloop
endfacet
facet normal 221,021591 0,000000 0,000000
outer loop
vertex 12,671906 -10,805500 0,000000
vertex 12,671906 11,296659 10,000000
vertex 12,671906 -10,805500 10,000000
endloop
endfacet
numpy-stl 代码:
from stl import mesh
your_mesh = mesh.Mesh.from_file('3dtest.stl')
your_mesh.save('3dascii.stl',mod=stl.Mode.ASCII)
我建议您通过任何语言或渲染器将 3d 绘图放在循环中。将错误转发到 >/dev/null 并编辑文件以查看实时发生的情况。我认为这将是最好的研究。当然,在另一个窗口上检查各种几何形状的示例输出 stls 时。