我目前正在进行一个项目,该项目使用PyQt5来使用opengl.GLViewWiget显示3D对象
我已经下载了一个.stl文件和一个PyQt5模块的基础
self.Widget3D = opengl.GLViewWidget(self.centralwidget)
self.Widget3D.setGeometry(QtCore.QRect(1000, 100, 351, 271))
self.Widget3D.setObjectName("Widget3D")我有一个关于.STL文件的问题,我已经安装了numpy-stl并通读了它的文档,但还没有找到一种方法来解压它并与GLMeshItem一起使用,因为我找到了这个示例代码
#Extract vertex points and face faces from the STL file.
points, faces = self.loadSTL(filename)
meshdata = gl.MeshData(vertexes=points, faces=faces)
mesh = gl.GLMeshItem(meshdata=meshdata, smooth=True, drawFaces=False, drawEdges=True, edgeColor=(0, 1, 0, 1))
self.viewer.addItem(mesh)对于如何在这段代码中真正使用numpy-stl,我并不清楚self.loadSTL部分
发布于 2021-08-08 16:23:22
下面是允许您从stl文件创建GLMeshItem的一些代码。这并不是您所要求的,因为我没有从stl中提取顶点和面。但实际上并不需要这样做;GLMeshItem构造函数可以接受一个Nx3x3顶点数组(其中N个三角面中的每一个都由三个len-3数组指定),这正是从文件加载stl时提供的内容。
import numpy as np
import stl
my_mesh = stl.mesh.Mesh.from_file('my_stl_file.stl')
face_clr = np.array([[[1.0, 0.0, 0.0, 0.5]] * 3] * np.shape(my_mesh.vectors)[0])
mesh_item = gl.GLMeshItem(vertexes=my_mesh.vectors, # Nx3x3
faceColors=face_clr, # Nx3x4
drawEdges=True,
smooth=False)如果您确实想要分别提取顶点和面,我相信您只需对my_mesh.vectors进行一些手动操作。也就是说,在my_mesh.vectors中找到所有唯一的向量,并找出哪些面包括哪些唯一的向量。
https://stackoverflow.com/questions/66264283
复制相似问题