#include <set>
#include <cmath>
#include <gmsh.h>
#include <iostream>
int main(int argc, char** argv)
{
gmsh::initialize(argc, argv); // 初始化
gmsh::model::add("t2"); // 创建 t2 model
double lc = 0.05;
gmsh::model::geo::addPoint(0, 0, 0, lc, 1);
gmsh::model::geo::addPoint(.1, 0, 0, lc, 2);
gmsh::model::geo::addPoint(.1, .3, 0, lc, 3);
gmsh::model::geo::addPoint(0, .3, 0, lc, 4); // XOY 平面
gmsh::model::geo::addLine(1, 2, 1);
gmsh::model::geo::addLine(2, 3, 2);
gmsh::model::geo::addLine(3, 4, 3);
gmsh::model::geo::addLine(4, 1, 4);
gmsh::model::geo::addCurveLoop({ 4, 1, 2, 3 }, 1); // 创建曲线 闭合 边 // 注意 tag 1
gmsh::model::geo::addPlaneSurface({ 1 }, 1); // 创建 part 面 {1}
gmsh::model::geo::synchronize();
// 创建物理条件组
gmsh::model::addPhysicalGroup(1, { 1, 2, 4 }, 5); // 创建一维, 1 2 4 条边,赋值 tag =5
gmsh::model::addPhysicalGroup(2, { 1 }, -1, "My surface");// 创建 2 维, 1 面, 物理 tag = -1
// 创建新的点
gmsh::model::geo::addPoint(0, .4, 0, lc, 5); // 第 5 个点
gmsh::model::geo::addLine(4, 5, 5); // 创建边,将第四个点和第五个点连接
// 使用变换,将 // 0 维代表点,tag 是 5 第 5 个向左评议
gmsh::model::geo::translate({ {0, 5} }, -0.02, 0, 0);
gmsh::model::geo::rotate({ {0, 5} }, 0, 0.3, 0, 0, 0, 1, -M_PI / 4); // 旋转 // 0 维 5 号点, // 围绕 (0, 0.3, 0) 绕着 z 轴旋转, -PI/4
std::vector<std::pair<int, int> > ov;
gmsh::model::geo::copy({ {0, 3} }, ov); // 将 0 维 的第 3 个点拷 ov // 为什么这个 tag = 6
gmsh::model::geo::translate(ov, 0, 0.05, 0); // 将点 y 平移 0.05
// 创建连接线
gmsh::model::geo::addLine(3, ov[0].second, 7); // 将 3 号点和 // 创建 7 号边 3, 6
gmsh::model::geo::addLine(ov[0].second, 5, 8); // 创建 6, 5 号边
gmsh::model::geo::addCurveLoop({ 5, -8, -7, 3 }, 10); // 创建一维的边,闭合的区域,标记 tag = 10
gmsh::model::geo::addPlaneSurface({ 10 }, 11); // 创建曲面平面, // 线标记 10, 面 tag 11
gmsh::model::geo::addPoint(0., 0.3, 0.12, lc, 100); // 100
gmsh::model::geo::addPoint(0.1, 0.3, 0.12, lc, 101); // 101
gmsh::model::geo::addPoint(0.1, 0.35, 0.12, lc, 102); // 102W
gmsh::model::geo::synchronize();
std::vector<double> xyz;
gmsh::model::getValue(0, 5, {}, xyz);
gmsh::model::geo::addPoint(xyz[0], xyz[1], 0.12, lc, 103);
gmsh::model::geo::addLine(4, 100, 110);
gmsh::model::geo::addLine(3, 101, 111);
gmsh::model::geo::addLine(6, 102, 112);
gmsh::model::geo::addLine(5, 103, 113);
gmsh::model::geo::addLine(103, 100, 114);
gmsh::model::geo::addLine(100, 101, 115);
gmsh::model::geo::addLine(101, 102, 116);
gmsh::model::geo::addLine(102, 103, 117);
gmsh::model::geo::addCurveLoop({ 115, -111, 3, 110 }, 118);
gmsh::model::geo::addPlaneSurface({ 118 }, 119);
gmsh::model::geo::addCurveLoop({ 111, 116, -112, -7 }, 120);
gmsh::model::geo::addPlaneSurface({ 120 }, 121);
gmsh::model::geo::addCurveLoop({ 112, 117, -113, -8 }, 122);
gmsh::model::geo::addPlaneSurface({ 122 }, 123);
gmsh::model::geo::addCurveLoop({ 114, -110, 5, 113 }, 124);
gmsh::model::geo::addPlaneSurface({ 124 }, 125);
gmsh::model::geo::addCurveLoop({ 115, 116, 117, 114 }, 126);
gmsh::model::geo::addPlaneSurface({ 126 }, 127);
gmsh::model::geo::addSurfaceLoop({ 127, 119, 121, 123, 125, 11 }, 128); // 面的编号
gmsh::model::geo::addVolume({ 128 }, 129); // 体 129
gmsh::model::geo::synchronize();
gmsh::model::addPhysicalGroup(3, { 129 }, 1, "The volume");
gmsh::model::mesh::generate(3);
gmsh::write("t2.msh");
std::set<std::string> args(argv, argv + argc);
if (!args.count("-nopopup"))
gmsh::fltk::run();
gmsh::finalize();
return 0;
}
gmsh 01 对多个面,及体进行剖分
最新推荐文章于 2024-08-27 17:53:55 发布