OpenMesh中split_edge操作后如何获取新边及边的朝向?
OpenMesh split_edge分割后获取新边及朝向说明
获取新生成的边段
OpenMesh的split_edge函数虽然不直接返回新边,但它会返回新插入顶点的VertexHandle,我们可以通过这个顶点结合原边的两个顶点来定位新边:
- 先记录原边的两个顶点:
EdgeHandle orig_edge = ...; // 目标分割边 HalfedgeHandle h = mesh.halfedge_handle(orig_edge, 0); VertexHandle v_start = mesh.from_vertex_handle(h); VertexHandle v_end = mesh.to_vertex_handle(h); - 执行分割操作,得到中点的顶点句柄:
VertexHandle v_mid = mesh.split_edge(orig_edge); - 通过顶点配对查找新边:
也可以遍历中点EdgeHandle edge1 = mesh.find_edge(v_start, v_mid); EdgeHandle edge2 = mesh.find_edge(v_mid, v_end);v_mid的所有邻边,筛选出连接v_start和v_end的两条边——这种方法在顶点邻边数量较少时更稳妥,毕竟分割后必然存在这两条关联边。
新边的朝向
分割后的两条新边会延续原边的初始方向逻辑:
- 第一条新边(原起点→中点)的方向和原边的初始半边方向完全一致:原边的第一个半边(
halfedge_handle(orig_edge, 0))会被修改为指向中点,保持从原起点出发的方向。 - 第二条新边(中点→原终点)的方向是原边方向的自然延续,新增的半边会从中点指向原终点,和原边的初始朝向保持顺向传递。
简单总结:如果原边初始朝向是A→B,分割后会得到A→M和M→B两条新边,二者的朝向都和原边初始朝向保持一致的顺向逻辑。
内容的提问来源于stack exchange,提问作者allo
相关产品推荐
相关产品推荐

