使用修剪网格进行网格分割

问题描述 投票:0回答:1

有没有办法使用修剪网格将顶点子集及其关联面转换为网格?是否像获取顶点和面的子集,然后直接创建网格然后保存一样简单?还是还有其他步骤?

我已经有了使用修剪网格查找顶点和面子集的代码,但我不确定是否创建新的网格部分。

我的想法的一般伪代码如下。

#Load the mesh
mesh = load(cube.obj)

#Get the total vertices and faces
vertices = mesh.vertices
faces = mesh.faces

#Code to get sub set of vertices and associated faces
subVertices = vertSubsetGenerator(vertices)
subFaces = faceSubsetGenerator(vertices, faces)

#Create and save mesh
meshOut = createMesh(subVertices, subFaces)
save(meshOut)
python 3d mesh trimesh
1个回答
0
投票

您在这里尝试做的是返回原始网格的子集(原始标题中的术语分段有点误导)。 Trimesh 确实为此提供了内置解决方案:

import trimesh

# Cube mesh 
vertices = [
    [0., 0., 0.], [0., 0., 1.], [0., 1., 0.], [0., 1., 1.],
    [1., 0., 0.], [1., 0., 1.], [1., 1., 0.], [1., 1., 1.]
]
faces = [
    [0, 6, 4], [0, 2, 6], [0, 3, 2], [0, 1, 3],
    [2, 7, 6], [2, 3, 7], [4, 6, 7], [4, 7, 5],
    [0, 4, 5], [0, 5, 1], [1, 5, 7], [1, 7, 3]
]
mesh = trimesh.Trimesh(vertices, faces)
mesh.show()

# Submesh
subfaces = [2, 3]
submesh = mesh.submesh([subfaces], append=True)
submesh.show()

Trimesh 文档中所述,它需要您希望保留的面的索引。

请记住,您的

subVertices
subFaces
是链接的。如果“删除”一个顶点,则还必须删除包含该顶点的面(反之则不一定成立)。换句话说,您必须使用
subFaces
或推断出包含您的
subVertices
的面。

干杯!

© www.soinside.com 2019 - 2024. All rights reserved.