From 705ff3e814012d0b42a0c8f832759487524af772 Mon Sep 17 00:00:00 2001
From: Jean-Francois Remacle <jean-francois.remacle@uclouvain.be>
Date: Fri, 2 Apr 2010 10:04:10 +0000
Subject: [PATCH]

---
 Mesh/highOrderSmoother.cpp | 121 +++++--------------------------------
 1 file changed, 16 insertions(+), 105 deletions(-)

diff --git a/Mesh/highOrderSmoother.cpp b/Mesh/highOrderSmoother.cpp
index 7bdc487374..04f620736e 100644
--- a/Mesh/highOrderSmoother.cpp
+++ b/Mesh/highOrderSmoother.cpp
@@ -1117,6 +1117,14 @@ struct swap_triangles_pN
   faceContainer &faceVertices;
   highOrderSmoother *s;
 
+  void cleanupDeletedEdge (bool swapWasSuccessfull )
+  {
+    MEdge _temp(swapWasSuccessfull ? n1 : n3 , swapWasSuccessfull ? n2 : n4 );
+    std::pair<MVertex*, MVertex*> _temp2(_temp.getMinVertex(), _temp.getMaxVertex());
+    edgeVertices.erase(_temp2);
+    // do the same for internal vertices !!
+  } 
+
   swap_triangles_pN(const MEdge &me, MTriangle *_t1, MTriangle *_t2, GFace *gf,
                     edgeContainer &_edgeVertices,
                     faceContainer &_faceVertices,
@@ -1368,55 +1376,9 @@ static int swapHighOrderTriangles(GFace *gf,
          itp->quality_new > 0 && //itp->quality_old &&
          diff < 1.e-9){
 
-      //printf("Element quality : %f --> %f\n",itp->quality_old,itp->quality_new); 
-
-      // determining the common edge between t1 & t2
-      MVertex* common_vertices[2];
-      int this_one = 0;
-      for (std::vector<MVertex*>::iterator t1it = v1.begin(); t1it != v1.begin()+3; t1it++)
-	for (std::vector<MVertex*>::iterator t2it = v2.begin(); t2it != v2.begin()+3; t2it++)
-	  if ((MVertex*)(*t1it) == (MVertex*)(*t2it)) {
-	    common_vertices[this_one] = (MVertex*)(*t1it);
-	    this_one++;
-	    break;
-	  }
-	    
-      
-      std::vector<std::pair<MVertex*,MVertex*> > toDelete;
-      MEdge _temp(common_vertices[0],common_vertices[1]);
-      std::pair<MVertex*, MVertex*> _temp2(_temp.getMinVertex(), _temp.getMaxVertex());
-      edgeVertices.erase(_temp2);
-
-      /*
-      for (faceContainer::iterator fcit = faceVertices.begin(); fcit != faceVertices.end(); fcit++) {
-	bool remove_this = true;
-	for (std::vector<MVertex*>::iterator t1it = v1.begin(); t1it != v1.begin()+3; t1it++) {
-	  if (find((*fcit).second.begin(), (*fcit).second.end(), (*t1it)) == (*fcit).second.end()) {
-	    remove_this = false;
-	    break;
-	  }
-	}
-	if (remove_this) {
-	  faceVertices.erase(fcit);
-	  printf("Yeah, you're dead.\n");
-	  break;
-	}
-	
-	remove_this = true;
-
-	for (std::vector<MVertex*>::iterator t2it = v2.begin(); t2it != v2.begin()+3; t2it++) {
-	  if (find((*fcit).second.begin(), (*fcit).second.end(), (*t2it)) == (*fcit).second.end()) {
-	    remove_this = false;
-	    break;
-	  }
-	}
-	if (remove_this) {
-	  faceVertices.erase(fcit);
-	  printf("Huh-uh, you too are destroyed.\n");
-	  break;
-	}
-     }
-*/
+      swap_triangles_pN &sw = (swap_triangles_pN &) *itp;
+      sw.cleanupDeletedEdge (true);
+
       t_removed.insert(itp->t1);
       t_removed.insert(itp->t2);
       v_removed.insert(vf1.begin(),vf1.end());
@@ -1431,10 +1393,6 @@ static int swapHighOrderTriangles(GFace *gf,
         if (find(ve2.begin(),ve2.end(),*vit)!=ve2.end())
           v_removed.insert(*vit);
       }
-      //for(std::vector<MVertex*>::iterator vit = ve3.begin(); vit != ve3.end(); vit++) {
-        //if (find(ve4.begin(),ve4.end(),*vit)!=ve4.end())
-        //  mesh_vertices2.push_back(*vit);
-      //}
 
       nbSwap++;
     }
@@ -1445,53 +1403,8 @@ static int swapHighOrderTriangles(GFace *gf,
 	  //delete  *vit;
       }
       
-      // determining the common edge between t3 & t4
-      MVertex* common_vertices[2];
-      int this_one = 0;
-      for (std::vector<MVertex*>::iterator t3it = v3.begin(); t3it != v3.begin()+3; t3it++)
-	for (std::vector<MVertex*>::iterator t4it = v4.begin(); t4it != v4.begin()+3; t4it++)
-	  if ((MVertex*)(*t3it) == (MVertex*)(*t4it)) {
-	    common_vertices[this_one] = (MVertex*)(*t3it);
-	    this_one++;
-	    break;
-	  }
-	    
-      // delete the edge inside the edgeContainer
-      std::vector<std::pair<MVertex*,MVertex*> > toDelete;
-      MEdge _temp(common_vertices[0],common_vertices[1]);
-      std::pair<MVertex*, MVertex*> _temp2(_temp.getMinVertex(), _temp.getMaxVertex());
-      edgeVertices.erase(_temp2);
-
-      /*
-      for (faceContainer::iterator fcit = faceVertices.begin(); fcit != faceVertices.end(); fcit++) {
-	bool remove_this = true;
-	for (std::vector<MVertex*>::iterator t3it = v3.begin(); t3it != v3.begin()+3; t3it++) {
-	  if (find((*fcit).second.begin(), (*fcit).second.end(), (*t3it)) == (*fcit).second.end()) {
-	    remove_this = false;
-	    break;
-	  }
-	}
-	if (remove_this) {
-	  faceVertices.erase(fcit);
-	  printf("Yeah, you're dead.\n");
-	  break;
-	}
-	
-	remove_this = true;
-
-	for (std::vector<MVertex*>::iterator t4it = v4.begin(); t4it != v4.begin()+3; t4it++) {
-	  if (find((*fcit).second.begin(), (*fcit).second.end(), (*t4it)) == (*fcit).second.end()) {
-	    remove_this = false;
-	    break;
-	  }
-	}
-	if (remove_this) {
-	  faceVertices.erase(fcit);
-	  printf("Huh-uh, you too are destroyed.\n");
-	  break;
-	}
-     }
-      */
+      swap_triangles_pN &sw = (swap_triangles_pN &) *itp;
+      sw.cleanupDeletedEdge (false);
 
       delete itp->t3;
       delete itp->t4;
@@ -1502,9 +1415,7 @@ static int swapHighOrderTriangles(GFace *gf,
   for (unsigned int i = 0; i < gf->mesh_vertices.size(); i++){
     if (v_removed.find(gf->mesh_vertices[i]) == v_removed.end()){
       mesh_vertices2.push_back(gf->mesh_vertices[i]);
-    } //else {
-      //delete gf->mesh_vertices[i];
-    //}
+    } 
   }
 
   gf->mesh_vertices.clear();
@@ -1521,8 +1432,8 @@ static int swapHighOrderTriangles(GFace *gf,
   gf->triangles.clear();
   gf->triangles = triangles2;
   printf("%d swaps performed\n",nbSwap);
-  printf ("Size of the map d%\n", edgeVertices.size());
-  printf ("Size of the face map %d\n", faceVertices.size());
+  printf ("Final Size of the map %d\n", edgeVertices.size());
+  printf ("Final Size of the face map %d\n", faceVertices.size());
   return nbSwap;
 }
 
-- 
GitLab