#include
#include
#include
#include
int main(int argc, char** argv)
{
gmsh::initialize(argc, argv);
gmsh::model::add("t2");
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);
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);
gmsh::model::geo::addPlaneSurface({ 1 }, 1);
gmsh::model::geo::synchronize();
gmsh::model::addPhysicalGroup(1, { 1, 2, 4 }, 5);
gmsh::model::addPhysicalGroup(2, { 1 }, -1, "My surface");
gmsh::model::geo::addPoint(0, .4, 0, lc, 5);
gmsh::model::geo::addLine(4, 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);
std::vector<std::pair<int, int> > ov;
gmsh::model::geo::copy({ {0, 3} }, ov);
gmsh::model::geo::translate(ov, 0, 0.05, 0);
gmsh::model::geo::addLine(3, ov[0].second, 7);
gmsh::model::geo::addLine(ov[0].second, 5, 8);
gmsh::model::geo::addCurveLoop({ 5, -8, -7, 3 }, 10);
gmsh::model::geo::addPlaneSurface({ 10 }, 11);
gmsh::model::geo::addPoint(0., 0.3, 0.12, lc, 100);
gmsh::model::geo::addPoint(0.1, 0.3, 0.12, lc, 101);
gmsh::model::geo::addPoint(0.1, 0.35, 0.12, lc, 102);
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);
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;
}