X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Group_i.cxx;h=7a75b310be55a430c394341c1e546a0483eb31c0;hb=f43fead4dd055ab274702fe93f6978dd492edbdf;hp=11dbe143b70ec28bce2ebffc32fb9f06eb76f37f;hpb=e4737e85f0da6d3f90fd08f6be1c2825195fe16f;p=modules%2Fsmesh.git diff --git a/src/SMESH_I/SMESH_Group_i.cxx b/src/SMESH_I/SMESH_Group_i.cxx index 11dbe143b..7a75b310b 100644 --- a/src/SMESH_I/SMESH_Group_i.cxx +++ b/src/SMESH_I/SMESH_Group_i.cxx @@ -16,7 +16,7 @@ // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // // @@ -33,8 +33,14 @@ #include "SMESHDS_Group.hxx" #include "SMESHDS_GroupOnGeom.hxx" #include "SMDSAbs_ElementType.hxx" + +#include "SMESH_Filter_i.hxx" +#include "SMESH_PythonDump.hxx" + #include "utilities.h" +using namespace SMESH; + //============================================================================= /*! * @@ -46,17 +52,23 @@ SMESH_GroupBase_i::SMESH_GroupBase_i( PortableServer::POA_ptr thePOA, SMESH_Mesh myMeshServant( theMeshServant ), myLocalID( theLocalID ) { - thePOA->activate_object( this ); + // PAL7962: san -- To ensure correct mapping of servant and correct reference counting in GenericObj_i, + // servant activation is performed by SMESH_Mesh_i::createGroup() + // thePOA->activate_object( this ); } SMESH_Group_i::SMESH_Group_i( PortableServer::POA_ptr thePOA, SMESH_Mesh_i* theMeshServant, const int theLocalID ) -: SMESH_GroupBase_i( thePOA, theMeshServant, theLocalID ) + : SALOME::GenericObj_i( thePOA ), + SMESH_GroupBase_i( thePOA, theMeshServant, theLocalID ) { + MESSAGE("SMESH_Group_i; this = "<SetName(theName); @@ -198,6 +214,10 @@ CORBA::Boolean SMESH_GroupBase_i::IsEmpty() void SMESH_Group_i::Clear() { + // Update Python script + TPythonDump() << _this() << ".Clear()"; + + // Clear the group SMESHDS_Group* aGroupDS = dynamic_cast( GetGroupDS() ); if (aGroupDS) { aGroupDS->Clear(); @@ -229,6 +249,10 @@ CORBA::Boolean SMESH_GroupBase_i::Contains( CORBA::Long theID ) CORBA::Long SMESH_Group_i::Add( const SMESH::long_array& theIDs ) { + // Update Python script + TPythonDump() << "nbAdd = " << _this() << ".Add( " << theIDs << " )"; + + // Add elements to the group SMESHDS_Group* aGroupDS = dynamic_cast( GetGroupDS() ); if (aGroupDS) { int nbAdd = 0; @@ -249,6 +273,82 @@ CORBA::Long SMESH_Group_i::Add( const SMESH::long_array& theIDs ) */ //============================================================================= +CORBA::Long SMESH_Group_i::Remove( const SMESH::long_array& theIDs ) +{ + // Update Python script + TPythonDump() << "nbDel = " << _this() << ".Remove( " << theIDs << " )"; + + // Remove elements from the group + SMESHDS_Group* aGroupDS = dynamic_cast( GetGroupDS() ); + if (aGroupDS) { + int nbDel = 0; + for (int i = 0; i < theIDs.length(); i++) { + int anID = (int) theIDs[i]; + if (aGroupDS->Remove(anID)) + nbDel++; + } + return nbDel; + } + MESSAGE("attempt to remove elements from a vague group"); + return 0; +} + +//============================================================================= +/*! + * + */ +//============================================================================= + +typedef bool (SMESHDS_Group::*TFunChangeGroup)(const int); + +CORBA::Long +ChangeByPredicate( SMESH::Predicate_i* thePredicate, + SMESHDS_GroupBase* theGroupBase, + TFunChangeGroup theFun) +{ + CORBA::Long aNb = 0; + if(SMESHDS_Group* aGroupDS = dynamic_cast(theGroupBase)){ + SMESH::Controls::Filter::TIdSequence aSequence; + const SMDS_Mesh* aMesh = theGroupBase->GetMesh(); + SMESH::Filter_i::GetElementsId(thePredicate,aMesh,aSequence); + + CORBA::Long i = 0, iEnd = aSequence.size(); + for(; i < iEnd; i++) + if((aGroupDS->*theFun)(aSequence[i])) + aNb++; + return aNb; + } + return aNb; +} + +CORBA::Long +SMESH_Group_i:: +AddByPredicate( SMESH::Predicate_ptr thePredicate ) +{ + if(SMESH::Predicate_i* aPredicate = SMESH::GetPredicate(thePredicate)){ + TPythonDump()<<_this()<<".AddByPredicate("<( GetGroupDS() ); - if (aGroupDS) { - int nbDel = 0; - for (int i = 0; i < theIDs.length(); i++) { - int anID = (int) theIDs[i]; - if (aGroupDS->Remove(anID)) - nbDel++; - } - return nbDel; - } - MESSAGE("attempt to remove elements from a vague group"); - return 0; -} - //============================================================================= /*! * @@ -341,3 +419,33 @@ GEOM::GEOM_Object_ptr SMESH_GroupOnGeom_i::GetShape() return aGeomObj._retn(); } +//============================================================================= +/*! + * + */ +//============================================================================= +CORBA::Long SMESH_GroupBase_i::GetColorNumber() +{ + SMESHDS_GroupBase* aGroupDS = GetGroupDS(); + if (aGroupDS) + return aGroupDS->GetColorGroup(); + MESSAGE("get color number of a vague group"); + return 0; +} + +//============================================================================= +/*! + * + */ +//============================================================================= +void SMESH_GroupBase_i::SetColorNumber(CORBA::Long color) +{ + SMESHDS_GroupBase* aGroupDS = GetGroupDS(); + if (aGroupDS) + return aGroupDS->SetColorGroup(color); + MESSAGE("set color number of a vague group"); + return ; +} + + +