2

我刚开始在 Python 中使用 OpenMesh。我首先尝试制作一个由单个四边形组成的 PolyMesh。这就是我所做的:

from openmesh import *
mesh = PolyMesh();
vh0 = mesh.add_vertex(PolyMesh.Point(0,0,0));
vh1 = mesh.add_vertex(PolyMesh.Point(1,0,0));
vh2 = mesh.add_vertex(PolyMesh.Point(1,1,0));
vh3 = mesh.add_vertex(PolyMesh.Point(0,1,0));
vh_list = [vh0, vh1, vh2, vh3];
fh0 = mesh.add_face(vh_list);

这将创建一个四边形网格。然后,想改进四边形一次,我想尝试:

vh4 = mesh.add_vertex(PolyMesh.Point(0.5,0,0));
vh5 = mesh.add_vertex(PolyMesh.Point(0.5,1,0));
vh_list = [vh4, vh1, vh2, vh5];
fh1 = mesh.add_face(vh_list);

以上给了我一个complex edge错误。我从关于 SO 的其他问题中了解到,这是因为第二种情况下的 vh_list 没有定义第一面的一致方向。但是,我不想添加新面孔。也就是说,我认为该操作只会在 x = 0.5 处拆分 fh0,而不是在边缘索引 1 处创建附加到 fh0 的新面。有人可以谈谈如何做到这一点吗?我在文档中找不到“split_face”函数。

另外,如何在 Python 中访问特定边/网格组件的句柄?(我只找到了 C++ 的答案。)例如,我知道我可以遍历边缘,

for eh in mesh.edges():

但是,例如,我怎样才能直接获取边缘 2 的句柄并按如下方式使用它?

mesh.split_edge(eh,vh5)

谢谢!

编辑 1

split在 OpenMesh 文档中找到了该函数,但它需要一个顶点句柄作为输入,我可以在该顶点句柄处分割面部。在拆分后,它将网格转换为三角形网格。我不想要这个。我想在 x = 0.5 处将四边形分成两个四边形。谢谢你。

编辑 2

我尝试了另一种方法:首先删除 fh0,然后根据我想要的细化添加两个新面 fh0 和 fh1。我试着做

mesh.delete_face(fh0)

和 Python 段错误并退出。

4

1 回答 1

2

如果要将面拆分fh0为两个面,则应fh0先删除,然后再创建两个新面。这应该可以完成工作:

mesh.delete_face(fh0, deleted_isolated_vertices = False)
mesh.garbage_collection()

fh0 = mesh.add_face(vh0,vh4,vh5,vh3)
fh1 = mesh.add_face(vh4,vh1,vh2,vh5)

为了验证你得到了你想要的东西print(mesh.face_vertex_indices()),你应该得到两个列表,列出每个面的顶点索引。

此外,要访问已知的边缘句柄,您可以使用

eh = mesh.edge_handle(edge_index)

是,您感兴趣的边缘edge_indexint索引。

希望这可以帮助,

查尔斯。

于 2018-05-18T13:01:57.667 回答