将改方法使用传入参数后就像使用 gmsh 一样使用参数执行文件
gmsh::initialize(argc, argv);
gmsh 还提供了复制实体的方式,通过传入{维度,tag}, 向某个方向的 dx dy dz 偏移来复制实体
gmsh::model::geo::translate({{0, 5}}, -0.02, 0, 0);
gmsh 还可以使得实体绕某点以某向量旋转
gmsh::model::geo::rotate({{0, 5}}, 0, 0.3, 0, 0, 0, 1, -M_PI / 4);
gmsh 还可以直接使用 copy 进行复制,效果等同于使用 translate 方法将在 y 轴方向右移 0.05 复制一个实体,返回复制实体的 {dim, tag}
std::vector<std::pair<int, int> > ov;
gmsh::model::geo::copy({{0, 3}}, ov);
gmsh::model::geo::translate(ov, 0, 0.05, 0);
Volume
体是 gmsh 定义的第四种实体,就行需要定义定于曲线循环来构建面,需要定义曲面环(又称之为 shells 壳)来构建体
std::vector<double> xyz;
gmsh::model::getValue(0, 5, {}, xyz); # 复制坐标
gmsh::model::geo::addLine(4, 100, 110);
...
gmsh::model::geo::addCurveLoop({115, -111, 3, 110}, 118);
gmsh::model::geo::addPlaneSurface({118}, 119);
...
gmsh::model::geo::addSurfaceLoop({127, 119, 121, 123, 125, 11}, 128);
gmsh::model::geo::addVolume({128}, 129);
通过 extrude 方法,我们可以从二维面上沿着 dx,dy,dz 方向拉伸出一个体积
std::vector<std::pair<int, int> > ov2;
gmsh::model::geo::extrude({ov[1]}, 0, 0, 0.12, ov2);
通过 mesh::setSize 可以再次设定 mesh 生成的网格大小
gmsh::model::geo::mesh::setSize({{0, 103}, {0, 5}}, lc * 3);
添加物理组后只会在物理组上生成网格
gmsh::model::addPhysicalGroup(3, {129, 130}, 1);
gmsh::model::setPhysicalName(3, 1, "The volume");
gmsh::model::geo::synchronize();
gmsh::model::mesh::generate(3);
gmsh::write("t2.msh");
另外文档说明了可以生成 “平面几何” 的文件,在某些情况下有用
gmsh::write("t2.geo_unrolled"); # Built-in 内核
gmsh::write("t2.brep"); # OpenCASCADE 内核