# GCTL Mesh 基类文档 ## 简介 `mesh.h` 定义了GCTL网格库的基础类 `base_mesh`,这是所有具体网格类型的基类。它提供了网格操作的基本接口和功能实现。 ## 类型定义 ### 网格类型 (mesh_type_e) ```cpp enum mesh_type_e { UNDEFINED, // 未定义网格 REGULAR_MESH, // 规则网格 LINEAR_MESH, // 线性网格 TRI_TET_MESH, // 三角形/四面体网格 REGULAR_MESH_SPH, // 球面规则网格 LINEAR_MESH_SPH, // 球面线性网格 TRI_TET_MESH_SPH, // 球面三角形/四面体网格 REGULAR_GRID, // 规则网格 }; ``` ### 网格维度 (mesh_dim_e) ```cpp enum mesh_dim_e { MESH_0D, // 0维网格 MESH_2D, // 2维网格 MESH_3D // 3维网格 }; ``` ## 主要API ### 基本操作 ```cpp void clear(); // 清除所有网格数据 bool initiated() const; // 检查网格是否已初始化 void show_info(); // 显示网格与数据信息 ``` ### 网格信息获取 ```cpp mesh_type_e get_meshtype() const; // 获取网格类型 mesh_dim_e get_meshdim() const; // 获取网格维度 int get_nodenum() const; // 获取顶点数量 int get_elenum() const; // 获取网格单元数量 int get_datanum() const; // 获取数据对象数量 ``` ### 网格属性设置 ```cpp std::string get_meshname() const; // 获取网格名称 void set_meshname(std::string in_name); // 设置网格名称 std::string get_meshinfo() const; // 获取网格说明信息 void set_meshinfo(std::string in_info); // 设置网格说明信息 ``` ### 数据操作 ```cpp // 添加网格数据(标量初始值) meshdata &add_data(mesh_data_type_e in_loctype, // 数据位置类型 mesh_data_value_e in_valtype, // 数据值类型 std::string name, // 数据名称 double init_val, // 初始值 bool if_output = true); // 是否可输出 // 添加网格数据(数组初始值) meshdata &add_data(mesh_data_type_e in_loctype, // 数据位置类型 std::string name, // 数据名称 const array &init_arr, // 初始值数组 bool if_output = true); // 是否可输出 // 获取数据对象 meshdata &get_data(std::string datname); // 删除数据对象 void remove_data(std::string datname); ``` ### 文件操作 ```cpp // 保存为Gmsh格式(含数据) void save_gmsh_withdata(std::string filename, // 文件名 output_type_e out_mode, // 输出模式 index_packed_e packed = Packed); // 索引打包方式 // 保存为Gmsh格式(指定数据) void save_gmsh_withdata(std::string filename, // 文件名 std::string datname, // 数据名称 output_type_e out_mode, // 输出模式 index_packed_e packed = Packed); // 索引打包方式 // 纯虚函数 - 需要由派生类实现 virtual void save_gmsh(std::string filename, index_packed_e packed = Packed) = 0; virtual void load_binary(std::string filename) = 0; virtual void save_binary(std::string filename) = 0; ``` ## 使用示例 ```cpp // 创建网格对象(以regular_grid为例) gctl::regular_grid rgd; rgd.init("grid-1", "test grid", 4, 4, 0.0, 0.0, 1.0, 1.0); // 添加数据 rgd.add_data(gctl::NodeData, gctl::Scalar, "temperature", 25.0); rgd.add_data(gctl::ElemData, gctl::Vector, "velocity", velocity_array); // 显示网格信息 rgd.show_info(); // 保存网格 rgd.save_gmsh_withdata("output.msh", gctl::OverWrite); ```