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

如何在CGAL中正确加载MESH文件?解决仅读取节点问题

问题分析与解决方案

核心问题

你当前的代码只读取了顶点却丢失了单元数据,原因在于:

  • CGAL::build_triangulation_from_file仅负责构建底层三角剖分对象,没有针对C3t3的完整网格结构进行数据填充——C3t3除了三角剖分,还包含网格的拓扑关联、边界信息等额外数据,直接操作其内部triangulation()无法完整加载.mesh文件的所有内容。
  • 打开文件时使用了binary模式,但Medit格式的.mesh是文本格式,二进制模式会导致读取解析错误。

修正后的代码

直接使用CGAL为C3t3提供的专用读写函数,就能完整加载并保存网格数据:

#include <CGAL/C3t3.h>
#include <CGAL/IO/read_mesh.h>
#include <CGAL/IO/write_mesh.h>
#include <iostream>
#include <fstream>

int main() {
    CGAL::C3t3 c3t3;
    std::ifstream in("input.mesh");
    
    // 读取完整的网格数据到C3t3
    if (!CGAL::read_mesh(in, c3t3)) {
        std::cerr << "加载mesh文件失败" << std::endl;
        return 1;
    }

    std::ofstream out("output.mesh");
    // 将完整的C3t3数据写入文件
    if (!CGAL::write_mesh(out, c3t3)) {
        std::cerr << "写入mesh文件失败" << std::endl;
        return 1;
    }

    return 0;
}

关键说明

  • CGAL::read_mesh()和CGAL::write_mesh()是专门针对C3t3设计的IO函数,能完整解析Medit格式中的顶点、四面体单元、面以及边界标记等所有信息。
  • 取消了binary模式,改为默认的文本模式读取,符合.mesh文件的格式要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:20:28