X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHDS%2FSMESHDS_Mesh.cxx;h=089e9feecf52d3d2efe338179d855ae3a2eb1aa2;hp=885a76107185f07d7b76209a5139f64335f1d292;hb=5d68554076bbca0e1e95fb0db215a6c2b84b6c54;hpb=30c56009c3ed5f2637465aa75d492224915ae8e1 diff --git a/src/SMESHDS/SMESHDS_Mesh.cxx b/src/SMESHDS/SMESHDS_Mesh.cxx index 885a76107..089e9feec 100644 --- a/src/SMESHDS/SMESHDS_Mesh.cxx +++ b/src/SMESHDS/SMESHDS_Mesh.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -888,15 +888,16 @@ void SMESHDS_Mesh::RemoveFreeNode(const SMDS_MeshNode * n, set::iterator GrIt = myGroups.begin(); for (; GrIt != myGroups.end(); GrIt++) { SMESHDS_Group* group = dynamic_cast(*GrIt); - if (!group || group->IsEmpty()) continue; - group->SMDSGroup().Remove(n); + if (group && !group->IsEmpty()) + group->SMDSGroup().Remove(n); } } // Rm from sub-mesh // Node should belong to only one sub-mesh - if( subMesh ) - subMesh->RemoveNode(n,/*deleted=*/false); + if ( !subMesh || !subMesh->RemoveNode(n,/*deleted=*/false)) + if (( subMesh = MeshElements( n->getshapeId() ))) + subMesh->RemoveNode(n,/*deleted=*/false ); SMDS_Mesh::RemoveFreeElement(n); } @@ -915,11 +916,12 @@ void SMESHDS_Mesh::RemoveElement(const SMDS_MeshElement * elt) if (!hasConstructionEdges() && !hasConstructionFaces()) { SMESHDS_SubMesh* subMesh=0; - map::iterator SubIt = myShapeIndexToSubMesh.begin(); - for ( ; !subMesh && SubIt != myShapeIndexToSubMesh.end(); SubIt++ ) - if (!SubIt->second->IsComplexSubmesh() && SubIt->second->Contains( elt )) + if ( elt->getshapeId() > 0 ) + { + map::iterator SubIt = myShapeIndexToSubMesh.find( elt->getshapeId() ); + if ( SubIt != myShapeIndexToSubMesh.end() ) subMesh = SubIt->second; - //MESSAGE("subMesh " << elt->getshapeId()); + } RemoveFreeElement( elt, subMesh, true); return; } @@ -997,6 +999,10 @@ void SMESHDS_Mesh::ClearMesh() g->Clear(); g->SetType( groupType ); } + else + { + (*group)->Extent(); // to free cashed elements in GroupOnFilter's + } } }