首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从.stl文件中提取顶点、面

如何从.stl文件中提取顶点、面
EN

Stack Overflow用户
提问于 2021-02-19 00:43:11
回答 1查看 168关注 0票数 0

我目前正在进行一个项目,该项目使用PyQt5来使用opengl.GLViewWiget显示3D对象

我已经下载了一个.stl文件和一个PyQt5模块的基础

代码语言:javascript
复制
self.Widget3D = opengl.GLViewWidget(self.centralwidget)
self.Widget3D.setGeometry(QtCore.QRect(1000, 100, 351, 271))
self.Widget3D.setObjectName("Widget3D")

我有一个关于.STL文件的问题,我已经安装了numpy-stl并通读了它的文档,但还没有找到一种方法来解压它并与GLMeshItem一起使用,因为我找到了这个示例代码

代码语言:javascript
复制
#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部分

EN

回答 1

Stack Overflow用户

发布于 2021-08-08 16:23:22

下面是允许您从stl文件创建GLMeshItem的一些代码。这并不是您所要求的,因为我没有从stl中提取顶点和面。但实际上并不需要这样做;GLMeshItem构造函数可以接受一个Nx3x3顶点数组(其中N个三角面中的每一个都由三个len-3数组指定),这正是从文件加载stl时提供的内容。

代码语言:javascript
复制
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中找到所有唯一的向量,并找出哪些面包括哪些唯一的向量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66264283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档