前言
前面借助vtk库实现读取stl模型,不过这有点杀鸡牛刀了,因为stl模型本身并不复杂,参考这篇文章。自己手写一个读取stl的程序也很简单,但我就是懒得写怎么办

stl库
其实前面已经尝试过用这个库了,但是当时总是报错。这个库还有个官方文档,之所以报错是因为这个库太老了,也没人维护。但知道了读取stl的原理后就好办了,把源码修改几处就可以在py3环境下使用了,以下是测试代码 。
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)
其实修改也很简单,把下面后面的strip去掉后,再将两处xrange改成range就行了。
# return struct.unpack('80s', bytes)[0].strip('\0')
return struct.unpack('80s', bytes)[0]
numpy-stl库
最好用的东西当然得放最后面,这个库依赖于numpy,功能丰富,可读取、修改、保存stl模型,不过要注意的是这里import的包名也是stl,和上面的包名是一样的,要先卸载上面的stl包再安装numpy-stl。
官方文档:https://pythonhosted.org/numpy-stl/usage.html
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)
8 条评论
可以啊,学到了
那个法线出来的数据为什么奇奇怪怪的(´இ皿இ`)
请问stl模块找不到mesh 怎么回事
大哥牛逼学到了
最后一个numpy打开stl 注意和上面的stl库名字似乎是冲突 这句话是什么意思啊 -,-
stl库和numpy-stl库import时库名是相同的,不做修改的话只能用一个
运行的时候是mesh报错 不能引用mesh from stl
所以说只能安装一个