From 4fe8e576b7613f22e411e2ad856be58c901b8bd6 Mon Sep 17 00:00:00 2001
From: Jean-Francois Remacle <jean-francois.remacle@uclouvain.be>
Date: Fri, 25 Oct 2013 15:41:10 +0000
Subject: [PATCH] super oooops

---
 Mesh/meshGFaceDelaunayInsertion.cpp | 55 ----------------
 Mesh/meshGFaceOptimize.cpp          | 97 ++++++++++++++++++++++-------
 2 files changed, 74 insertions(+), 78 deletions(-)

diff --git a/Mesh/meshGFaceDelaunayInsertion.cpp b/Mesh/meshGFaceDelaunayInsertion.cpp
index 6103fe15bf..07a4d050c1 100644
--- a/Mesh/meshGFaceDelaunayInsertion.cpp
+++ b/Mesh/meshGFaceDelaunayInsertion.cpp
@@ -43,29 +43,6 @@ static bool isBoundary(MTri3 *t, double limit_, int &active)
 }
 */
 
-struct equivalentTriangle {
-  MTri3 *_t;
-  MVertex *_v[3];
-  equivalentTriangle (MTri3 *t,  std::map<MVertex* , MVertex*>* equivalence)
-    :_t(t) {
-    for (int i=0;i<3;i++){
-      MVertex *v = t->tri()->getVertex(i);
-      std::map<MVertex* , MVertex*>::iterator it = equivalence->find(v);
-      if (it == equivalence->end())_v[i] = v;
-      else _v[i] = it->second;
-    }
-    std::sort (_v,_v+3);
-  }
-  bool operator < (const equivalentTriangle &other) const{
-    for (int i=0;i<3;i++){
-      if (other._v[i] > _v[i])return true;
-      if (other._v[i] < _v[i])return false;
-    }
-    return false;
-  }
-};
-
-
 template <class ITERATOR>
 void _printTris(char *name, ITERATOR it,  ITERATOR end, bidimMeshData & data, bool param=true)
 {
@@ -997,38 +974,6 @@ static bool insertAPoint(GFace *gf,
   }
 }
 
-bool computeEquivalentTriangles (std::set<MTri3*,compareTri3Ptr> &AllTris,
-				 std::map<MVertex* , MVertex*>* equivalence) {
-  std::vector<MTri3*> WTF;
-  if (!equivalence)return false;
-  std::set<MTri3*,compareTri3Ptr>::iterator it = AllTris.begin();
-  std::set<equivalentTriangle> eqTs;  
-  int COUNT = 0;
-  for ( ; it!=AllTris.end();++it){
-    if (!(*it)->isDeleted()){
-      COUNT++;
-      equivalentTriangle et ((*it),equivalence);
-      std::set<equivalentTriangle>::iterator iteq = eqTs.find(et);
-      if (iteq == eqTs.end())eqTs.insert(et);
-      else {
-	WTF.push_back(iteq->_t);
-	WTF.push_back(*it);
-      }
-    }
-  }
-  
-  if (WTF.size()){
-    for (int i=0;i<WTF.size();i++){
-      std::set<MTri3*,compareTri3Ptr>::iterator it = AllTris.find(WTF[i]);
-      AllTris.erase(it);
-      WTF[i]->forceRadius(100);
-      AllTris.insert(WTF[i]);
-    }
-    return true;
-  }
-  return false;
-}
-
 void bowyerWatson(GFace *gf, int MAXPNT,
 		  std::map<MVertex* , MVertex*>* equivalence,
 		  std::map<MVertex*, SPoint2> * parametricCoordinates)
diff --git a/Mesh/meshGFaceOptimize.cpp b/Mesh/meshGFaceOptimize.cpp
index 1196287ede..af5ffbdc2f 100644
--- a/Mesh/meshGFaceOptimize.cpp
+++ b/Mesh/meshGFaceOptimize.cpp
@@ -194,6 +194,79 @@ void buildMeshGenerationDataStructures(GFace *gf,
   connectTriangles(AllTris);
 }
 
