X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Group_i.cxx;h=47236abcc9b194f64a56a73a234650b350e590c1;hp=78ca5289810b95a4fb690ab38ca20f4365136ebf;hb=c38c10811a065cf5b13e8807ed71864d92ca7d80;hpb=7dbc79c51dcd1dce59ae05bc8766b2576a3c40ed diff --git a/src/SMESH_I/SMESH_Group_i.cxx b/src/SMESH_I/SMESH_Group_i.cxx index 78ca52898..47236abcc 100644 --- a/src/SMESH_I/SMESH_Group_i.cxx +++ b/src/SMESH_I/SMESH_Group_i.cxx @@ -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; + //============================================================================= /*! * @@ -113,6 +119,14 @@ SMESHDS_GroupBase* SMESH_GroupBase_i::GetGroupDS() const void SMESH_GroupBase_i::SetName( const char* theName ) { + // Update Python script + TCollection_AsciiString aStr, aStrName ((char*)theName); + SMESH_Gen_i::AddObject(aStr, _this()) += ".SetName(\""; + aStr += aStrName + "\")"; + + SMESH_Gen_i::AddToCurrentPyScript(aStr); + + // Perform renaming ::SMESH_Group* aGroup = GetSmeshGroup(); if (aGroup) { aGroup->SetName(theName); @@ -204,6 +218,13 @@ CORBA::Boolean SMESH_GroupBase_i::IsEmpty() void SMESH_Group_i::Clear() { + // Update Python script + TCollection_AsciiString aStr; + SMESH_Gen_i::AddObject(aStr, _this()) += ".Clear()"; + + SMESH_Gen_i::AddToCurrentPyScript(aStr); + + // Clear the group SMESHDS_Group* aGroupDS = dynamic_cast( GetGroupDS() ); if (aGroupDS) { aGroupDS->Clear(); @@ -235,6 +256,14 @@ CORBA::Boolean SMESH_GroupBase_i::Contains( CORBA::Long theID ) CORBA::Long SMESH_Group_i::Add( const SMESH::long_array& theIDs ) { + // Update Python script + TCollection_AsciiString aStr ("nbAdd = "); + SMESH_Gen_i::AddObject(aStr, _this()) += ".Add("; + SMESH_Gen_i::AddArray(aStr, theIDs) += ")"; + + SMESH_Gen_i::AddToCurrentPyScript(aStr); + + // Add elements to the group SMESHDS_Group* aGroupDS = dynamic_cast( GetGroupDS() ); if (aGroupDS) { int nbAdd = 0; @@ -255,6 +284,86 @@ 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 + TCollection_AsciiString aStr ("nbDel = "); + SMESH_Gen_i::AddObject(aStr, _this()) += ".Remove("; + SMESH_Gen_i::AddArray(aStr, theIDs) += ")"; + + SMESH_Gen_i::AddToCurrentPyScript(aStr); + + // 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; -} - //============================================================================= /*! *