diff --git a/Geo/GeoUtils.cpp b/Geo/GeoUtils.cpp index a065a41fff0de8d767054e1902deb964b93cdb6d..81ce31524f173687ecc0d454d27f5653db6037b9 100644 --- a/Geo/GeoUtils.cpp +++ b/Geo/GeoUtils.cpp @@ -1,4 +1,4 @@ -// $Id: GeoUtils.cpp,v 1.1 2004-02-28 00:48:49 geuzaine Exp $ +// $Id: GeoUtils.cpp,v 1.2 2004-06-26 05:07:47 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -115,14 +115,14 @@ void setSurfaceGeneratrices(Surface *s, List_T *loops) void setVolumeSurfaces(Volume *v, List_T * loops) { - v->Surfaces = List_Create(4, 1, sizeof(Surface *)); + List_Reset(v->Surfaces); + List_Reset(v->SurfacesOrientations); for(int i = 0; i < List_Nbr(loops); i++) { int il; List_Read(loops, i, &il); SurfaceLoop *sl; if(!(sl = FindSurfaceLoop(il, THEM))) { Msg(GERROR, "Unknown Surface Loop %d", il); - List_Delete(v->Surfaces); return; } else { @@ -130,13 +130,19 @@ void setVolumeSurfaces(Volume *v, List_T * loops) int is; List_Read(sl->Surfaces, j, &is); Surface *s; + // FIXME: this is a little bit tricky: contrary to curves in + // edge loops, we don't actually create "negative" + // surfaces. So we just store the signs in another list + // (beeerk...) if(!(s = FindSurface(abs(is), THEM))) { Msg(GERROR, "Unknown Surface %d", is); - List_Delete(v->Surfaces); return; } - else + else{ List_Add(v->Surfaces, &s); + int tmp = (s->Num > 0) ? 1 : -1; + List_Add(v->SurfacesOrientations, &tmp); + } } } } diff --git a/Mesh/Create.cpp b/Mesh/Create.cpp index 09bf3715eb3034817153391c33ab914119f5027e..dfc5f309af5ee337f25daeadbae8515cfa6565b5 100644 --- a/Mesh/Create.cpp +++ b/Mesh/Create.cpp @@ -1,4 +1,4 @@ -// $Id: Create.cpp,v 1.59 2004-06-23 22:23:42 geuzaine Exp $ +// $Id: Create.cpp,v 1.60 2004-06-26 05:07:47 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -719,6 +719,7 @@ Volume *Create_Volume(int Num, int Typ) pV->ipar[i] = 0; pV->TrsfPoints = List_Create(6, 6, sizeof(Vertex *)); pV->Surfaces = List_Create(1, 2, sizeof(Surface *)); + pV->SurfacesOrientations = List_Create(1, 2, sizeof(int)); pV->Simplexes = Tree_Create(sizeof(Simplex *), compareQuality); pV->Vertices = Tree_Create(sizeof(Vertex *), compareVertex); pV->Hexahedra = Tree_Create(sizeof(Hexahedron *), compareHexahedron); @@ -739,6 +740,7 @@ void Free_Volume(void *a, void *b) if(pV) { List_Delete(pV->TrsfPoints); List_Delete(pV->Surfaces); // surfaces freed elsewhere + List_Delete(pV->SurfacesOrientations); Tree_Action(pV->Simplexes, Free_Simplex); Tree_Delete(pV->Simplexes); Tree_Delete(pV->Simp_Surf); // for old extrusion mesh generator diff --git a/Mesh/Mesh.h b/Mesh/Mesh.h index 224bc57c865d0785d71e1e5fe6a6a7124e82ef36..8ef09c18f0cd591a5aaca657245ebac4465756b6 100644 --- a/Mesh/Mesh.h +++ b/Mesh/Mesh.h @@ -301,6 +301,7 @@ typedef struct { ExtrudeParams *Extrude; List_T *TrsfPoints; List_T *Surfaces; + List_T *SurfacesOrientations; Tree_T *Vertices; Tree_T *Edges; Tree_T *Faces;