From c51b04dcac4b6b989cd04d191f615e6b7aeafe3f Mon Sep 17 00:00:00 2001
From: Gaetan Bricteux <gaetan.bricteux@uclouvain.be>
Date: Mon, 21 Oct 2013 12:45:58 +0000
Subject: [PATCH] avoid vertices with same num

---
 Geo/MElementCut.cpp | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/Geo/MElementCut.cpp b/Geo/MElementCut.cpp
index 744646ee64..df8f5292dd 100644
--- a/Geo/MElementCut.cpp
+++ b/Geo/MElementCut.cpp
@@ -712,8 +712,8 @@ static void elementSplitMesh(MElement *e, std::vector<gLevelset *> &RPN,
       MVertex *v1 = me.getVertex(1);
       MVertex *v0N = vertexMap[v0->getNum()];
       MVertex *v1N = vertexMap[v1->getNum()];
-      double val0 = verticesLs(iLs, v0->getIndex()) - eps;
-      double val1 = verticesLs(iLs, v1->getIndex()) - eps;
+      double val0 = (verticesLs(iLs, v0->getIndex()) > eps) ? 1 : -1;
+      double val1 = (verticesLs(iLs, v1->getIndex()) > eps) ? 1 : -1;
       if(val0 * val1 > 0.0 && val0 < 0.0) {
         getPhysicalTag(-1, gePhysicals, newPhysTags[1]);
         int c = elements[1].count(gLsTag);
@@ -744,9 +744,9 @@ static void elementSplitMesh(MElement *e, std::vector<gLevelset *> &RPN,
     for(int k = 0; k < e->getNumFaces(); k++){
       MFace mf = e->getFace(k);
       bool sameSign = true;
-      double val0 = verticesLs(iLs, mf.getVertex(0)->getIndex()) - eps;
+      double val0 = (verticesLs(iLs, mf.getVertex(0)->getIndex()) > eps) ? 1 : -1;
       for (int j = 1; j < mf.getNumVertices(); j++){
-        double valj = verticesLs(iLs, mf.getVertex(j)->getIndex()) - eps;
+        double valj = (verticesLs(iLs, mf.getVertex(j)->getIndex()) > eps) ? 1 : -1;
         if (val0*valj < 0.0){ sameSign = false; break;}
       }
       if(sameSign && val0 < 0.0) {
@@ -1609,7 +1609,7 @@ GModel *buildCutMesh(GModel *gm, gLevelset *ls,
     for(std::map<int, std::vector<MElement*> >::iterator it = elements[i].begin();
         it != elements[i].end(); it++){
       printf(" elementary : %d\n",it->first);
-      for(int j = 0; j < it->second.size(); j++){
+      for(unsigned int j = 0; j < it->second.size(); j++){
         MElement *e = it->second[j];
         printf("element %d",e->getNum());
         if(e->getParent()) printf(" par=%d (%d)",e->getParent()->getNum(),e->ownsParent());
@@ -1629,6 +1629,8 @@ GModel *buildCutMesh(GModel *gm, gLevelset *ls,
 
   for(newVerticesContainer::iterator it = newVertices.begin();
       it != newVertices.end(); ++it){
+    if((*it)->getNum() <= gm->getMaxVertexNumber())
+      (*it)->forceNum(cutGM->getMaxVertexNumber() + 1);
     vertexMap[(*it)->getNum()] = *it;
   }
 
-- 
GitLab