如何使用matplotlib绘制.stl文件

zlhcx6iw  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(160)

我希望能够在Python中绘制一个stl文件。我可以在Matlab中很容易地做到这一点与此代码:

phacon = stlread("Spine_PhaconModel.stl");

hold on

figure = trisurf(phacon,'FaceColor',[0.6 0.6 0.6], 'Edgecolor','none','FaceLighting','gouraud','AmbientStrength', 0.15, 'MarkerEdgeColor',"r")

view([180, -1])

camlight('headlight');

material('dull');

但是当我尝试将代码更改为Python时,输出不是我想要的。我正在寻找的输出图类似于下面的附件:Spine ouput from matlab
我尝试使用mesh.Mesh.from_file等函数来获取数据,作为Matlab函数stlread()的等效函数,并使用plot_trisurf作为Matlab函数trisurf()的等效函数。我尝试的代码是:

fig = plt.figure()

ax = fig.gca(projection='3d')

stl_data = mesh.Mesh.from_file('Spine_PhaconModel.stl')

points = stl_data.points.reshape([-1, 3])

x = points[:,0]

y = points[:,1]

z = points[:,2]

collec = ax.plot_trisurf(x,y,z,linewidth=0.2)

然而,我不知道如何使它在视觉上看起来与第一个附加的图像相同。我得到的是这个Spine Phacon output using Python
我真的很感激你的帮助,非常感谢!

2ic8powd

2ic8powd1#

从文档中似乎你需要将其绘制为3D多边形,下面的答案显示了如何绘制它,下面是一个修改后的例子,因为文档已经过时,matplotlib似乎已经改变了。

from stl import mesh
from mpl_toolkits import mplot3d
import matplotlib.pyplot as plt

# Create a new plot
figure = plt.figure()
axes = figure.add_subplot(projection='3d')

# Load the STL files and add the vectors to the plot
your_mesh = mesh.Mesh.from_file(r'your_mesh_path.stl')
poly_collection = mplot3d.art3d.Poly3DCollection(your_mesh.vectors)
poly_collection.set_color((0.7,0.7,0.7))  # play with color
axes.add_collection3d(poly_collection)

# Show the plot to the screen
plt.show()

如果你想要的东西甚至比matlab绘制更好,那么你应该使用vtkplotlib,因为它使用GPU绘制,而不是matplotlib CPU光栅化,一个例子是在这个答案https://stackoverflow.com/a/57501486/15649230
编辑:我已经修改了上面的代码,删除了自动缩放,现在自己缩放,你用鼠标左键旋转,用鼠标中键移动,用鼠标右键缩放,这个答案指定了如何在代码https://stackoverflow.com/a/65017422/15649230中完成它

6l7fqoea

6l7fqoea2#

一个更好的方法是使用open3d包来3D可视化.stl文件。下面是如何做到这一点:

  • 安装
pip install open3d
  • 使用
import open3d as o3d

mesh = o3d.io.read_triangle_mesh("Body_Kylo_Ren_fixed.stl")
mesh = mesh.compute_vertex_normals()
o3d.visualization.draw_geometries([mesh], window_name="STL", left=1000, top=200, width=800, height=650)

输出:

您将看到一个完全可交互的3D stl文件。
查看open3d-documentation了解更多。

相关问题