X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMDS%2FSMDS_MeshGroup.cxx;h=e2f5fbccfa3750effcc0dc1a29fc7f709339be65;hp=eb2331f989e42b7c6b311800cd53700300658e23;hb=19fe2e412fa1cb1fd33d7a2580b2483280db811e;hpb=a17b36970bc61da1d664453c615754997c925b18;ds=sidebyside diff --git a/src/SMDS/SMDS_MeshGroup.cxx b/src/SMDS/SMDS_MeshGroup.cxx index eb2331f98..e2f5fbccf 100644 --- a/src/SMDS/SMDS_MeshGroup.cxx +++ b/src/SMDS/SMDS_MeshGroup.cxx @@ -20,7 +20,7 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// SMESH SMDS : implementaion of Salome mesh data structure +// SMESH SMDS : implementation of Salome mesh data structure // File : SMDS_MeshGroup.cxx // Author : Jean-Michel BOULCOURT // Module : SMESH @@ -30,89 +30,33 @@ #endif #include "SMDS_MeshGroup.hxx" -#include "utilities.h" -using namespace std; +#include "SMDS_SetIterator.hxx" +#include "ObjectPool.hxx" -//======================================================================= -//function : SMDS_MeshGroup -//purpose : -//======================================================================= +#include -SMDS_MeshGroup::SMDS_MeshGroup(const SMDS_Mesh * theMesh, - const SMDSAbs_ElementType theType) - :myMesh(theMesh),myType(theType), myParent(NULL), myTic(0) -{ -} +#include //======================================================================= //function : SMDS_MeshGroup -//purpose : +//purpose : //======================================================================= -SMDS_MeshGroup::SMDS_MeshGroup(SMDS_MeshGroup * theParent, +SMDS_MeshGroup::SMDS_MeshGroup(const SMDS_Mesh * theMesh, const SMDSAbs_ElementType theType) - :myMesh(theParent->myMesh),myType(theType), myParent(theParent) -{ -} - -//======================================================================= -//function : AddSubGroup -//purpose : -//======================================================================= - -const SMDS_MeshGroup *SMDS_MeshGroup::AddSubGroup - (const SMDSAbs_ElementType theType) -{ - const SMDS_MeshGroup * subgroup = new SMDS_MeshGroup(this,theType); - myChildren.insert(myChildren.end(),subgroup); - return subgroup; -} - -//======================================================================= -//function : RemoveSubGroup -//purpose : -//======================================================================= - -bool SMDS_MeshGroup::RemoveSubGroup(const SMDS_MeshGroup * theGroup) + : SMDS_ElementHolder( theMesh ), myType( theType ), myTic( 0 ) { - bool found = false; - list::iterator itgroup; - for(itgroup=myChildren.begin(); itgroup!=myChildren.end(); itgroup++) - { - const SMDS_MeshGroup* subgroup=*itgroup; - if (subgroup == theGroup) - { - found = true; - myChildren.erase(itgroup); - } - } - - return found; } -//======================================================================= -//function : RemoveFromParent -//purpose : -//======================================================================= - -bool SMDS_MeshGroup::RemoveFromParent() -{ - - if (myParent==NULL) return false; - else - { - return (myParent->RemoveSubGroup(this)); - } -} //======================================================================= //function : Clear -//purpose : +//purpose : //======================================================================= void SMDS_MeshGroup::Clear() { - myElements.clear(); + clearVector( myElements ); myType = SMDSAbs_All; ++myTic; } @@ -125,15 +69,15 @@ void SMDS_MeshGroup::Clear() bool SMDS_MeshGroup::Add(const SMDS_MeshElement * theElem) { // the type of the group is determined by the first element added - if (myElements.empty()) { + if ( myElements.empty() ) { myType = theElem->GetType(); } - else if (theElem->GetType() != myType) { + else if ( theElem->GetType() != myType ) { MESSAGE("SMDS_MeshGroup::Add : Type Mismatch "<GetType()<<"!="<::iterator found = myElements.find(theElem); + TElementSet::iterator found = myElements.find(theElem); if ( found != myElements.end() ) { - myElements.erase(found); - if (myElements.empty()) myType = SMDSAbs_All; + myElements.erase( found ); + if ( myElements.empty() ) myType = SMDSAbs_All; ++myTic; return true; } @@ -158,12 +102,12 @@ bool SMDS_MeshGroup::Remove(const SMDS_MeshElement * theElem) //======================================================================= //function : Contains -//purpose : +//purpose : //======================================================================= bool SMDS_MeshGroup::Contains(const SMDS_MeshElement * theElem) const { - return myElements.find(theElem)!=myElements.end(); + return myElements.find( theElem ) != myElements.end(); } //======================================================================= @@ -176,3 +120,37 @@ void SMDS_MeshGroup::SetType(const SMDSAbs_ElementType theType) if (IsEmpty()) myType = theType; } + +//======================================================================= +//function : GetElements +//purpose : +//======================================================================= + +SMDS_ElemIteratorPtr SMDS_MeshGroup::GetElements() const +{ + typedef SMDS_SetIterator< const SMDS_MeshElement*, TIterator > TSetIterator; + return boost::make_shared< TSetIterator >( myElements.begin(), myElements.end() ); +} + +//======================================================================= +//function : Move contents of another group +//purpose : +//======================================================================= + +void SMDS_MeshGroup::operator=( SMDS_MeshGroup && other ) +{ + myMesh = other.myMesh; + myType = other.myType; + myElements = std::move( other.myElements ); + ++myTic; +} + +//======================================================================= +//function : tmpClear +//purpose : temporary remove its elements before mesh compacting +//======================================================================= + +void SMDS_MeshGroup::tmpClear() +{ + myElements.clear(); +}