前言


前面借助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)
最后修改:2020 年 12 月 18 日
你的赞赏是我前进的动力