X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FVISU_I%2FVISUConfig.cc;h=31d8a6af97315e0c67fc47892020256aeb53053e;hb=716894d52739e56d77c5085e02b4cdfdbef60136;hp=56ef09c5c0b1725a7c240de9b36378fc573ee5d7;hpb=ea3d410c5b3c43ea45ef117fa2948811f87f5891;p=modules%2Fvisu.git diff --git a/src/VISU_I/VISUConfig.cc b/src/VISU_I/VISUConfig.cc index 56ef09c5..31d8a6af 100644 --- a/src/VISU_I/VISUConfig.cc +++ b/src/VISU_I/VISUConfig.cc @@ -17,7 +17,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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // // File : VISUConfig.cc @@ -29,12 +29,17 @@ #include "SUIT_ResourceMgr.h" #include "SUIT_Session.h" -#include -#include +#include "SALOMEDSClient_GenericAttribute.hxx" +#include "SALOMEDSClient_AttributeIOR.hxx" -#include +#include "SalomeApp_Application.h" +#include "SalomeApp_Study.h" -using namespace std; +#include "SALOME_Event.hxx" + +#include + +#include #ifdef _DEBUG_ static int MYDEBUG = 0; @@ -42,7 +47,9 @@ static int MYDEBUG = 0; static int MYDEBUG = 0; #endif -namespace VISU{ + +namespace VISU +{ SUIT_Session* GetSession() @@ -56,7 +63,7 @@ namespace VISU{ return GetSession()->resourceMgr(); } - //=========================================================================== + //--------------------------------------------------------------------------- QMutex* Base_i::myMutex = NULL; //apo - &VISUMutex; CORBA::ORB_var Base_i::myOrb; @@ -78,45 +85,295 @@ namespace VISU{ return CORBA::string_dup(myID.c_str()); } - //=========================================================================== + //--------------------------------------------------------------------------- static int mySCnt = 0; static QMutex aMutex(TRUE); - Mutex::Mutex(QMutex* theMutex): myMutex(&aMutex){ + Mutex::Mutex(QMutex* theMutex): myMutex(&aMutex) + { if(MYDEBUG) MESSAGE("Mutex::Mutex : "<lock(); } - Mutex::~Mutex(){ + Mutex::~Mutex() + { if(!(--mySCnt)) myMutex->unlock(); if(MYDEBUG) MESSAGE("Mutex::~Mutex : "<> dupliacte registring !!!"); + if(!myStorableEngineMap.insert(TStorableEngineMap::value_type(theComment, theEngine)).second) throw std::logic_error("Storable::Registry >> dupliacte registring !!!"); + } + + + //--------------------------------------------------------------- + Storable* + Storable + ::Create(SALOMEDS::SObject_ptr theSObject, + const std::string& theLocalPersistentID, + const std::string& thePrefix, + CORBA::Boolean theIsMultiFile) + { + try{ + QString aString( CorrectPersistentString( theLocalPersistentID ) ); + TRestoringMap aRestoringMap; + StringToMap(aString, aRestoringMap); + bool anIsExists; + QString aComment = VISU::Storable::FindValue(aRestoringMap, "myComment", &anIsExists); + if ( anIsExists ) { + TStorableEngineMap::const_iterator anIter = myStorableEngineMap.find(aComment.latin1()); + if(MYDEBUG) MESSAGE("Storable::Create - "<second; + return aStorableEngine(theSObject, aRestoringMap, thePrefix, theIsMultiFile); + } + }catch(std::exception& exc){ + INFOS("Follow exception was occured :\n"<FindAttribute(anAttr, "AttributeString")) { + _PTR(AttributeString) aDataAttr(anAttr); + std::string aData = aDataAttr->Value(); + return Stream2Type(aData); + } + + return VISU::TNONE; + } + + + //--------------------------------------------------------------- + std::string + Storable + ::CorrectPersistentString(const std::string& thePersistentString) + { + QString aString(thePersistentString.c_str()); + if(aString.isEmpty()) + return aString.latin1(); + + VISU::Storable::TRestoringMap aRestoringMap; + Storable::StringToMap( aString, aRestoringMap ); + + bool anIsFound = false; + QString aComment = Storable::FindValue( aRestoringMap, "myComment", &anIsFound ); + if ( anIsFound ) { + if ( aComment == "PRSMERGER" ) + aString.replace( "myComment=PRSMERGER", "myComment=SCALARMAP" ); } + + return aString.latin1(); } - void Storable::StrToMap(const QString& theStr, VISU::Storable::TRestoringMap& theMap){ - if(0 && MYDEBUG) MESSAGE("Storable::StrToMap : string="<FindObjectID(theStartEntry.c_str()); + SALOMEDS::ChildIterator_var anIter = theStudyDocument->NewChildIterator(aSObject); + anIter->InitEx(IsAllLevels); + for(; anIter->More(); anIter->Next()) { + aSObject = anIter->Value(); + SALOMEDS::GenericAttribute_var anAttr; + if (aSObject->FindAttribute(anAttr,"AttributeString")) { + SALOMEDS::AttributeString_var aDataAttr = SALOMEDS::AttributeString::_narrow(anAttr); + CORBA::String_var aString = aDataAttr->Value(); + VISU::Storable::TRestoringMap aRestoringMap; + Storable::StringToMap( aString.in(), aRestoringMap ); + bool anIsSame = true; + TRestoringMap::const_iterator anIter = theRestoringMap.begin(); + for(; anIter != theRestoringMap.end(); anIter++){ + const TRestoringMap::key_type& aKey = anIter->first; + TRestoringMap::const_iterator anIter2 = aRestoringMap.find(aKey); + if(anIter2 != aRestoringMap.end()){ + if (anIter->second == anIter2->second) + continue; + } + anIsSame = false; + break; + } + if(anIsSame){ + CORBA::String_var anEntry = aSObject->GetID(); + return anEntry.in(); + } + } + } + return ""; + } + + + //---------------------------------------------------------------------------- + void + Storable + ::StringToMap(const QString& theString, + TRestoringMap& theMap) + { + if(0 && MYDEBUG) MESSAGE("Storable::StringToMap : string="<FindAttribute(anAttr,"AttributeString")){ + _PTR(AttributeString) aComment (anAttr); + std::string aValue = aComment->Value(); + VISU::Storable::StringToMap(aValue.c_str(), aRestoringMap); + } + } + return aRestoringMap; + } + + + //---------------------------------------------------------------------------- + void + Storable + ::DataToStream(std::ostringstream& theStr, + const QString& theName, + const QString& theVal) + { QString output = ( !theName.isNull() ? theName : QString("") ) + QString( "=" ) + ( !theVal.isNull() ? theVal : QString("") ); theStr<second)(theSObject,thePrefix,aMap); - } - }catch(std::logic_error& exc){ - INFOS("Follow exception was occured :\n"<> there is no value for "<> there is no value for ") + theArg); static QString BAD_VALUE("NULL"); return BAD_VALUE; } - if(isFind != NULL) *isFind = true; - return i->second; + if(theIsFind != NULL) + *theIsFind = true; + return anIter->second; } - //=========================================================================== - PortableServer::ServantBase_var GetServant(CORBA::Object_ptr theObject){ - if(CORBA::is_nil(theObject)) return NULL; + //--------------------------------------------------------------- + QString + Storable + ::FindValue(const TRestoringMap& theMap, + const std::string& theArg, + const QString& theDefaultValue) + { + bool anIsFound = false; + QString aValue = FindValue(theMap,theArg,&anIsFound); + if(anIsFound) + return aValue; + return theDefaultValue; + } + + + //--------------------------------------------------------------------------- + PortableServer::ServantBase_var + GetServant(CORBA::Object_ptr theObject) + { + if(CORBA::is_nil(theObject)) + return NULL; try{ PortableServer::POA_ptr aPOA = Base_i::GetPOA(); PortableServer::Servant aServant = aPOA->reference_to_servant(theObject); @@ -208,171 +522,172 @@ namespace VISU{ } - //=========================================================================== - CORBA::Object_var SObjectToObject(SALOMEDS::SObject_ptr theSObject){ + //--------------------------------------------------------------------------- + CORBA::Object_var + SObjectToObject(SALOMEDS::SObject_ptr theSObject) + { SALOMEDS::GenericAttribute_var anAttr; - CORBA::Object_var anObj; + CORBA::Object_var anObject; + if(CORBA::is_nil(theSObject)) + return anObject; try{ if(theSObject->FindAttribute(anAttr, "AttributeIOR")){ SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); CORBA::String_var aValue = anIOR->Value(); CORBA::ORB_ptr anORB = Base_i::GetORB(); if(strcmp(aValue,"") != 0) - anObj = anORB->string_to_object(aValue); + anObject = anORB->string_to_object(aValue); } }catch(...){ INFOS("SObjectToObject - Unknown exception was occured!!!"); } - return anObj; + return anObject; } - //=========================================================================== - CORBA::Object_var ClientSObjectToObject(_PTR(SObject) theSObject){ + //--------------------------------------------------------------------------- + CORBA::Object_var + ClientSObjectToObject(_PTR(SObject) theSObject) + { _PTR(GenericAttribute) anAttr; - CORBA::Object_var anObj; + CORBA::Object_var anObject; + if(!theSObject) + return anObject; try{ if(theSObject->FindAttribute(anAttr, "AttributeIOR")){ _PTR(AttributeIOR) anIOR = anAttr; CORBA::String_var aValue = anIOR->Value().c_str(); CORBA::ORB_ptr anORB = Base_i::GetORB(); if(strcmp(aValue,"") != 0) - anObj = anORB->string_to_object(aValue); + anObject = anORB->string_to_object(aValue); } }catch(...){ INFOS("ClientSObjectToObject - Unknown exception was occured!!!"); } - return anObj; + return anObject; } - //=========================================================================== - string FindEntryWithComment(SALOMEDS::Study_ptr theStudyDocument, const char* theStartEntry, - const char* theComment, int IsAllLevels) - { - SALOMEDS::ChildIterator_var anIter = - theStudyDocument->NewChildIterator(theStudyDocument->FindObjectID(theStartEntry)); - anIter->InitEx(IsAllLevels); - SALOMEDS::SObject_var aFieldSO; - for(;anIter->More();anIter->Next()) { - SALOMEDS::GenericAttribute_var anAttr; - if (anIter->Value()->FindAttribute(anAttr,"AttributeComment")) { - SALOMEDS::AttributeComment_var aCmnt = SALOMEDS::AttributeComment::_narrow(anAttr); - CORBA::String_var aString = aCmnt->Value(); - string aValue(aString); - if (aValue == theComment) { - aFieldSO = anIter->Value(); - aString = aFieldSO->GetID(); - aValue = aString; - return aValue; - } - } - } - return ""; - } - //=========================================================================== - string CreateAttributes(SALOMEDS::Study_ptr theStudyDocument, - const char* theFatherEntry, const char* theRefFatherEntry, - const char* theIOR, const char* theName, - const char* thePersistentRef, const char* theComment, - CORBA::Boolean theCreateNew) + //--------------------------------------------------------------------------- + std::string + CreateAttributes(SALOMEDS::Study_ptr theStudyDocument, + const std::string& theFatherEntry, + const std::string& theIconName, + const std::string& theIOR, + const std::string& theName, + const std::string& thePersistentRef, + const std::string& theComment, + CORBA::Boolean theCreateNew) { SALOMEDS::StudyBuilder_var aStudyBuilder = theStudyDocument->NewBuilder(); - SALOMEDS::SObject_var aFather = theStudyDocument->FindObjectID(theFatherEntry); - SALOMEDS::SObject_var newObj; - if (theCreateNew) newObj = aStudyBuilder->NewObject(aFather); - else newObj = aFather; + SALOMEDS::SObject_var aFather = theStudyDocument->FindObjectID(theFatherEntry.c_str()); + SALOMEDS::SObject_var aNewSObject; + if (theCreateNew) + aNewSObject = aStudyBuilder->NewObject(aFather); + else + aNewSObject = aFather; SALOMEDS::GenericAttribute_var anAttr; - if(strcmp(theIOR,"") != 0){ - anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeIOR"); - SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); - anIOR->SetValue(theIOR); + if(theIOR != NO_IOR){ + anAttr = aStudyBuilder->FindOrCreateAttribute(aNewSObject, "AttributeIOR"); + SALOMEDS::AttributeIOR_var aCustomAttr = SALOMEDS::AttributeIOR::_narrow(anAttr); + aCustomAttr->SetValue(theIOR.c_str()); } - if(strcmp(theName,"") != 0){ - anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeName"); - SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr); - aName->SetValue(theName); + if(theName != NO_NAME){ + anAttr = aStudyBuilder->FindOrCreateAttribute(aNewSObject, "AttributeName"); + SALOMEDS::AttributeName_var aCustomAttr = SALOMEDS::AttributeName::_narrow(anAttr); + aCustomAttr->SetValue(theName.c_str()); } - if(strcmp(thePersistentRef,"") != 0){ - anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributePersistentRef"); - SALOMEDS::AttributePersistentRef_var aPRef = SALOMEDS::AttributePersistentRef::_narrow(anAttr); - aPRef->SetValue(thePersistentRef); + if(thePersistentRef != NO_PERFSITENT_REF){ + anAttr = aStudyBuilder->FindOrCreateAttribute(aNewSObject, "AttributePersistentRef"); + SALOMEDS::AttributePersistentRef_var aCustomAttr = SALOMEDS::AttributePersistentRef::_narrow(anAttr); + aCustomAttr->SetValue(thePersistentRef.c_str()); } - if(strcmp(theComment,"") != 0){ - anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeComment"); - SALOMEDS::AttributeComment_var aCmnt = SALOMEDS::AttributeComment::_narrow(anAttr); - aCmnt->SetValue(theComment); - if(MYDEBUG) INFOS("CreateAttributes - Comment = "<FindOrCreateAttribute(aNewSObject, "AttributeString"); + SALOMEDS::AttributeString_var aCustomAttr = SALOMEDS::AttributeString::_narrow(anAttr); + aCustomAttr->SetValue(theComment.c_str()); } - if(strcmp(theRefFatherEntry,"") != 0){ - SALOMEDS::SObject_var aRefFather = theStudyDocument->FindObjectID(theRefFatherEntry); - SALOMEDS::SObject_var anObj = aStudyBuilder->NewObject(aRefFather); - aStudyBuilder->Addreference(anObj,newObj); + if(theIconName != NO_ICON){ + anAttr = aStudyBuilder->FindOrCreateAttribute(aNewSObject, "AttributePixMap"); + SALOMEDS::AttributePixMap_var aCustomAttr = SALOMEDS::AttributePixMap::_narrow(anAttr); + aCustomAttr->SetPixMap(theIconName.c_str()); } - CORBA::String_var anEntry = newObj->GetID(); - string aRet(anEntry); + CORBA::String_var anEntry = aNewSObject->GetID(); + std::string aRet(anEntry); if(MYDEBUG) INFOS("CreateAttributes - StudyId = "<StudyId()<<"; anEntry = "<NewBuilder(); _PTR(SObject) aFather = theStudyDocument->FindObjectID(theFatherEntry); - _PTR(SObject) newObj; + _PTR(SObject) aNewSObject; if (theCreateNew) - newObj = aStudyBuilder->NewObject(aFather); + { + aNewSObject = aStudyBuilder->NewObject(aFather); + } else - newObj = aFather; + aNewSObject = aFather; _PTR(GenericAttribute) anAttr; - if (strcmp(theIOR, "") != 0) { - anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeIOR"); - _PTR(AttributeIOR) anIOR (anAttr); - anIOR->SetValue(theIOR); + if (theIOR != NO_IOR) { + anAttr = aStudyBuilder->FindOrCreateAttribute(aNewSObject, "AttributeIOR"); + _PTR(AttributeIOR) aCustomAttr (anAttr); + aCustomAttr->SetValue(theIOR); } - if (strcmp(theName, "") != 0) { - anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeName"); - _PTR(AttributeName) aName (anAttr); - aName->SetValue(theName); + if (theName != NO_NAME) { + anAttr = aStudyBuilder->FindOrCreateAttribute(aNewSObject, "AttributeName"); + _PTR(AttributeName) aCustomAttr (anAttr); + aCustomAttr->SetValue(theName); } - if (strcmp(thePersistentRef, "") != 0) { - anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributePersistentRef"); - _PTR(AttributePersistentRef) aPRef (anAttr); - aPRef->SetValue(thePersistentRef); + if (thePersistentRef != NO_PERFSITENT_REF) { + anAttr = aStudyBuilder->FindOrCreateAttribute(aNewSObject, "AttributePersistentRef"); + _PTR(AttributePersistentRef) aCustomAttr (anAttr); + aCustomAttr->SetValue(thePersistentRef); } - if (strcmp(theComment, "") != 0) { - anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeComment"); - _PTR(AttributeComment) aCmnt (anAttr); - aCmnt->SetValue(theComment); - if (MYDEBUG) INFOS("CreateAttributes - Comment = " << theComment); + if (theComment != NO_COMMENT) { + anAttr = aStudyBuilder->FindOrCreateAttribute(aNewSObject, "AttributeString"); + _PTR(AttributeString) aCustomAttr (anAttr); + aCustomAttr->SetValue(theComment); } - if (strcmp(theRefFatherEntry, "") != 0) { - _PTR(SObject) aRefFather = theStudyDocument->FindObjectID(theRefFatherEntry); - _PTR(SObject) anObj = aStudyBuilder->NewObject(aRefFather); - aStudyBuilder->Addreference(anObj, newObj); + if (theIconName != NO_ICON) { + anAttr = aStudyBuilder->FindOrCreateAttribute(aNewSObject, "AttributePixMap"); + _PTR(AttributePixMap) aCustomAttr (anAttr); + aCustomAttr->SetPixMap(theIconName); } - string aRet = newObj->GetID(); + std::string aRet = aNewSObject->GetID(); if (MYDEBUG) INFOS("CreateAttributes - StudyId = " << theStudyDocument->StudyId() << "; anEntry = " << aRet << "; IOR = '" << theIOR << "'"); return aRet; } - QString GenerateName(const string& theFmt, int theId){ - static QString aName; + + //--------------------------------------------------------------- + QString + GenerateName(const std::string& theFmt, int theId) + { + QString aName; if(theId > 0) - aName.sprintf("%s:%d",theFmt.c_str(),theId); + aName.sprintf("%s:%d", theFmt.c_str(), theId); else - aName.sprintf("%s",theFmt.c_str()); + aName.sprintf("%s", theFmt.c_str()); return aName; } - SALOMEDS::StudyManager_var GetStudyManager() + //--------------------------------------------------------------- + SALOMEDS::StudyManager_var + GetStudyManager() { static SALOMEDS::StudyManager_var aStudyManager; if(CORBA::is_nil(aStudyManager)){ @@ -384,15 +699,78 @@ namespace VISU{ } - SALOMEDS::Study_var GetDSStudy(_PTR(Study) theStudy) + //--------------------------------------------------------------- + SALOMEDS::Study_var + GetDSStudy(_PTR(Study) theStudy) { - //std::string aStudyName = theStudy->Name(); - //return GetStudyManager()->GetStudyByName(aStudyName.c_str()); int aStudyID = theStudy->StudyId(); return GetStudyManager()->GetStudyByID(aStudyID); } - SALOMEDS::SObject_var GetSObject( _PTR(SObject) obj ) + + //--------------------------------------------------------------- + struct TGetStudyEvent: public SALOME_Event + { + SALOMEDS::Study_var myStudy; + + typedef SalomeApp_Study* TResult; + TResult myResult; + + TGetStudyEvent(SALOMEDS::Study_ptr theStudy): + myStudy(SALOMEDS::Study::_duplicate(theStudy)), + myResult(NULL) + {} + + virtual + void + Execute() + { + if(CORBA::is_nil(myStudy)) + return; + + int aStudyId = myStudy->StudyId(); + SUIT_Session* aSession = SUIT_Session::session(); + QPtrList anApplications = aSession->applications(); + QPtrListIterator anIter (anApplications); + while (SUIT_Application* anApp = anIter.current()) { + ++anIter; + if (SUIT_Study* aSStudy = anApp->activeStudy()) { + if (SalomeApp_Study* aStudy = dynamic_cast(aSStudy)) { + if (_PTR(Study) aCStudy = aStudy->studyDS()) { + if (aStudyId == aCStudy->StudyId()) { + myResult = aStudy; + break; + } + } + } + } + } + } + }; + + + //--------------------------------------------------------------- + SalomeApp_Study* + GetGUIStudy(SALOMEDS::Study_ptr theStudy) + { + return ProcessEvent(new TGetStudyEvent(theStudy)); + } + + + //--------------------------------------------------------------- + _PTR(Study) + GetStudy(SALOMEDS::Study_ptr theStudy) + { + if(SalomeApp_Study* aStudy = ProcessEvent(new TGetStudyEvent(theStudy))) + return aStudy->studyDS(); + + return _PTR(Study)(); + } + + + //--------------------------------------------------------------- + SALOMEDS::SObject_var + GetSObject( _PTR(SObject) obj ) { _PTR(Study) aStudy = obj->GetStudy(); SALOMEDS::Study_var aSalomeDSStudy = GetDSStudy( aStudy ); @@ -400,17 +778,21 @@ namespace VISU{ return aSalomeDSStudy->FindObjectID( id.c_str() ); } - _PTR(SObject) GetClientSObject( SALOMEDS::SObject_var obj, - _PTR(Study) study ) + //--------------------------------------------------------------- + _PTR(SObject) + GetClientSObject(SALOMEDS::SObject_ptr theSObject, + _PTR(Study) theStudy) { - return study->FindObjectID( obj->GetID() ); - + CORBA::String_var anEntry = theSObject->GetID(); + return theStudy->FindObjectID( anEntry.in() ); } - void RemoveFromStudy (SALOMEDS::SObject_ptr theSObject, - bool theIsAttrOnly, - bool theDestroySubObjects) + //--------------------------------------------------------------- + void + RemoveFromStudy (SALOMEDS::SObject_ptr theSObject, + bool theIsAttrOnly, + bool theDestroySubObjects) { if (theSObject->_is_nil()) return; @@ -432,20 +814,13 @@ namespace VISU{ if (CORBA::is_nil(aRemovableObject)) continue; aRemovableObject->RemoveFromStudy(); - - // Destroy - if (theDestroySubObjects) { - VISU::Prs3d_var aPrs3d = VISU::Prs3d::_narrow(aRemovableObject); - if (CORBA::is_nil(aPrs3d)) continue; - aPrs3d->Destroy(); - } } // asl, fix for PAL10455: Remove references to SObject - SALOMEDS::Study::ListOfSObject* aRefs = aStudyDocument->FindDependances( theSObject ); + SALOMEDS::Study::ListOfSObject_var aRefs = aStudyDocument->FindDependances( theSObject ); for( int i=0, n=aRefs->length(); iGetFatherComponent()->ComponentDataType()==theSObject->GetFatherComponent()->ComponentDataType() ) { aStudyBuilder->RemoveReference( o ); @@ -457,9 +832,12 @@ namespace VISU{ aStudyBuilder->RemoveObjectWithChildren(theSObject); } - void RemoveFromStudy (_PTR(SObject) theSObject, - bool theIsAttrOnly, - bool theDestroySubObjects) + + //--------------------------------------------------------------- + void + RemoveFromStudy (_PTR(SObject) theSObject, + bool theIsAttrOnly, + bool theDestroySubObjects) { if (!theSObject) return; @@ -475,19 +853,14 @@ namespace VISU{ for (aChildIter->InitEx(true); aChildIter->More(); aChildIter->Next()) { _PTR(SObject) aChildSObject = aChildIter->Value(); CORBA::Object_var aChildObj = VISU::ClientSObjectToObject(aChildSObject); - if (CORBA::is_nil(aChildObj)) continue; + if (CORBA::is_nil(aChildObj)) + continue; VISU::RemovableObject_var aRemovableObject = VISU::RemovableObject::_narrow(aChildObj); - if (CORBA::is_nil(aRemovableObject)) continue; + if (CORBA::is_nil(aRemovableObject)) + continue; aRemovableObject->RemoveFromStudy(); - - // Destroy - if (theDestroySubObjects) { - VISU::Prs3d_var aPrs3d = VISU::Prs3d::_narrow(aRemovableObject); - if (CORBA::is_nil(aPrs3d)) continue; - aPrs3d->Destroy(); - } } // Remove the SObject itself