+void computeEquivalences(GFace *gf, bidimMeshData & data){
+  if (data.equivalence){
+    std::vector<MTriangle*> newT;
+    for (unsigned int i=0;i<gf->triangles.size();i++){
+      MTriangle *t = gf->triangles[i];
+      MVertex *v[3];
+      for (int j=0;j<3;j++){
+	v[j] = t->getVertex(j);
+	std::map<MVertex* , MVertex*>::iterator it =  data.equivalence->find(v[j]);
+	if (it != data.equivalence->end()){
+	  v[j] = it->second;
+	}
+      }
+      if (v[0] != v[1] && v[0] != v[2] && v[2] != v[1])newT.push_back(new MTriangle (v[0],v[1],v[2]));
+      delete t;
+    }
+    gf->triangles = newT;
+  }
+}
+
+struct equivalentTriangle {
+  MTriangle *_t;
+  MVertex *_v[3];
+  equivalentTriangle (MTriangle *t,  std::map<MVertex* , MVertex*>* equivalence)
+    :_t(t) {
+    for (int i=0;i<3;i++){
+      MVertex *v = t->getVertex(i);
+      std::map<MVertex* , MVertex*>::iterator it = equivalence->find(v);
+      if (it == equivalence->end())_v[i] = v;
+      else _v[i] = it->second;
+    }
+    std::sort (_v,_v+3);
+  }
+  bool operator < (const equivalentTriangle &other) const{
+    for (int i=0;i<3;i++){
+      if (other._v[i] > _v[i])return true;
+      if (other._v[i] < _v[i])return false;
+    }
+    return false;
+  }
+};
+
+bool computeEquivalentTriangles (GFace *gf,
+				 std::map<MVertex* , MVertex*>* equivalence) {
+  if (!equivalence)return false;
+  std::vector<MTriangle*> WTF;
+  if (!equivalence)return false;
+  std::set<equivalentTriangle> eqTs;  
+  for (int i=0;i<gf->triangles.size();i++){
+    equivalentTriangle et (gf->triangles[i],equivalence);
+    std::set<equivalentTriangle>::iterator iteq = eqTs.find(et);
+    if (iteq == eqTs.end())eqTs.insert(et);
+    else {
+      WTF.push_back(iteq->_t);
+      WTF.push_back(gf->triangles[i]);
+    }
+  }
+  
+  if (WTF.size()){
+    printf("%d triangles are equivament\n",WTF.size());
+    for (int i=0;i<WTF.size();i++){
+    }
+    return true;
+  }
+  return false;
+}
+
+
+int splitEquivalentTriangles(GFace *gf, bidimMeshData & data){
+  computeEquivalentTriangles (gf,data.equivalence);  
+}
+
+
 void transferDataStructure(GFace *gf, std::set<MTri3*, compareTri3Ptr> &AllTris,bidimMeshData & data)
 {
   while (1) {
@@ -234,32 +307,10 @@ void transferDataStructure(GFace *gf, std::set<MTri3*, compareTri3Ptr> &AllTris,
       if(pp < 0) t->reverse();
     }
   }
+  splitEquivalentTriangles(gf, data);
   computeEquivalences(gf, data);
 }
 
-void computeEquivalences(GFace *gf, bidimMeshData & data){
-  if (data.equivalence){
-    std::vector<MTriangle*> newT;
-    for (unsigned int i=0;i<gf->triangles.size();i++){
-      MTriangle *t = gf->triangles[i];
-      MVertex *v[3];
-      for (int j=0;j<3;j++){
-	v[j] = t->getVertex(j);
-	std::map<MVertex* , MVertex*>::iterator it =  data.equivalence->find(v[j]);
-	if (it != data.equivalence->end()){
-	  v[j] = it->second;
-	}
-      }
-      newT.push_back(new MTriangle (v[0],v[1],v[2]));
-      delete t;
-    }
-    gf->triangles = newT;
-  }
-}
-
-int splitEquivalentTriangles(GFace *gf, bidimMeshData & data){
-  
-}
 
 
 void buildVertexToTriangle(std::vector<MTriangle*> &eles, v2t_cont &adj)
-- 
GitLab