X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHDS%2FSMESHDS_SubMesh.cxx;h=21d6da43a804367736d594a50a4a18d2532f0eba;hb=7646a7f54e99134575c14521e60b6fa8c2418201;hp=11dbb124a294b65f36714699a150ae3badac1ff3;hpb=a17b36970bc61da1d664453c615754997c925b18;p=modules%2Fsmesh.git diff --git a/src/SMESHDS/SMESHDS_SubMesh.cxx b/src/SMESHDS/SMESHDS_SubMesh.cxx index 11dbb124a..21d6da43a 100644 --- a/src/SMESHDS/SMESHDS_SubMesh.cxx +++ b/src/SMESHDS/SMESHDS_SubMesh.cxx @@ -154,7 +154,7 @@ bool SMESHDS_SubMesh::RemoveElement(const SMDS_MeshElement * ME, bool isElemDele //======================================================================= //function : AddNode -//purpose : +//purpose : //======================================================================= void SMESHDS_SubMesh::AddNode(const SMDS_MeshNode * N) @@ -240,7 +240,7 @@ int SMESHDS_SubMesh::NbElements() const //======================================================================= //function : NbNodes -//purpose : +//purpose : //======================================================================= int SMESHDS_SubMesh::NbNodes() const @@ -299,10 +299,10 @@ public: template class MyIterator : public SMDS_Iterator { - public: +public: MyIterator (const set& theSubMeshes) : myMore(false), mySubIt( theSubMeshes.begin() ), mySubEnd( theSubMeshes.end() ) - {} + {} bool more() { while (( !myElemIt.get() || !myElemIt->more() ) && mySubIt != mySubEnd) @@ -320,11 +320,11 @@ template class MyIterator : public SMDS_Iterator elem = myElemIt->next(); return elem; } - protected: +protected: virtual boost::shared_ptr< SMDS_Iterator > - getElements(const SMESHDS_SubMesh*) const = 0; + getElements(const SMESHDS_SubMesh*) const = 0; - private: +private: bool myMore; set::const_iterator mySubIt, mySubEnd; boost::shared_ptr< SMDS_Iterator > myElemIt; @@ -336,7 +336,7 @@ template class MyIterator : public SMDS_Iterator class MyElemIterator: public MyIterator { - public: +public: MyElemIterator (const set& theSubMeshes) :MyIterator( theSubMeshes ) {} SMDS_ElemIteratorPtr getElements(const SMESHDS_SubMesh* theSubMesh) const @@ -349,28 +349,30 @@ class MyElemIterator: public MyIterator class MyNodeIterator: public MyIterator { - public: +public: MyNodeIterator (const set& theSubMeshes) :MyIterator( theSubMeshes ) {} SMDS_NodeIteratorPtr getElements(const SMESHDS_SubMesh* theSubMesh) const { return theSubMesh->GetNodes(); } }; - + //======================================================================= //function : GetElements -//purpose : +//purpose : //======================================================================= SMDS_ElemIteratorPtr SMESHDS_SubMesh::GetElements() const { if ( IsComplexSubmesh() ) return SMDS_ElemIteratorPtr( new MyElemIterator( mySubMeshes )); - return SMDS_ElemIteratorPtr(new MySetIterator >(myElements)); + + return SMDS_ElemIteratorPtr + (new MySetIterator >(myElements)); } //======================================================================= //function : GetNodes -//purpose : +//purpose : //======================================================================= SMDS_NodeIteratorPtr SMESHDS_SubMesh::GetNodes() const @@ -378,7 +380,8 @@ SMDS_NodeIteratorPtr SMESHDS_SubMesh::GetNodes() const if ( IsComplexSubmesh() ) return SMDS_NodeIteratorPtr( new MyNodeIterator( mySubMeshes )); - return SMDS_NodeIteratorPtr(new MySetIterator >(myNodes)); + return SMDS_NodeIteratorPtr + (new MySetIterator >(myNodes)); } //======================================================================= @@ -444,7 +447,7 @@ bool SMESHDS_SubMesh::IsQuadratic() const //======================================================================= //function : AddSubMesh -//purpose : +//purpose : //======================================================================= void SMESHDS_SubMesh::AddSubMesh( const SMESHDS_SubMesh* theSubMesh ) @@ -503,6 +506,24 @@ SMESHDS_SubMeshIteratorPtr SMESHDS_SubMesh::GetSubMeshIterator() const void SMESHDS_SubMesh::Clear() { + if ( myParent && myParent->NbNodes() > 0 ) + { + for ( size_t i = 0; i < myElements.size(); ++i ) + { + if ( myElements[i] && + myElements[i]->GetID() > 0 && + myElements[i] == myParent->FindElement( myElements[i]->GetID() )) // not deleted + const_cast< SMDS_MeshElement* >( myElements[i] )->setShapeId( 0 ); + } + for ( size_t i = 0; i < myNodes.size(); ++i ) + { + if ( myNodes[i] && + myNodes[i]->GetID() > 0 && + myNodes[i] == myParent->FindNode( myNodes[i]->GetID() )) // not deleted + const_cast< SMDS_MeshNode* >( myNodes[i] )->setShapeId( 0 ); + } + } + clearVector( myElements ); clearVector( myNodes ); myUnusedIdNodes = 0; @@ -530,12 +551,12 @@ void SMESHDS_SubMesh::compactList() { std::vector newElems; newElems.reserve( myElements.size() - myUnusedIdElements ); - for (size_t i = 0; i < myElements.size(); i++) - if (myElements[i]) + for ( size_t i = 0; i < myElements.size(); i++) + if ( myElements[i] ) { SMDS_MeshElement* elem = (SMDS_MeshElement*)myElements[i]; - elem->setIdInShape(newElems.size()); - newElems.push_back(elem); + elem->setIdInShape( newElems.size() ); + newElems.push_back( elem ); } myElements.swap(newElems); myUnusedIdElements = 0; @@ -545,12 +566,12 @@ void SMESHDS_SubMesh::compactList() { std::vector newNodes; newNodes.reserve( myNodes.size() - myUnusedIdNodes ); - for (size_t i = 0; i < myNodes.size(); i++) - if (myNodes[i]) + for ( size_t i = 0; i < myNodes.size(); i++ ) + if ( myNodes[i] ) { SMDS_MeshNode* node = (SMDS_MeshNode*)myNodes[i]; - node->setIdInShape(newNodes.size()); - newNodes.push_back(node); + node->setIdInShape( newNodes.size() ); + newNodes.push_back( node ); } myNodes.swap(newNodes); myUnusedIdNodes = 0;