diff --git a/Graphics/Mesh.cpp b/Graphics/Mesh.cpp index e6fda2169aec3afdb79a27094584ad829a5ba1a3..c7ba19797b5340db82863256ecc97f87ccbd8010 100644 --- a/Graphics/Mesh.cpp +++ b/Graphics/Mesh.cpp @@ -1,4 +1,4 @@ -// $Id: Mesh.cpp,v 1.142 2005-11-20 03:58:29 geuzaine Exp $ +// $Id: Mesh.cpp,v 1.143 2005-12-05 20:36:55 geuzaine Exp $ // // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle // @@ -77,11 +77,11 @@ void draw_polygon_2d(double r, double g, double b, int n, glEnable(GL_DEPTH_TEST); } -int getFirstPhysical(int type, int num) +int getLastPhysical(int type, int num) { // If we visualize the mesh by coloring the physical entities, or if // we ask to display physical entity labels on elements, this - // routine returns the number of the first physical entity of type + // routine returns the number of the last physical entity of type // "type" that contains the elementary entity "num" if(CTX.mesh.color_carousel == 2 || CTX.mesh.label_type == 2){ static int warn = 1; @@ -91,7 +91,7 @@ int getFirstPhysical(int type, int num) Msg(WARNING, "You might want to color and/or label the mesh by elementary entity instead"); warn = 0; } - for(int i = 0; i < List_Nbr(THEM->PhysicalGroups); i++){ + for(int i = List_Nbr(THEM->PhysicalGroups)-1; i >=0 ; i--){ PhysicalGroup *p = *(PhysicalGroup**)List_Pointer(THEM->PhysicalGroups, i); if(p->Typ == type && List_Query(p->Entities, &num, fcmp_int)) return p->Num; @@ -344,7 +344,7 @@ void Draw_Mesh_Volume(void *a, void *b) CTX.mesh.vertex_arrays){ if(CTX.mesh.changed){ Msg(DEBUG, "regenerate volume mesh vertex arrays"); - thePhysical = getFirstPhysical(MSH_PHYSICAL_VOLUME, v->Num); + thePhysical = getLastPhysical(MSH_PHYSICAL_VOLUME, v->Num); // triangles if(v->TriVertexArray) delete v->TriVertexArray; v->TriVertexArray = new VertexArray(3, 1000); @@ -381,7 +381,7 @@ void Draw_Mesh_Volume(void *a, void *b) CTX.mesh.dual || CTX.mesh.volumes_num || CTX.mesh.points_per_element || CTX.mesh.normals){ Msg(DEBUG, "classic volume data path"); - thePhysical = getFirstPhysical(MSH_PHYSICAL_VOLUME, v->Num); + thePhysical = getLastPhysical(MSH_PHYSICAL_VOLUME, v->Num); Tree_Action(v->Simplexes, Draw_Mesh_Tetrahedron); Tree_Action(v->SimplexesBase, Draw_Mesh_Tetrahedron); Tree_Action(v->Hexahedra, Draw_Mesh_Hexahedron); @@ -432,7 +432,7 @@ void Draw_Mesh_Surface(void *a, void *b) if(s->ipar[4] == -2) s->ipar[4] = -1; Msg(DEBUG, "regenerate surface mesh vertex arrays"); - thePhysical = getFirstPhysical(MSH_PHYSICAL_SURFACE, s->Num); + thePhysical = getLastPhysical(MSH_PHYSICAL_SURFACE, s->Num); // triangles if(s->TriVertexArray) delete s->TriVertexArray; s->TriVertexArray = new VertexArray(3, Tree_Nbr(s->Simplexes) + @@ -465,7 +465,7 @@ void Draw_Mesh_Surface(void *a, void *b) if(!s->TriVertexArray || CTX.mesh.dual || CTX.mesh.surfaces_num || CTX.mesh.points_per_element || CTX.mesh.normals){ Msg(DEBUG, "classic triangle data path"); - thePhysical = getFirstPhysical(MSH_PHYSICAL_SURFACE, s->Num); + thePhysical = getLastPhysical(MSH_PHYSICAL_SURFACE, s->Num); Tree_Action(s->Simplexes, Draw_Mesh_Triangle); Tree_Action(s->SimplexesBase, Draw_Mesh_Triangle); } @@ -473,7 +473,7 @@ void Draw_Mesh_Surface(void *a, void *b) if(!s->QuadVertexArray || CTX.mesh.dual || CTX.mesh.surfaces_num || CTX.mesh.points_per_element || CTX.mesh.normals){ Msg(DEBUG, "classic quadrangle data path"); - thePhysical = getFirstPhysical(MSH_PHYSICAL_SURFACE, s->Num); + thePhysical = getLastPhysical(MSH_PHYSICAL_SURFACE, s->Num); Tree_Action(s->Quadrangles, Draw_Mesh_Quadrangle); } @@ -524,7 +524,7 @@ void Draw_Mesh_Curve(void *a, void *b) if(c->ipar[3] == -2) c->ipar[3] = -1; Msg(DEBUG, "regenerate curve mesh vertex array"); - thePhysical = getFirstPhysical(MSH_PHYSICAL_LINE, c->Num); + thePhysical = getLastPhysical(MSH_PHYSICAL_LINE, c->Num); if(c->LinVertexArray) delete c->LinVertexArray; c->LinVertexArray = new VertexArray(2, Tree_Nbr(c->Simplexes) + Tree_Nbr(c->SimplexesBase)); @@ -543,7 +543,7 @@ void Draw_Mesh_Curve(void *a, void *b) if(!c->LinVertexArray || CTX.mesh.lines_num || CTX.mesh.points_per_element || CTX.mesh.tangents){ Msg(DEBUG, "classic line data path"); - thePhysical = getFirstPhysical(MSH_PHYSICAL_LINE, c->Num); + thePhysical = getLastPhysical(MSH_PHYSICAL_LINE, c->Num); Tree_Action(c->Simplexes, Draw_Mesh_Line); Tree_Action(c->SimplexesBase, Draw_Mesh_Line); }