在半边上导航
- 假设我们有以下网状拓扑:
- 我们现在可以选择此网格的任意半边,然后提供两种可能的导航之一:
- 如果所选择的半边位于边界或换句话说不是与面相邻,我们现在可以使用next_halfedge_handle()或prev_halfedge_handle()沿着网格的边界(或洞)导航:
- 如果所选择的半边与面相邻,则我们可以沿着与该面相邻的所有半边导航。 换句话说,我们围绕着一张面的内半部分:
- 根据初始半边是否与面相邻,我们将导航网格的边界半边或沿着面的内半边:
网格边界
- 通常,OpenMesh还为边,顶点和面提供边界属性。 因此,使用OpenMesh :: PolyConnectivity :: is_boundary()测试即面是否是边界面非常简单。
- 您可以使用next_halfedge_handle()迭代边界。 如果你在一个边界上,下一个半边保证也是一个边界半边。
使用传入和传出的halfedges
- OpenMesh提供了大量的迭代器和循环器,可以轻松地迭代网格结构。 一个非常有用的迭代器是OpenMesh :: PolyConnectivity :: VertexIHalfedgeIter或OpenMesh :: PolyConnectivity :: VertexOHalfedgeIter,它们用于迭代顶点的所有传入/传出半边。根据下面的插图,最低端点的OpenMesh :: PolyConnectivity:V:ertexIHalfedgeIter将迭代所有传入的halfedges(蓝色),而OpenMesh :: PolyConnectivity :: OpenMesh :: PolyConnectivity :: VertexOHalfedgeIter将迭代 所有外向的半边(红色):
反向半边的使用
- 半边结构通过从一个无向边缘中创建两个有向边缘将每个边缘分成两个方向部分。 因此,对于每一个半边缘,都存在指向相反方向的对应物。 OpenMesh允许通过OpenMesh :: Concepts :: KernelT <FinalMeshItems> :: opposite_halfedge_handle()函数轻松导航对立的halfedges。 因此,在下面的插图中,对于蓝色半边的opposite_halfedge_handle()将返回红色半边:
起点与终点的获取
- 如果你有一个半边,你可以得到相邻顶点的to和from句柄。
- halfedges有一个方向。 因此,to顶点是相对半边的顶点,反之亦然。