From: eap Date: Thu, 9 Jun 2005 07:00:00 +0000 (+0000) Subject: PAL9022. before algo->Compute(), clean only elements directly bound to the shape... X-Git-Tag: T2_2_4a3~1 X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=commitdiff_plain;h=6674c3301f6d1d0b88cce86117889474c7c0a2f1 PAL9022. before algo->Compute(), clean only elements directly bound to the shape a submesh is dedicated to --- diff --git a/src/SMESH/SMESH_subMesh.cxx b/src/SMESH/SMESH_subMesh.cxx index ce4e8ee23..5e67bd73a 100644 --- a/src/SMESH/SMESH_subMesh.cxx +++ b/src/SMESH/SMESH_subMesh.cxx @@ -46,12 +46,11 @@ using namespace std; #include #include -#include - #ifdef _DEBUG_ #include #include #include +#include #endif //============================================================================= @@ -1110,6 +1109,35 @@ void SMESH_subMesh::DumpAlgoState(bool isMain) */ //============================================================================= +static void removeSubMesh( SMESHDS_Mesh * meshDS, const TopoDS_Shape& subShape) +{ + SMESHDS_SubMesh * subMeshDS = meshDS->MeshElements(subShape); + if (subMeshDS!=NULL) + { + SMDS_ElemIteratorPtr ite=subMeshDS->GetElements(); + while(ite->more()) + { + const SMDS_MeshElement * elt = ite->next(); + //MESSAGE( " RM elt: "<GetID()<<" ( "<NbNodes()<<" )" ); + meshDS->RemoveElement(elt); + } + + SMDS_NodeIteratorPtr itn=subMeshDS->GetNodes(); + while(itn->more()) + { + const SMDS_MeshNode * node = itn->next(); + //MESSAGE( " RM node: "<GetID()); + meshDS->RemoveNode(node); + } + } +} + +//============================================================================= +/*! + * + */ +//============================================================================= + bool SMESH_subMesh::ComputeStateEngine(int event) { //MESSAGE("SMESH_subMesh::ComputeStateEngine"); @@ -1209,8 +1237,8 @@ bool SMESH_subMesh::ComputeStateEngine(int event) _computeState = FAILED_TO_COMPUTE; break; } - RemoveSubMeshElementsAndNodes(); // compute + removeSubMesh( _meshDS, _subShape ); if (!algo->NeedDescretBoundary() && !algo->OnlyUnaryInput()) ret = ApplyToCollection( algo, GetCollection( gen, algo ) ); else @@ -1225,9 +1253,10 @@ bool SMESH_subMesh::ComputeStateEngine(int event) #ifdef _DEBUG_ // Show vertices location of a failed shape - TopExp_Explorer exp( _subShape, TopAbs_VERTEX); - for ( ; exp.More(); exp.Next() ) { - gp_Pnt P( BRep_Tool::Pnt( TopoDS::Vertex( exp.Current() ))); + TopTools_IndexedMapOfShape vMap; + TopExp::MapShapes( _subShape, TopAbs_VERTEX, vMap ); + for ( int iv = 1; iv <= vMap.Extent(); ++iv ) { + gp_Pnt P( BRep_Tool::Pnt( TopoDS::Vertex( vMap( iv ) ))); cout << P.X() << " " << P.Y() << " " << P.Z() << " " << endl; } #endif @@ -1518,35 +1547,6 @@ void SMESH_subMesh::CleanDependants() */ //============================================================================= -static void removeSubMesh( SMESHDS_Mesh * meshDS, const TopoDS_Shape& subShape) -{ - SMESHDS_SubMesh * subMeshDS = meshDS->MeshElements(subShape); - if (subMeshDS!=NULL) - { - SMDS_ElemIteratorPtr ite=subMeshDS->GetElements(); - while(ite->more()) - { - const SMDS_MeshElement * elt = ite->next(); - //MESSAGE( " RM elt: "<GetID()<<" ( "<NbNodes()<<" )" ); - meshDS->RemoveElement(elt); - } - - SMDS_NodeIteratorPtr itn=subMeshDS->GetNodes(); - while(itn->more()) - { - const SMDS_MeshNode * node = itn->next(); - //MESSAGE( " RM node: "<GetID()); - meshDS->RemoveNode(node); - } - } -} - -//============================================================================= -/*! - * - */ -//============================================================================= - void SMESH_subMesh::RemoveSubMeshElementsAndNodes() { //SCRUTE(_subShape.ShapeType());