From 99ec2a0a9b44461f9fd45854a846c6f36099af9c Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Wed, 15 Nov 2017 11:46:54 +0100
Subject: [PATCH] C++ version of t4.geo

---
 demos/api/t3.cpp |   2 +-
 demos/api/t4.cpp | 101 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 102 insertions(+), 1 deletion(-)
 create mode 100644 demos/api/t4.cpp

diff --git a/demos/api/t3.cpp b/demos/api/t3.cpp
index d615534108..cc0440be9b 100644
--- a/demos/api/t3.cpp
+++ b/demos/api/t3.cpp
@@ -8,7 +8,7 @@ int main(int argc, char **argv)
   gmshInitialize(argc, argv);
   gmshOptionSetNumber("General.Terminal", 1);
 
-  gmshModelCreate("t2");
+  gmshModelCreate("t3");
 
   // copy/paste from t1.cpp
   double lc = 1e-2;
diff --git a/demos/api/t4.cpp b/demos/api/t4.cpp
new file mode 100644
index 0000000000..50eb3bc575
--- /dev/null
+++ b/demos/api/t4.cpp
@@ -0,0 +1,101 @@
+#include <math.h>
+#include <gmsh.h>
+
+// this reimplements gmsh/tutorial/t4.geo
+
+double hypoth(double a, double b){ return sqrt(a * a + b * b); }
+
+int main(int argc, char **argv)
+{
+  gmshInitialize(argc, argv);
+  gmshOptionSetNumber("General.Terminal", 1);
+
+  gmshModelCreate("t4");
+
+  double cm = 1e-02;
+  double e1 = 4.5 * cm, e2 = 6 * cm / 2, e3 =  5 * cm / 2;
+  double h1 = 5 * cm, h2 = 10 * cm, h3 = 5 * cm, h4 = 2 * cm, h5 = 4.5 * cm;
+  double R1 = 1 * cm, R2 = 1.5 * cm, r = 1 * cm;
+  double Lc1 = 0.01;
+  double Lc2 = 0.003;
+
+  double ccos = (-h5*R1 + e2 * hypot(h5, hypot(e2, R1))) / (h5*h5 + e2*e2);
+  double ssin = sqrt(1 - ccos*ccos);
+
+  int o;
+  gmshModelGeoAddPoint(1, -e1-e2, 0    , 0, o, Lc1);
+  gmshModelGeoAddPoint(2, -e1-e2, h1   , 0, o, Lc1);
+  gmshModelGeoAddPoint(3, -e3-r , h1   , 0, o, Lc2);
+  gmshModelGeoAddPoint(4, -e3-r , h1+r , 0, o, Lc2);
+  gmshModelGeoAddPoint(5, -e3   , h1+r , 0, o, Lc2);
+  gmshModelGeoAddPoint(6, -e3   , h1+h2, 0, o, Lc1);
+  gmshModelGeoAddPoint(7,  e3   , h1+h2, 0, o, Lc1);
+  gmshModelGeoAddPoint(8,  e3   , h1+r , 0, o, Lc2);
+  gmshModelGeoAddPoint(9,  e3+r , h1+r , 0, o, Lc2);
+  gmshModelGeoAddPoint(10, e3+r , h1   , 0, o, Lc2);
+  gmshModelGeoAddPoint(11, e1+e2, h1   , 0, o, Lc1);
+  gmshModelGeoAddPoint(12, e1+e2, 0    , 0, o, Lc1);
+  gmshModelGeoAddPoint(13, e2   , 0    , 0, o, Lc1);
+
+  gmshModelGeoAddPoint(14,  R1 / ssin, h5+R1*ccos, 0, o, Lc2);
+  gmshModelGeoAddPoint(15,  0        , h5        , 0, o, Lc2);
+  gmshModelGeoAddPoint(16, -R1 / ssin, h5+R1*ccos, 0, o, Lc2);
+  gmshModelGeoAddPoint(17, -e2       , 0.0       , 0, o, Lc1);
+
+  gmshModelGeoAddPoint(18, -R2 , h1+h3   , 0, o, Lc2);
+  gmshModelGeoAddPoint(19, -R2 , h1+h3+h4, 0, o, Lc2);
+  gmshModelGeoAddPoint(20,  0  , h1+h3+h4, 0, o, Lc2);
+  gmshModelGeoAddPoint(21,  R2 , h1+h3+h4, 0, o, Lc2);
+  gmshModelGeoAddPoint(22,  R2 , h1+h3   , 0, o, Lc2);
+  gmshModelGeoAddPoint(23,  0  , h1+h3   , 0, o, Lc2);
+
+  gmshModelGeoAddPoint(24,  0, h1+h3+h4+R2, 0, o, Lc2);
+  gmshModelGeoAddPoint(25,  0, h1+h3-R2,    0, o, Lc2);
+
+  gmshModelGeoAddLine(1, 1 , 17, o);
+  gmshModelGeoAddLine(2, 17, 16, o);
+
+  gmshModelGeoAddCircleArc(3, 14,15,16, o);
+  gmshModelGeoAddLine(4, 14,13, o);
+  gmshModelGeoAddLine(5, 13,12, o);
+  gmshModelGeoAddLine(6, 12,11, o);
+  gmshModelGeoAddLine(7, 11,10, o);
+  gmshModelGeoAddCircleArc(8, 8,9,10, o);
+  gmshModelGeoAddLine(9, 8,7, o);
+  gmshModelGeoAddLine(10, 7,6, o);
+  gmshModelGeoAddLine(11, 6,5, o);
+  gmshModelGeoAddCircleArc(12, 3,4,5, o);
+  gmshModelGeoAddLine(13, 3,2, o);
+  gmshModelGeoAddLine(14, 2,1, o);
+  gmshModelGeoAddLine(15, 18,19, o);
+  gmshModelGeoAddCircleArc(16, 21,20,24, o);
+  gmshModelGeoAddCircleArc(17, 24,20,19, o);
+  gmshModelGeoAddCircleArc(18, 18,23,25, o);
+  gmshModelGeoAddCircleArc(19, 25,23,22, o);
+  gmshModelGeoAddLine(20, 21,22, o);
+
+  gmshModelGeoAddLineLoop(21, {17,-15,18,19,-20,16}, o);
+  gmshModelGeoAddPlaneSurface(22, {21}, o);
+  gmshModelGeoAddLineLoop(23, {11,-12,13,14,1,2,-3,4,5,6,7,-8,9,10}, o);
+  gmshModelGeoAddPlaneSurface(24, {23,21}, o);
+
+  // FIXME: this will be implemented through the gmshPost or gmshView API
+  /*
+  View "comments" {
+    T2(10, -10, 0){ StrCat("Created on ", Today, " with Gmsh") };
+    T3(0, 0.11, 0, TextAttributes("Align", "Center", "Font", "Helvetica")){ "Hole" };
+    T3(0, 0.09, 0, TextAttributes("Align", "Center")){ "file://image.png@0.01x0" };
+    T3(-0.01, 0.09, 0, 0){ "file://image.png@0.01x0,0,0,1,0,1,0" };
+    T3(0, 0.12, 0, TextAttributes("Align", "Center")){ "file://image.png@0.01x0#" };
+    T2(350, -7, 0){ "file://image.png@20x0" };
+  };
+  */
+  gmshModelGeoSynchronize();
+
+  gmshModelMesh(2);
+
+  gmshExport("t4.msh");
+
+  gmshFinalize();
+  return 0;
+}
-- 
GitLab