前言


前面借助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模型,不过要注意和上面的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)
Last modification:June 14th, 2020 at 10:29 pm