From: srn Date: Wed, 6 Apr 2005 09:14:53 +0000 (+0000) Subject: Added 3 mthods to work with SALOMEDSClients X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=09b06a10529a0b7eb55183e2294bd84b5cec6814;p=modules%2Fkernel.git Added 3 mthods to work with SALOMEDSClients --- diff --git a/src/TOOLSDS/SALOMEDS_Tool.cxx b/src/TOOLSDS/SALOMEDS_Tool.cxx index e250257af..18ae883ea 100644 --- a/src/TOOLSDS/SALOMEDS_Tool.cxx +++ b/src/TOOLSDS/SALOMEDS_Tool.cxx @@ -409,6 +409,102 @@ void SALOMEDS_Tool::GetAllChildren( SALOMEDS::Study_var theStudy, +//======================================================================= +// name : GetFlag +// Purpose : Retrieve specified flaf from "AttributeFlags" attribute +//======================================================================= +bool SALOMEDS_Tool::GetFlag( const int theFlag, + SALOMEDSClient_Study* theStudy, + SALOMEDSClient_SObject* theObj ) +{ + SALOMEDSClient_GenericAttribute* anAttr = NULL; + if ( theObj && theObj->FindAttribute( anAttr, "AttributeFlags" ) ) + { + SALOMEDSClient_AttributeFlags* aFlags = dynamic_cast( anAttr ); + bool ret = aFlags->Get( theFlag ); + delete aFlags; + return ret; + } + + return false; +} + +//======================================================================= +// name : SetFlag +// Purpose : Set/Unset specified flaf from "AttributeFlags" attribute +//======================================================================= +bool SALOMEDS_Tool::SetFlag( const int theFlag, + SALOMEDSClient_Study* theStudy, + const std::string& theEntry, + const bool theValue ) +{ + SALOMEDSClient_SObject* anObj = theStudy->FindObjectID(theEntry.c_str()); + + if ( anObj ) + { + SALOMEDSClient_GenericAttribute* aGAttr; + if ( anObj->FindAttribute( aGAttr, "AttributeFlags" ) ) + { + SALOMEDSClient_AttributeFlags* anAttr = dynamic_cast( aGAttr ); + anAttr->Set( theFlag, theValue ); + delete anAttr; + } + else if ( theValue ) + { + SALOMEDSClient_StudyBuilder* aBuilder = theStudy->NewBuilder(); + SALOMEDSClient_AttributeFlags* anAttr = dynamic_cast( + aBuilder->FindOrCreateAttribute( anObj, "AttributeFlags" ) ); + anAttr->Set( theFlag, theValue ); + delete anAttr; + delete aBuilder; + } + return true; + } + + return false; +} + +//======================================================================= +// name : getAllChildren +// Purpose : Get all entries of children of object. +// If theObj is null all entries of objects of study are returned +//======================================================================= +void SALOMEDS_Tool::GetAllChildren( SALOMEDSClient_Study* theStudy, + SALOMEDSClient_SObject* theObj, + std::list& theList ) +{ + if ( !theObj ) + { + SALOMEDSClient_SComponentIterator* anIter = theStudy->NewComponentIterator(); + for ( ; anIter->More(); anIter->Next() ) + { + SALOMEDSClient_SObject* anObj = anIter->Value(); + if ( anObj ) + { + theList.push_back( anObj->GetID() ); + GetAllChildren( theStudy, anObj, theList ); + delete anObj; + } + } + delete anIter; + } + else + { + SALOMEDSClient_ChildIterator* anIter = theStudy->NewChildIterator( theObj ); + for ( ; anIter->More(); anIter->Next() ) + { + SALOMEDSClient_SObject* anObj = anIter->Value(); + SALOMEDSClient_SObject* aRef; + if ( !anObj->ReferencedObject( aRef ) ) + { + theList.push_back( anObj->GetID() ); + GetAllChildren( theStudy, anObj, theList ); + delete anObj; + } + else delete aRef; + } + } +} diff --git a/src/TOOLSDS/SALOMEDS_Tool.hxx b/src/TOOLSDS/SALOMEDS_Tool.hxx index e3d1d3993..f6465a8e6 100644 --- a/src/TOOLSDS/SALOMEDS_Tool.hxx +++ b/src/TOOLSDS/SALOMEDS_Tool.hxx @@ -13,6 +13,8 @@ #include #include +#include "SALOMEDSClient.hxx" + // IDL headers #include "SALOMEconfig.h" #include CORBA_SERVER_HEADER(SALOMEDS) @@ -67,6 +69,23 @@ public: SALOMEDS::SObject_var theObj, std::list& theList ); + + // Retrieves specified flaf from "AttributeFlags" attribute + static bool GetFlag( const int theFlag, + SALOMEDSClient_Study* theStudy, + SALOMEDSClient_SObject* theObj ); + + // Sets/Unsets specified flaf from "AttributeFlags" attribute + static bool SetFlag( const int theFlag, + SALOMEDSClient_Study* theStudy, + const std::string& theEntry, + const bool theValue ); + + // Get all entries of children of object. If theObj is null all entries of objects of study are returned + static void GetAllChildren( SALOMEDSClient_Study* theStudy, + SALOMEDSClient_SObject* theObj, + std::list& theList ); + }; #endif