diff --git a/Mesh/3D_Extrude.cpp b/Mesh/3D_Extrude.cpp index a5d088827f1fc89c21017e20b192a72d2cc3d62e..b30fdedb8b3b00f7d8a53df29a20dd974171f97b 100644 --- a/Mesh/3D_Extrude.cpp +++ b/Mesh/3D_Extrude.cpp @@ -1,4 +1,4 @@ -// $Id: 3D_Extrude.cpp,v 1.34 2001-08-15 07:00:44 geuzaine Exp $ +// $Id: 3D_Extrude.cpp,v 1.35 2001-08-15 08:16:30 geuzaine Exp $ #include "Gmsh.h" #include "Numeric.h" @@ -104,6 +104,15 @@ List_T* getnxl(Vertex *v, int dim){ return 0; } +void Free_ExtrudedPoints(List_T* Extruded_Points){ + nxl *NXL; + for(int i=0; i<List_Nbr(Extruded_Points); i++){ + NXL = (nxl*)List_Pointer(Extruded_Points, i); + List_Delete(NXL->List); + } + List_Delete(Extruded_Points); +} + typedef struct{ int a, b; }nxn; @@ -804,7 +813,7 @@ int Extrude_Mesh (Volume * v){ } int Extrude_Mesh (Tree_T * Volumes){ - int i, j, doit=0, reco=0; + int i, j, extrude=0, recombine=0; Surface *s; Vertex *v1; List_T *list; @@ -812,14 +821,16 @@ int Extrude_Mesh (Tree_T * Volumes){ InitExtrude (); DIM = 3; + Msg(STATUS2, "Mesh 3D... (initial)"); + List_T *vol = Tree2List(Volumes); for (int ivol = 0; ivol < List_Nbr(vol); ivol++){ List_Read(vol, ivol, &THEV); ep = THEV->Extrude; if(ep && ep->mesh.ExtrudeMesh && ep->geo.Mode == EXTRUDED_ENTITY){ - doit = 1; - if(ep->mesh.Recombine) reco = 1; + extrude = 1; + if(ep->mesh.Recombine) recombine = 1; for (i = 0; i < List_Nbr (THEV->Surfaces); i++){ List_Read (THEV->Surfaces, i, &s); list = Tree2List (s->Vertices); @@ -831,7 +842,7 @@ int Extrude_Mesh (Tree_T * Volumes){ } } } - if(!doit) return false; + if(!extrude) return false; for (int ivol = 0; ivol < List_Nbr (vol); ivol++){ List_Read(vol, ivol, &THEV); @@ -839,11 +850,14 @@ int Extrude_Mesh (Tree_T * Volumes){ NUM = THEV->Num; if(ep && ep->mesh.ExtrudeMesh && ep->geo.Mode == EXTRUDED_ENTITY){ s = FindSurface (ep->geo.Source, THEM); - if(s) Extrude_Surface1 (s); + if(s){ + Msg(STATUS3, "Meshing Volume %d", NUM); + Extrude_Surface1 (s); + } } } - - if(!reco){ + + if(!recombine){ j = 0; do{ TEST_IS_ALL_OK=0; @@ -857,22 +871,27 @@ int Extrude_Mesh (Tree_T * Volumes){ if(s) Extrude_Surface2 (s); } } - Msg(INFO, "%d swaps", TEST_IS_ALL_OK); + Msg(STATUS3, "Swapping %d", TEST_IS_ALL_OK); if(TEST_IS_ALL_OK == j){ - Msg(GERROR, "Unable to swap all edges: try Recombine..."); + if(j) Msg(GERROR, "Unable to swap all edges: try Recombine..."); break; } j = TEST_IS_ALL_OK; }while(TEST_IS_ALL_OK); } + Msg(STATUS2, "Mesh 3D... (Final)"); + for (int ivol = 0; ivol < List_Nbr (vol); ivol++){ List_Read(vol, ivol, &THEV); ep = THEV->Extrude; NUM = THEV->Num; if(ep && ep->mesh.ExtrudeMesh && ep->geo.Mode == EXTRUDED_ENTITY){ s = FindSurface (ep->geo.Source, THEM); - if(s) Extrude_Surface3 (s); + if(s){ + Msg(STATUS3, "Meshing Volume %d", NUM); + Extrude_Surface3 (s); + } } } @@ -880,7 +899,8 @@ int Extrude_Mesh (Tree_T * Volumes){ for (int ivol = 0; ivol < List_Nbr (vol); ivol++){ List_Read(vol, ivol, &THEV); ep = THEV->Extrude; - if(ep && ep->mesh.ExtrudeMesh && ep->geo.Mode == EXTRUDED_ENTITY){ + if(ep && ep->mesh.ExtrudeMesh && ep->geo.Mode == EXTRUDED_ENTITY && + !ep->mesh.Recombine){ for (i = 0; i < List_Nbr (THEV->Surfaces); i++){ List_Read(THEV->Surfaces, i, &s); if(!List_Search(list, &s, compareSurface)) @@ -894,6 +914,7 @@ int Extrude_Mesh (Tree_T * Volumes){ Tree_Action(s->Simplexes, Free_NegativeSimplex); Tree_Delete(s->Simplexes); s->Simplexes = tmp; + Msg(STATUS3, "Coherence Surface %d", s->Num); Extrude_Mesh(s); } diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp index 79cf5b9f93f0d90205f62cb92725092d854b277e..0b0a1143ee12eaf2bbfe03a7fbe5c8e993273e9a 100644 --- a/Mesh/Generator.cpp +++ b/Mesh/Generator.cpp @@ -1,4 +1,4 @@ -// $Id: Generator.cpp,v 1.25 2001-08-15 07:00:44 geuzaine Exp $ +// $Id: Generator.cpp,v 1.26 2001-08-15 08:16:30 geuzaine Exp $ #include "Gmsh.h" #include "Numeric.h" @@ -116,13 +116,11 @@ void Maillage_Dimension_3 (Mesh * M){ Tree_Insert (M->Volumes, &v); if(CTX.mesh.oldxtrude){//old automatic extrusion algorithm - void Extrude_Mesh_Old(Mesh *M); Extrude_Mesh_Old(M); } else{ - int Extrude_Mesh (Tree_T * Volumes); Extrude_Mesh(M->Volumes); - Tree_Action (M->Volumes, Maillage_Volume); + Tree_Action(M->Volumes, Maillage_Volume); } t2 = Cpu(); diff --git a/Mesh/Mesh.h b/Mesh/Mesh.h index 064c0af77882095c1a34e8b4212e60c8893b07c2..9ce53106a62a849014cd68ef570135ca9a788bec 100644 --- a/Mesh/Mesh.h +++ b/Mesh/Mesh.h @@ -420,7 +420,9 @@ void Maillage_Volume (void *data, void *dum); int Extrude_Mesh (Curve * c); int Extrude_Mesh (Surface * s); int Extrude_Mesh (Volume * v); +int Extrude_Mesh (Tree_T * Volumes); void ExitExtrude(); +void Extrude_Mesh_Old(Mesh *M); int MeshTransfiniteSurface (Surface *sur); int MeshTransfiniteVolume (Volume *vol); diff --git a/Mesh/Vertex.cpp b/Mesh/Vertex.cpp index d3397144de00be9eee0fd1572880dedc3d1c041d..dcbd509b26a5958c4636aec5e8abc89e358b4c0e 100644 --- a/Mesh/Vertex.cpp +++ b/Mesh/Vertex.cpp @@ -1,4 +1,4 @@ -// $Id: Vertex.cpp,v 1.8 2001-06-06 15:30:18 remacle Exp $ +// $Id: Vertex.cpp,v 1.9 2001-08-15 08:16:30 geuzaine Exp $ #include "Gmsh.h" #include "Vertex.h" @@ -80,7 +80,12 @@ void Delete_Vertex ( Vertex *pV ) { List_Delete(pV->ListSurf); List_Delete(pV->ListCurves); - List_Delete(pV->Extruded_Points); + if(CTX.mesh.oldxtrude){//old automatic extrusion algorithm + List_Delete(pV->Extruded_Points); + } + else{ + Free_ExtrudedPoints(pV->Extruded_Points); + } delete pV; } } diff --git a/Mesh/Vertex.h b/Mesh/Vertex.h index 5ea12b41461887a1ae2ce909babc755a48a1af7a..444baaf117e7595398d6f396ffdd3321569ce7c5 100644 --- a/Mesh/Vertex.h +++ b/Mesh/Vertex.h @@ -35,5 +35,6 @@ int comparePosition (const void *a, const void *b); Vertex *Create_Vertex (int Num, double X, double Y, double Z, double lc, double u); void Delete_Vertex ( Vertex *pV ); void Free_Vertex (void *a, void *b); +void Free_ExtrudedPoints(List_T* Extruded_Points); #endif