From d8a138b617b5055cbaa42d062d74ac7ded53a01e Mon Sep 17 00:00:00 2001
From: Tristan Carrier Baudouin <tristan.carrier@uclouvain.be>
Date: Tue, 16 Oct 2012 16:33:04 +0000
Subject: [PATCH] Voronoi 3D

---
 Mesh/periodical.cpp | 43 ++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 40 insertions(+), 3 deletions(-)

diff --git a/Mesh/periodical.cpp b/Mesh/periodical.cpp
index ecb780e86b..ecdb76176b 100644
--- a/Mesh/periodical.cpp
+++ b/Mesh/periodical.cpp
@@ -366,12 +366,19 @@ void voroMetal3D::print_geo_face_loop(int index,std::vector<int>& indices,std::o
 }
 
 void voroMetal3D::correspondance(){
-  int i;
+  unsigned int i;
+  unsigned int j;
+  bool flag;
+  double e;
   GFace* gf;
   GModel* model = GModel::current();
   GModel::fiter it;
   std::vector<GFace*> faces;
   std::map<GFace*,bool> markings;
+  std::map<GFace*,bool>::iterator it1;
+  std::map<GFace*,bool>::iterator it2;
+  surface_params params1;
+  surface_params params2;
 	
   faces.clear();	
 	
@@ -393,7 +400,37 @@ void voroMetal3D::correspondance(){
     markings.insert(std::pair<GFace*,bool>(faces[i],0));
   }
 	
+  e = 0.000001;	
+  
   std::ofstream file;
-  file.open("cells.geo",std::ios::out | std::ios::app);
-  //geofile << "test\n";
+  file.open("cells.geo",std::ios::out | std::ios::app);	
+	
+  for(i=0;i<faces.size();i++){
+    for(j=0;j<faces.size();j++){
+	  flag = 0;	
+	
+	  params1 = faces[i]->getSurfaceParams();
+	  params2 = faces[j]->getSurfaceParams();
+		
+	  if(fabs(params1.cx-params2.cx)<1.0+e && fabs(params1.cx-params2.cx)>1.0-e && fabs(params1.cy-params2.cy)<e && fabs(params1.cz-params2.cz)<e){
+	    flag = 1;
+	  }
+	  if(fabs(params1.cy-params2.cy)<1.0+e && fabs(params1.cy-params2.cy)>1.0-e && fabs(params1.cx-params2.cx)<e && fabs(params1.cz-params2.cz)<e){
+	    flag = 1;
+	  }
+	  if(fabs(params1.cz-params2.cz)<1.0+e && fabs(params1.cz-params2.cz)>1.0-e && fabs(params1.cy-params2.cy)<e && fabs(params1.cx-params2.cx)<e){
+	    flag = 1;
+	  }
+		
+	  if(flag){
+	    it1 = markings.find(faces[i]); 
+	    it2 = markings.find(faces[j]);
+		if(it1->second==0 && it2->second==0){
+		  it1->second = 1;
+		  it2->second = 1;
+		  file << faces[i]->tag() << " " << faces[j]->tag() << "\n";
+		}
+	  }
+	}
+  }
 }
\ No newline at end of file
-- 
GitLab