From 8ffd1a3e11c3d8cbba9c64e5e3c09918b2e8e745 Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Sun, 26 Nov 2006 02:14:24 +0000
Subject: [PATCH] todo tetgen: recategorize vertices+tets in each separate
 region

---
 Mesh/meshGRegion.cpp | 36 ++++++++++++++++++++----------------
 1 file changed, 20 insertions(+), 16 deletions(-)

diff --git a/Mesh/meshGRegion.cpp b/Mesh/meshGRegion.cpp
index c4601de0cb..ed8ef5df03 100644
--- a/Mesh/meshGRegion.cpp
+++ b/Mesh/meshGRegion.cpp
@@ -1,4 +1,4 @@
-// $Id: meshGRegion.cpp,v 1.13 2006-11-26 01:11:01 geuzaine Exp $
+// $Id: meshGRegion.cpp,v 1.14 2006-11-26 02:14:24 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -20,6 +20,7 @@
 // Please report all bugs and problems to <gmsh@geuz.org>.
 
 #include "meshGRegion.h"
+#include "meshGRegionDelaunayInsertion.h"
 #include "GModel.h"
 #include "GRegion.h"
 #include "GFace.h"
@@ -122,11 +123,10 @@ void TransferTetgenMesh(GRegion *gr, tetgenio &in, tetgenio &out,
   }
  
   Msg(INFO,"%d points %d edges and %d faces in the final mesh",
-      out.numberofpoints,out.numberofedges,out.numberoftrifaces);
-
-  // Tetgen modifies both surface & edge mesh. So, we need to
-  // re-create everything
+      out.numberofpoints, out.numberofedges, out.numberoftrifaces);
 
+  // Tetgen modifies both surface & edge mesh, so we need to re-create
+  // everything
   std::list<GFace*> faces = gr->faces();
   std::list<GFace*>::iterator it = faces.begin();
   while(it != faces.end()){
@@ -134,6 +134,7 @@ void TransferTetgenMesh(GRegion *gr, tetgenio &in, tetgenio &out,
     for(unsigned int i = 0; i < gf->triangles.size(); i++)
       delete gf->triangles[i];
     gf->triangles.clear();
+    if(gf->meshRep) gf->meshRep->destroy();
     ++it;
   }    
   
@@ -147,9 +148,9 @@ void TransferTetgenMesh(GRegion *gr, tetgenio &in, tetgenio &out,
   // re-create the triangular meshes
   for (int i = 0; i < out.numberoftrifaces; i++){
     MVertex *v[3];
-    v[0] = numberedV[out.trifacelist[i * 3 + 0] -1];
-    v[1] = numberedV[out.trifacelist[i * 3 + 1] -1];
-    v[2] = numberedV[out.trifacelist[i * 3 + 2] -1];
+    v[0] = numberedV[out.trifacelist[i * 3 + 0] - 1];
+    v[1] = numberedV[out.trifacelist[i * 3 + 1] - 1];
+    v[2] = numberedV[out.trifacelist[i * 3 + 2] - 1];
     GFace *gf = gr->model()->faceByTag(out.trifacemarkerlist[i]);
     for(int j = 0; j < 3; j++){	  
       if(v[j]->onWhat()->dim() == 3){
@@ -160,7 +161,7 @@ void TransferTetgenMesh(GRegion *gr, tetgenio &in, tetgenio &out,
 	MFaceVertex *v1b = new MFaceVertex(v[j]->x(), v[j]->y(), v[j]->z(), 
 					   gf, 0., 0.);
 	gf->mesh_vertices.push_back(v1b);
-	numberedV[out.trifacelist[i * 3 + j] -1] = v1b;
+	numberedV[out.trifacelist[i * 3 + j] - 1] = v1b;
 	delete v[j];
 	v[j] = v1b;
       }
@@ -169,11 +170,11 @@ void TransferTetgenMesh(GRegion *gr, tetgenio &in, tetgenio &out,
     gf->triangles.push_back(t);	  
   }
   for(int i = 0; i < out.numberoftetrahedra; i++){
-    MVertex *v1 = numberedV[out.tetrahedronlist[i * 4 + 0] -1];
-    MVertex *v2 = numberedV[out.tetrahedronlist[i * 4 + 1] -1];
-    MVertex *v3 = numberedV[out.tetrahedronlist[i * 4 + 2] -1];
-    MVertex *v4 = numberedV[out.tetrahedronlist[i * 4 + 3] -1];
-    MTetrahedron *t = new  MTetrahedron(v1,v2,v3,v4);
+    MVertex *v1 = numberedV[out.tetrahedronlist[i * 4 + 0] - 1];
+    MVertex *v2 = numberedV[out.tetrahedronlist[i * 4 + 1] - 1];
+    MVertex *v3 = numberedV[out.tetrahedronlist[i * 4 + 2] - 1];
+    MVertex *v4 = numberedV[out.tetrahedronlist[i * 4 + 3] - 1];
+    MTetrahedron *t = new  MTetrahedron(v1, v2, v3, v4);
     gr->tetrahedra.push_back(t);
   }
 }
@@ -458,9 +459,12 @@ void meshGRegion::operator() (GRegion *gr)
     sprintf(opts, "pe%c", (CTX.verbosity < 3) ? 'Q': (CTX.verbosity > 6)? 'V': '\0');
     tetrahedralize(opts, &in, &out);
     TransferTetgenMesh(gr, in, out, numberedV);
+
+    // FIXME: all the volume nodes+tets now belong to the first
+    // region--we need to recategorize them into each separate region
+
     // now do insertion of points
-    void insertVerticesInRegion(GRegion *gr) ;
-    insertVerticesInRegion (gr); 
+    insertVerticesInRegion(gr); 
     // restore the initial set of faces
     gr->set(faces);
 #endif
-- 
GitLab