From 5456fd8199b3e5e6e87e8974fb7e104e77f160a1 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Tue, 25 Sep 2001 08:19:48 +0000 Subject: [PATCH] fix bug for combined extruded lines+surfaces --- Mesh/3D_Extrude.cpp | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/Mesh/3D_Extrude.cpp b/Mesh/3D_Extrude.cpp index 09f348c632..7b11e2a647 100644 --- a/Mesh/3D_Extrude.cpp +++ b/Mesh/3D_Extrude.cpp @@ -1,4 +1,4 @@ -// $Id: 3D_Extrude.cpp,v 1.46 2001-09-01 15:18:32 geuzaine Exp $ +// $Id: 3D_Extrude.cpp,v 1.47 2001-09-25 08:19:48 geuzaine Exp $ #include "Gmsh.h" #include "Numeric.h" @@ -16,9 +16,9 @@ static int DIM, NUM; // current dimension of parent entity static Tree_T *Tree_Ares = NULL, *Tree_Swaps = NULL; static int TEST_IS_ALL_OK; -static Curve *THEC; -static Surface *THES; -static Volume *THEV; +static Curve *THEC=NULL; +static Surface *THES=NULL; +static Volume *THEV=NULL; static ExtrudeParams *ep; static Tree_T *Vertex_Bound = NULL, *ToAdd = NULL; @@ -72,6 +72,9 @@ List_T* getnxl(Vertex *v, int dim){ Surface *s; List_T *list; + // the test on the source entity is in case we extrude a + // curve/surface resulting from the extrusion of a point/curve... + if(dim==1){ if((list = getnxl(v, THEC))) return list; @@ -81,8 +84,7 @@ List_T* getnxl(Vertex *v, int dim){ return list; else{ for(i=0; i<List_Nbr(THES->Generatrices); i++){ - List_Read(THES->Generatrices, i, &c); - if((list = getnxl(v, c))) + if((abs(ep->geo.Source)!=c->Num) && (list = getnxl(v, c))) return list; } } @@ -93,15 +95,17 @@ List_T* getnxl(Vertex *v, int dim){ else{ for(i=0; i<List_Nbr(THEV->Surfaces); i++){ List_Read(THEV->Surfaces, i, &s); - if((list = getnxl(v, s))) + if((ep->geo.Source!=s->Num) && (list = getnxl(v, s))) return list; } for(i=0; i<List_Nbr(THEV->Surfaces); i++){ List_Read(THEV->Surfaces, i, &s); - for(j=0; j<List_Nbr(s->Generatrices); j++){ - List_Read(s->Generatrices, j, &c); - if((list = getnxl(v, c))) - return list; + if(ep->geo.Source!=s->Num){ + for(j=0; j<List_Nbr(s->Generatrices); j++){ + List_Read(s->Generatrices, j, &c); + if((list = getnxl(v, c))) + return list; + } } } } @@ -330,6 +334,8 @@ void Extrude_Simplex_Phase3 (void *data, void *dum){ L2 = getnxl(s->V[2],DIM); if(s->V[3]) L3 = getnxl(s->V[3],DIM); + //printf("orig: %d %d %d %d\n",s->V[0]->Num,s->V[1]->Num,s->V[2]->Num,s->V[3]->Num); + k = 0; for (i = 0; i < ep->mesh.NbLayer; i++){ for (j = 0; j < ep->mesh.NbElmLayer[i]; j++){ @@ -339,10 +345,16 @@ void Extrude_Simplex_Phase3 (void *data, void *dum){ List_Read(L1,k,&v[1]); List_Read(L2,k,&v[2]); List_Read(L3,k,&v[3]); + + //printf(" 1: %d %d %d %d\n",v[0]->Num,v[1]->Num,v[2]->Num,v[3]->Num); + List_Read(L0,k+1,&v[4]); List_Read(L1,k+1,&v[5]); List_Read(L2,k+1,&v[6]); List_Read(L3,k+1,&v[7]); + + //printf(" 2: %d %d %d %d\n",v[4]->Num,v[5]->Num,v[6]->Num,v[7]->Num); + } else{ List_Read(L0, k, &v[0]); -- GitLab