From ef2f8b430eb43e329e680303601e54a1d341ca23 Mon Sep 17 00:00:00 2001
From: Gaetan Bricteux <gaetan.bricteux@uclouvain.be>
Date: Mon, 28 Nov 2011 16:51:52 +0000
Subject: [PATCH] fix polygon numbering

---
 Geo/GModelIO_Mesh.cpp |  3 +++
 Geo/MElement.cpp      |  4 ++--
 Geo/MElementCut.cpp   | 10 +++++-----
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/Geo/GModelIO_Mesh.cpp b/Geo/GModelIO_Mesh.cpp
index 0fa196375c..a188c8b6a3 100644
--- a/Geo/GModelIO_Mesh.cpp
+++ b/Geo/GModelIO_Mesh.cpp
@@ -617,6 +617,9 @@ static void writeElementMSH(FILE *fp, GModel *model, T *ele, bool saveAll,
   }
 
   model->setMeshElementIndex(ele, num); // should really be a multimap...
+
+  if(CTX::instance()->mesh.saveTri && ele->getNumChildren())
+    num += ele->getNumChildren() - 1;
 }
 
 template<class T>
diff --git a/Geo/MElement.cpp b/Geo/MElement.cpp
index 6f45c85c18..e5f2fed785 100644
--- a/Geo/MElement.cpp
+++ b/Geo/MElement.cpp
@@ -630,13 +630,13 @@ void MElement::writeMSH(FILE *fp, double version, bool binary, int num,
   if(CTX::instance()->mesh.saveTri && poly){
     for (int i = 0; i < getNumChildren() ; i++){
        MElement *t = getChild(i);
-       t->writeMSH(fp, version, binary, num, elementary, physical, 0, 0, 0, ghosts);
+       t->writeMSH(fp, version, binary, num++, elementary, physical, 0, 0, 0, ghosts);
     }
     return;
   }
   else if(CTX::instance()->mesh.saveTri && polyl){
     MLine *l = new MLine(getVertex(0), getVertex(1));
-    l->writeMSH(fp, version, binary, num, elementary, physical, 0, 0, 0, ghosts);
+    l->writeMSH(fp, version, binary, num++, elementary, physical, 0, 0, 0, ghosts);
     delete l;
     return;
   }
diff --git a/Geo/MElementCut.cpp b/Geo/MElementCut.cpp
index ee41a648ac..be041390af 100644
--- a/Geo/MElementCut.cpp
+++ b/Geo/MElementCut.cpp
@@ -732,7 +732,10 @@ static void elementSplitMesh(MElement *e, fullMatrix<double> &verticesLs,
           elements[2][reg].push_back(tri);
         }
         else if(mf.getNumVertices() == 4){
-          MQuadrangle *quad = new MQuadrangle(mf.getVertex(0), mf.getVertex(1), mf.getVertex(2), mf.getVertex(3));
+          MQuadrangle *quad = new MQuadrangle(vertexMap[mf.getVertex(0)->getNum()],
+                                              vertexMap[mf.getVertex(1)->getNum()],
+                                              vertexMap[mf.getVertex(2)->getNum()],
+                                              vertexMap[mf.getVertex(3)->getNum()]);
           elements[3][reg].push_back(quad);
         }
         if(physTag)  assignLsPhysical(GM, reg, 2, physicals, physTag, gLsTag);
@@ -1375,13 +1378,10 @@ GModel *buildCutMesh(GModel *gm, gLevelset *ls,
         if(primS > 1)
           verticesLs(k, vi->getIndex()) = (*ls)(vi->x(), vi->y(), vi->z());
       }
-      else{
+      else
         verticesLs(0, vi->getIndex()) = (*ls)(vi->x(), vi->y(), vi->z());
-	//printf("xy = (%g,%g) val= %g(%g) ind=%d\n",vi->x(), vi->y(),  verticesLs(0, vi->getIndex()),-vi->x()+0.41, vi->getIndex() );
-      }
     }
   }
-  //exit(1);
 
   int numEle = gm->getNumMeshElements() + gm->getNumMeshParentElements(); //element number increment
   for(unsigned int i = 0; i < gmEntities.size(); i++) {
-- 
GitLab