#include <set>
#include <gmsh.h>
int main(int argc, char** argv)
{
gmsh::initialize(); // gmsh 初始化
gmsh::model::add("t1"); // add 增加一个 叫 t1 model
double lc = 1e-2;
// 创建 [0, 1] X [0, 1] 的正方形区域
// 创建矩形区域的四个顶点
gmsh::model::geo::addPoint(0, 0, 0, lc, 1); // x, y, z, meshSize, tag = 1
gmsh::model::geo::addPoint(1, 0, 0, lc, 2); // x, y, z, meshSize, tag = 2
gmsh::model::geo::addPoint(1, 1, 0, lc, 3); // x, y, z, meshSize, tag = 3
gmsh::model::geo::addPoint(0, 1, 0, lc, 4); // x, y, z, meshSize, tag = 4
// 创建边
gmsh::model::geo::addLine(1, 2, 1); // 1 号边 [1, 2]
gmsh::model::geo::addLine(2, 3, 2); // 2 号边 [3, 2]
gmsh::model::geo::addLine(3, 4, 3); // 3 号边 [3, 4]
gmsh::model::geo::addLine(4, 1, 4); // 4 号边 [4, 1]
// 创建 surface 实体
gmsh::model::geo::addCurveLoop({ 4, 1, 2, 3 }, 1); // addCurveLoop 函数用于定义曲线的循环,以便后续生成曲面。
// 其中 4 1 2 3 // 如果第二条边定义为 3, 2, 节点顺序, 则 4 1 -2 3
gmsh::model::geo::addPlaneSurface({ 1 }, 1); // {1} 闭合曲面的集合 1 号曲面,标记为 tag =1
// 同步几何模型
gmsh::model::geo::synchronize();
// 创建物理组并分配标签
gmsh::model::addPhysicalGroup(1, { 1, 2, 4 }, 5); // 1 维物理组,包括曲线 1、2 和 4,标签为 5 // 1 2 4 三条边 tag= 5
gmsh::model::addPhysicalGroup(2, { 1 }, -1, "My surface"); // 2 维物理组,包括面 1,标签为 -1,名称为 "My surface"; // 将面 1 tag = -1
gmsh::model::mesh::generate(2); // 生成二维网格
// 保存生成的网格文件
gmsh::write("t1.msh"); // 保存 t1 mesh
// 检查是否需要显示 Gmsh GUI
std::set<std::string> args(argv, argv + argc);
if (!args.count("-nopopup")) 显示 Gmsh GUI
gmsh::fltk::run();
gmsh::finalize(); // 结束 Gmsh
}