You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取CGAL 6.0 Surface Mesh的边顶点索引对列表?

在CGAL 6.0 Surface Mesh中直接获取所有边的顶点索引对

你可以直接遍历Surface Mesh的所有边,无需从面提取后去重,具体实现如下:

核心思路

直接迭代网格的edges()集合,对每条边获取其关联的两个顶点索引,组成(id1, id2)形式的配对即可。如果需要无向边的唯一表示,可额外处理保证索引顺序。

代码示例

#include <CGAL/Surface_mesh.h>
#include <vector>
#include <utility>

// 定义Surface Mesh类型
typedef CGAL::Surface_mesh<CGAL::Point_3<CGAL::Simple_cartesian<double>>> Surface_mesh;
typedef Surface_mesh::Vertex_index Vertex_index;
typedef Surface_mesh::Edge_index Edge_index;

int main() {
    Surface_mesh m;
    // ... 填充网格数据(顶点、面等) ...

    std::vector<std::pair<unsigned int, unsigned int>> edge_vertex_pairs;

    // 遍历所有边
    for (Edge_index e : m.edges()) {
        // 获取边对应的半边,进而得到两个顶点
        auto he = m.halfedge(e, 0);
        Vertex_index v1 = m.source(he);
        Vertex_index v2 = m.target(he);
        
        // 存储顶点索引对
        edge_vertex_pairs.emplace_back(v1.idx(), v2.idx());

        // 可选:如果需要无向边的唯一存储,过滤掉反向边
        // if (v1.idx() < v2.idx()) {
        //     edge_vertex_pairs.emplace_back(v1.idx(), v2.idx());
        // }
    }

    // edge_vertex_pairs 即为目标列表
    return 0;
}

关键说明

  • m.edges()会返回网格中所有边的索引集合,直接遍历即可覆盖所有边
  • 每条边对应两个半边,通过m.halfedge(e, 0)取其中一个半边,再用source()和target()获取顶点
  • idx()方法返回顶点在网格中的整数索引,符合你需要的id形式
  • 若不需要区分边的方向,添加v1.idx() < v2.idx()的判断,可避免存储同一条边的双向表示

内容的提问来源于stack exchange,提问作者Satabol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 20:26:03