我有stl文件和numpy-stl库。通过它自己,网格类有 .x,.y,.z 属性,可以绘制
my_mesh = mesh.Mesh.from_file(file)
x = my_mesh.x
y = my_mesh.y
z = my_mesh.z
mlab.points3d(x, y, z)
mlab.show()
字符串
结果是缓慢和相当糟糕的视觉效果
x1c 0d1x的数据
mesh也有 vectors 属性,但我不知道如何使用它。在matplotlib中,我可以用途:
figure = plt.figure()
axes = mplot3d.Axes3D(figure)
axes.add_collection3d(mplot3d.art3d.Poly3DCollection(my_mesh.vectors))
plt.show()
型
结果
的
是工作的财产,但非常缓慢,几乎无法使用。
有没有更好的方法来解决这个问题?
2条答案
按热度按时间4dbbbstv1#
Numpy-stl库以numpy数组的形式加载stl文件。'Vectors'属性是Nx 3x 3 numpy数组。简单地说,这个数组是形状的面的集合。因此N代表面的数量,3是定义图形面的点数,最终尺寸表示3D空间中的点坐标。
在大多数库中,要绘制3D形状,您需要定义两件事-点的坐标和点的索引以绘制图形的面。
numpy-stl简化了过程,因为所有的点都是唯一的,并且是有序的。这意味着定义面的点的索引只是顶点数组中的索引。
另外值得一提的是,你需要定义的不是点本身,而是x,y,z分别。同样的计数面。
基于此,我们冷写这个。我选择plotly,因为它快速和互动
字符串

显示:x1c 0d1x
图片来自默认的windows stl文件查看工具:
结果看起来是正确的。请忽略绘图顶部的蓝点和顶部环附近的孔,这是文件工件,并在两个变体中呈现。
c0vxltue2#
由于顶点被多次使用,所以首先在向量数组中找到唯一的点可能会有所帮助。下面是一个使用pandas删除重复项并定义三角形和open3d进行可视化的示例。
df.drop_duplicates
删除了重复的顶点,现在我们需要根据旧的顶点列表找到新的顶点列表的索引。我用pandasmerge
做到了这一点。字符串