gpt4 book ai didi

python - Openmesh:如何修改网格面? (以及如何随机访问组件句柄?)

转载 作者:太空宇宙 更新时间:2023-11-03 14:35:08 24 4
gpt4 key购买 nike

我刚刚开始在 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);

上面给出了一个复杂边缘错误。我从 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

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

编辑2

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

mesh.delete_face(fh0)

Python 出现段错误并退出。

最佳答案

如果您想将面 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,您感兴趣的边缘的索引。

希望这有帮助,

查尔斯。

关于python - Openmesh:如何修改网格面? (以及如何随机访问组件句柄?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47007392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com