gmsh 01 对多个面,及体进行剖分

#include 
#include 
#include 

#include 

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 对多个面,及体进行剖分_第1张图片

你可能感兴趣的:(算法)