X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMBase%2FGEOMBase_Helper.cxx;h=a304693fb704133602f5dca81ced07b50176606a;hb=d617faae6bc5aeb91b63796618a20c7c13037b6c;hp=28179f5a2a4b2daebfc751d3c8090af6f5a6c437;hpb=f1519c7ef36cf42aaef99bad0aa5ba3d7d562c31;p=modules%2Fgeom.git diff --git a/src/GEOMBase/GEOMBase_Helper.cxx b/src/GEOMBase/GEOMBase_Helper.cxx old mode 100755 new mode 100644 index 28179f5a2..a304693fb --- a/src/GEOMBase/GEOMBase_Helper.cxx +++ b/src/GEOMBase/GEOMBase_Helper.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2023 CEA, EDF, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -45,14 +45,15 @@ #include #include #include -#include +#include +#include "utilities.h" #include +#include "utilities.h" #include #include -#include #include #include @@ -64,7 +65,7 @@ // Function : getActiveView // Purpose : Get active view window, returns 0 if no open study frame //================================================================ -static SUIT_ViewWindow* getActiveView() +SUIT_ViewWindow* GEOMBase_Helper::getActiveView() { SUIT_Study* activeStudy = SUIT_Session::session()->activeApplication()->activeStudy(); if ( activeStudy ) @@ -87,8 +88,8 @@ GEOM::GEOM_Gen_ptr GEOMBase_Helper::getGeomEngine() // Function : GEOMBase_Helper // Purpose : //================================================================ -GEOMBase_Helper::GEOMBase_Helper( SUIT_Desktop* desktop ) - : myDesktop( desktop ), myViewWindow( 0 ), myDisplayer( 0 ), myCommand( 0 ), isPreview( false ), +GEOMBase_Helper::GEOMBase_Helper( SUIT_Desktop* desktop, SUIT_ViewWindow* aVW ) + : myDisplayer( 0 ), myCommand( 0 ), myViewWindow( aVW ), isPreview( false ), myDesktop( desktop ), myIsApplyAndClose( false ), myIsOptimizedBrowsing( false ), myIsWaitCursorEnabled( true ), myIsDisableBrowsing(false), myIsDisplayResult(true) { @@ -144,10 +145,10 @@ void GEOMBase_Helper::display( GEOM::GEOM_Object_ptr object, const bool updateVi { // Unset color of shape ( this color may be set during preview displaying ) // Default color will be used -// getDisplayer()->UnsetColor(); + // getDisplayer()->UnsetColor(); getDisplayer()->UnsetWidth(); - - MESSAGE("GEOMBase_Helper::display myTexture = "<GetTexture()) + + MESSAGE("GEOMBase_Helper::display myTexture = "<GetTexture()); // Enable activisation of selection getDisplayer()->SetToActivate( true ); @@ -178,9 +179,11 @@ void GEOMBase_Helper::erase( GEOM::GEOM_Object_ptr object, const bool updateView { if ( !object->_is_nil() ) { QString entry = getEntry( object ); - getDisplayer()->Erase( new SALOME_InteractiveObject( - entry.toLatin1().constData(), - "GEOM", strdup( GEOMBase::GetName( object ).toLatin1().constData() ) ), true, updateView ); + QString name = GEOMBase::GetName( object ); + getDisplayer()->Erase ( new SALOME_InteractiveObject(entry.toUtf8().constData(), + "GEOM", + name.toUtf8().constData() ), + true, updateView ); } } @@ -218,8 +221,12 @@ void GEOMBase_Helper::redisplay( GEOM::GEOM_Object_ptr object, getDisplayer()->SetToActivate( true ); QString entry = getEntry( object ); - getDisplayer()->Redisplay(new SALOME_InteractiveObject - (entry.toLatin1().constData(), "GEOM", strdup(GEOMBase::GetName(object).toLatin1().constData())), false); + QString name = GEOMBase::GetName( object ); + getDisplayer()->Redisplay + (new SALOME_InteractiveObject (entry.toUtf8().constData(), + "GEOM", + name.toUtf8().constData()), + false); } if ( withChildren ) { @@ -236,8 +243,12 @@ void GEOMBase_Helper::redisplay( GEOM::GEOM_Object_ptr object, if ( !CORBA::is_nil( aChild ) ) { if ( !aChild->_is_nil() ) { QString entry = getEntry( aChild ); - getDisplayer()->Redisplay( new SALOME_InteractiveObject( - entry.toLatin1().constData(), "GEOM", strdup( GEOMBase::GetName( aChild ).toLatin1().constData() ) ), false ); + QString name = GEOMBase::GetName( aChild ); + getDisplayer()->Redisplay + ( new SALOME_InteractiveObject( entry.toUtf8().constData(), + "GEOM", + name.toUtf8().constData() ), + false ); } } } @@ -259,13 +270,14 @@ void GEOMBase_Helper::displayPreview( const bool display, const bool toRemoveFromEngine, const double lineWidth, const int displayMode, - const int color ) + const int color, + const bool append ) { if(!display) { erasePreview( update ); return; } - + isPreview = true; QString msg; if ( !isValid( msg ) ) @@ -275,25 +287,26 @@ void GEOMBase_Helper::displayPreview( const bool display, return; } - erasePreview( false ); + if( !append ) + erasePreview( false ); try { SUIT_OverrideCursor wc; ObjectList objects; - + if ( !isWaitCursorEnabled() ) wc.suspend(); - + if ( !execute( objects ) || !getOperation()->IsDone() ) { wc.suspend(); } else { for ( ObjectList::iterator it = objects.begin(); it != objects.end(); ++it ) { - GEOM::GEOM_Object_var obj=*it; + GEOM::GEOM_Object_var obj = *it; displayPreview( obj, true, activate, false, lineWidth, displayMode, color ); if ( toRemoveFromEngine ) - obj->UnRegister(); + obj->UnRegister(); } } } @@ -319,7 +332,7 @@ void GEOMBase_Helper::displayPreview( GEOM::GEOM_Object_ptr object, const int displayMode, const int color ) { - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); // Set color for preview shape getDisplayer()->SetColor( color == -1 ? Quantity_NOC_VIOLET : color ); @@ -342,6 +355,9 @@ void GEOMBase_Helper::displayPreview( GEOM::GEOM_Object_ptr object, if ( aPrs == 0 || aPrs->IsNull() ) return; + // Make preview not clippable + aPrs->SetClippable (false); + // Display prs displayPreview( aPrs, append, update ); @@ -369,17 +385,17 @@ void GEOMBase_Helper::displayPreview( const SALOME_Prs* prs, if ( myViewWindow == 0 ) return; - + // Display prs SUIT_ViewManager* aViewManager = myViewWindow->getViewManager(); if ( aViewManager->getType() == OCCViewer_Viewer::Type() || aViewManager->getType() == SVTK_Viewer::Type() ) - { - SUIT_ViewModel* aViewModel = aViewManager->getViewModel(); - SALOME_View* aView = dynamic_cast(aViewModel); - if (aView) - aView->Display( prs ); - } + { + SUIT_ViewModel* aViewModel = aViewManager->getViewModel(); + SALOME_View* aView = dynamic_cast(aViewModel); + if (aView) + aView->Display( getDisplayer(), prs ); + } // Add prs to the preview list myPreview.push_back( (SALOME_Prs*)prs ); @@ -398,19 +414,20 @@ void GEOMBase_Helper::erasePreview( const bool update ) // check view frame where the preview was displayed bool vfOK = checkViewWindow() && myViewWindow; // Iterate through presentations and delete them - for ( PrsList::iterator anIter = myPreview.begin(); anIter != myPreview.end(); ++anIter ) { + for ( PrsList::iterator anIter = myPreview.begin(); anIter != myPreview.end(); ++anIter ) + { if ( vfOK ) + { + SUIT_ViewManager* aViewManager = myViewWindow->getViewManager(); + if ( aViewManager->getType() == OCCViewer_Viewer::Type() || + aViewManager->getType() == SVTK_Viewer::Type() ) { - SUIT_ViewManager* aViewManager = myViewWindow->getViewManager(); - if ( aViewManager->getType() == OCCViewer_Viewer::Type() || - aViewManager->getType() == SVTK_Viewer::Type() ) - { - SUIT_ViewModel* aViewModel = aViewManager->getViewModel(); - SALOME_View* aView = dynamic_cast(aViewModel); - if (aView) - aView->Erase( *anIter, true ); - } + SUIT_ViewModel* aViewModel = aViewManager->getViewModel(); + SALOME_View* aView = dynamic_cast(aViewModel); + if (aView) + aView->Erase( getDisplayer(), *anIter, true ); } + } delete *anIter; } myPreview.clear(); @@ -457,9 +474,9 @@ void GEOMBase_Helper::activate( const int theType ) //================================================================ // Function : localSelection // Purpose : Activate selection of sub-shapes in accordance with mode -// theMode is from TopAbs_ShapeEnum +// modes are from TopAbs_ShapeEnum //================================================================ -void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const int theMode ) +void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const std::list modes ) { SALOME_ListIO aListOfIO; @@ -471,11 +488,15 @@ void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const int theMo continue; QString anEntry = getEntry( anObj ); if ( anEntry != "" ) - aListOfIO.Append( new SALOME_InteractiveObject( - anEntry.toLatin1().constData(), "GEOM", strdup( GEOMBase::GetName( anObj ).toLatin1().constData() ) ) ); + { + //MESSAGE("anEntry: "<< anEntry.toStdString().c_str()); + QString aName = GEOMBase::GetName( anObj ); + aListOfIO.Append( new SALOME_InteractiveObject( anEntry.toUtf8().constData(), + "GEOM", aName.toUtf8().constData() )); + } } - getDisplayer()->LocalSelection( aListOfIO, theMode ); + getDisplayer()->LocalSelection( aListOfIO, modes ); } //================================================================ @@ -483,19 +504,78 @@ void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const int theMo // Purpose : Activate selection of sub-shapes in accordance with mode // theMode is from TopAbs_ShapeEnum //================================================================ -void GEOMBase_Helper::localSelection( GEOM::GEOM_Object_ptr obj, const int mode ) +void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const int theMode ) +{ + std::list modes; + modes.push_back( theMode ); + localSelection( theObjs, modes ); +} + +//================================================================ +// Function : localSelection +// Purpose : Activate selection of sub-shapes in accordance with mode +// modes are from TopAbs_ShapeEnum +//================================================================ +void GEOMBase_Helper::localSelection( GEOM::GEOM_Object_ptr obj, const std::list modes ) { // If object is null local selection for all objects is activated if ( obj->_is_nil() ) { - getDisplayer()->LocalSelection( Handle(SALOME_InteractiveObject)(), mode ); + getDisplayer()->LocalSelection( Handle(SALOME_InteractiveObject)(), modes ); return; } ObjectList objList; objList.push_back( obj ); - localSelection( objList, mode ); + localSelection( objList, modes ); +} + +//================================================================ +// Function : localSelection +// Purpose : Activate selection of sub-shapes in accordance with mode +// mode is from TopAbs_ShapeEnum +//================================================================ +void GEOMBase_Helper::localSelection( GEOM::GEOM_Object_ptr obj, const int mode ) +{ + std::list modes; + modes.push_back( mode ); + localSelection( obj, modes ); +} + +//================================================================ +// Function : localSelection +// Purpose : Activate selection of sub-shapes in accordance with mode +// mode is from TopAbs_ShapeEnum +//================================================================ +void GEOMBase_Helper::localSelection( const std::string& entry, const std::string& name, const std::list modes) +{ + SALOME_ListIO aListOfIO; + QString aName = name.c_str(); + aListOfIO.Append( new SALOME_InteractiveObject( entry.c_str(), + "GEOM", aName.toUtf8().constData() )); + getDisplayer()->LocalSelection( aListOfIO, modes ); +} + +//================================================================ +// Function : localSelection +// Purpose : Activate selection of sub-shapes in accordance with mode +// modes are from TopAbs_ShapeEnum +//================================================================ +void GEOMBase_Helper::localSelection( const std::list modes ) +{ + localSelection( GEOM::GEOM_Object::_nil(), modes ); } +//================================================================ +// Function : localSelection +// Purpose : Activate selection of sub-shapes in accordance with mode +// mode is from TopAbs_ShapeEnum +//================================================================ +void GEOMBase_Helper::localSelection( const int mode ) +{ + std::list modes; + modes.push_back( mode ); + localSelection( modes ); +} //================================================================ // Function : globalSelection @@ -543,12 +623,10 @@ QString GEOMBase_Helper::addInStudy( GEOM::GEOM_Object_ptr theObj, const char* t if ( !aStudy || theObj->_is_nil() ) return QString(); - SALOMEDS::Study_var aStudyDS = GeometryGUI::ClientStudyToStudy(aStudy); - GEOM::GEOM_Object_ptr aFatherObj = getFather( theObj ); SALOMEDS::SObject_var aSO = - getGeomEngine()->AddInStudy(aStudyDS, theObj, theName, aFatherObj); + getGeomEngine()->AddInStudy(theObj, theName, aFatherObj); QString anEntry; if ( !aSO->_is_nil() ) { @@ -557,7 +635,7 @@ QString GEOMBase_Helper::addInStudy( GEOM::GEOM_Object_ptr theObj, const char* t } // Each dialog is responsible for this method implementation, // default implementation does nothing - restoreSubShapes(aStudyDS, aSO); + restoreSubShapes(aSO); aSO->UnRegister(); return anEntry; @@ -567,15 +645,14 @@ QString GEOMBase_Helper::addInStudy( GEOM::GEOM_Object_ptr theObj, const char* t // Function : restoreSubShapes // Purpose : restore tree of argument's sub-shapes under the resulting shape //================================================================ -void GEOMBase_Helper::restoreSubShapes (SALOMEDS::Study_ptr /*theStudy*/, - SALOMEDS::SObject_ptr /*theSObject*/) +void GEOMBase_Helper::restoreSubShapes (SALOMEDS::SObject_ptr /*theSObject*/) { // do nothing by default // example of implementation in particular dialog: // GEOM::ListOfGO anArgs; // anArgs.length(0); // empty list means that all arguments should be restored - // getGeomEngine()->RestoreSubShapesSO(theStudy, theSObject, anArgs, + // getGeomEngine()->RestoreSubShapesSO(theSObject, anArgs, // /*theFindMethod=*/GEOM::FSM_GetInPlace, // /*theInheritFirstArg=*/false); } @@ -591,7 +668,7 @@ void GEOMBase_Helper::updateObjBrowser() const CAM_Module* module = app->module( "Geometry" ); SalomeApp_Module* appMod = dynamic_cast( module ); if ( appMod ) { - appMod->updateObjBrowser( true ); + appMod->updateObjBrowser(); } } } @@ -605,18 +682,6 @@ void GEOMBase_Helper::updateViewer() getDisplayer()->UpdateViewer(); } -//================================================================ -// Function : getStudyId -// Purpose : Get study Id -//================================================================ -int GEOMBase_Helper::getStudyId() const -{ - int anId = -1; - if ( getStudy() ) - anId = getStudy()->id(); - return anId; -} - //================================================================ // Function : getStudy // Purpose : Returns the active study. It is recommended to use @@ -633,11 +698,11 @@ SalomeApp_Study* GEOMBase_Helper::getStudy() const SUIT_Application* anApp = 0; QListIterator it( anAppList ); while ( it.hasNext() ) - { - anApp = it.next(); - if ( anApp && anApp->desktop() == aDesktop ) - break; - } + { + anApp = it.next(); + if ( anApp && anApp->desktop() == aDesktop ) + break; + } return dynamic_cast(anApp->activeStudy()); } @@ -652,7 +717,7 @@ QString GEOMBase_Helper::getEntry( GEOM::GEOM_Object_ptr object ) const if ( study ) { QString objIOR = GEOMBase::GetIORFromObject( object ); if ( objIOR != "" ) { - _PTR(SObject) SO ( study->studyDS()->FindObjectIOR( objIOR.toLatin1().constData() ) ); + _PTR(SObject) SO ( study->studyDS()->FindObjectIOR( objIOR.toUtf8().constData() ) ); if ( SO ) return QString::fromStdString(SO->GetID()); } @@ -667,7 +732,7 @@ QString GEOMBase_Helper::getEntry( GEOM::GEOM_Object_ptr object ) const GEOM_Displayer* GEOMBase_Helper::getDisplayer() { if ( !myDisplayer ) - myDisplayer = new GEOM_Displayer( getStudy() ); + myDisplayer = new GEOM_Displayer(); return myDisplayer; } @@ -689,8 +754,8 @@ bool GEOMBase_Helper::openCommand() bool res = false; if ( !getStudy() || hasCommand() ) { - MESSAGE("Getting out from openCommand()") - return res; + MESSAGE("Getting out from openCommand()"); + return res; } GEOM::GEOM_IOperations_var anOp = GEOM::GEOM_IOperations::_narrow( getOperation() ); @@ -701,7 +766,7 @@ bool GEOMBase_Helper::openCommand() } else { - MESSAGE("anOp->_is_nil() = true") + MESSAGE("anOp->_is_nil() = true"); } return res; @@ -772,10 +837,10 @@ bool GEOMBase_Helper::checkViewWindow() QList aViewWindowsList = SUIT_Session::session()->activeApplication()->desktop()->windows(); QListIterator it( aViewWindowsList ); while ( it.hasNext() ) - { - if ( myViewWindow == it.next() ) - return true; - } + { + if ( myViewWindow == it.next() ) + return true; + } } myViewWindow = 0; return false; @@ -784,16 +849,16 @@ bool GEOMBase_Helper::checkViewWindow() //================================================================ // Function : onAccept // Purpose : This method should be called from dialog's slots onOk() and onApply() -// It perfroms user input validation, then it +// It performs user input validation, then it // performs a proper operation and manages transactions, etc. //================================================================ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction, bool erasePreviewFlag ) { SalomeApp_Study* appStudy = dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); - if ( !appStudy ) + if ( !appStudy ) { - MESSAGE("appStudy is empty") - return false; + MESSAGE("appStudy is empty"); + return false; } _PTR(Study) aStudy = appStudy->studyDS(); @@ -812,7 +877,7 @@ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction, b showError( msg ); return false; } - + if(erasePreviewFlag) erasePreview( false ); @@ -829,6 +894,7 @@ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction, b showError(); } else { + QList anObjectList = getSourceObjects( ); addSubshapesToStudy(); // add Sub-shapes if local selection const int nbObjs = objects.size(); QStringList anEntryList; @@ -838,24 +904,24 @@ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction, b if ( publish ) { QString aName = getObjectName(obj); if (aName.isEmpty()) { - aName = getNewObjectName(currObj); - if ( nbObjs > 1 ) { - if (aName.isEmpty()) - aName = getPrefix(obj); - if (nbObjs <= 30) { - // Try to find a unique name - aName = GEOMBase::GetDefaultName(aName, extractPrefix()); - } else { - // Don't check name uniqueness in case of numerous objects - aName = aName + "_" + QString::number(aNumber++); - } - } else { - // PAL6521: use a prefix, if some dialog box doesn't reimplement getNewObjectName() - if ( aName.isEmpty() ) - aName = GEOMBase::GetDefaultName( getPrefix( obj ) ); - } + aName = getNewObjectName(currObj); + if ( nbObjs > 1 ) { + if (aName.isEmpty()) + aName = getPrefix(obj); + if (nbObjs <= 30) { + // Try to find a unique name + aName = GEOMBase::GetDefaultName(aName, extractPrefix()); + } else { + // Don't check name uniqueness in case of numerous objects + aName = aName + "_" + QString::number(aNumber++); + } + } else { + // PAL6521: use a prefix, if some dialog box doesn't reimplement getNewObjectName() + if ( aName.isEmpty() ) + aName = GEOMBase::GetDefaultName( getPrefix( obj ) ); + } } - anEntryList << addInStudy( obj, aName.toLatin1().constData() ); + anEntryList << addInStudy( obj, aName.toUtf8().constData() ); // updateView=false if( isDisplayResult() ) display( obj, false ); @@ -881,10 +947,17 @@ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction, b updateObjBrowser(); if( SUIT_Application* anApp = SUIT_Session::session()->activeApplication() ) { LightApp_Application* aLightApp = dynamic_cast( anApp ); - if(aLightApp && !isDisableBrowsing() ) - aLightApp->browseObjects( anEntryList, isApplyAndClose(), isOptimizedBrowsing() ); + if(aLightApp) { + QString anOpName( typeid(*this).name() ); + aLightApp->emitOperationFinished( "Geometry", anOpName, anEntryList ); + + if ( !isDisableBrowsing() ) + aLightApp->browseObjects( anEntryList, isApplyAndClose(), isOptimizedBrowsing() ); + } anApp->putInfo( QObject::tr("GEOM_PRP_DONE") ); } + if ( anObjectList.count() > 0 ) + hideSourceObjects( anObjectList ); result = true; } else @@ -895,19 +968,19 @@ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction, b catch( const SALOME::SALOME_Exception& e ) { SalomeApp_Tools::QtCatchCorbaException( e ); abortCommand(); - MESSAGE("Exception catched") + MESSAGE("Exception caught"); } updateViewer(); - MESSAGE("result ="<( app->activeStudy() ); _PTR(Study) aDStudy = appStudy->studyDS(); QString IOR = GEOMBase::GetIORFromObject( theFather ); - _PTR(SObject) SObj ( aDStudy->FindObjectIOR( IOR.toLatin1().constData() ) ); + _PTR(SObject) SObj ( aDStudy->FindObjectIOR( IOR.toUtf8().constData() ) ); bool inStudy = false; GEOM::GEOM_Object_var aReturnObject; @@ -1102,7 +1175,7 @@ GEOM::GEOM_Object_ptr GEOMBase_Helper::findObjectInFather (GEOM::GEOM_Object_ptr } if (inStudy) return aReturnObject._retn(); - + return GEOM::GEOM_Object::_nil(); } @@ -1115,8 +1188,7 @@ GEOM::GEOM_Object_ptr GEOMBase_Helper::findObjectInFather( GEOM::GEOM_Object_ptr int theIndex ) { GEOM::GEOM_Object_var object; - bool found = false; - + SalomeApp_Study* study = dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); if ( study ) { _PTR(Study) studyDS = study->studyDS(); @@ -1124,22 +1196,21 @@ GEOM::GEOM_Object_ptr GEOMBase_Helper::findObjectInFather( GEOM::GEOM_Object_ptr _PTR(SObject) sobject( studyDS->FindObjectIOR( IOR.toLatin1().constData() ) ); if ( sobject ) { _PTR(ChildIterator) it( studyDS->NewChildIterator( sobject ) ); - for ( ; it->More() && !found; it->Next() ) { + for ( ; it->More(); it->Next() ) { GEOM::GEOM_Object_var cobject = GEOM::GEOM_Object::_narrow( GeometryGUI::ClientSObjectToObject( it->Value() ) ); if ( !CORBA::is_nil( cobject ) ) { GEOM::ListOfLong_var indices = cobject->GetSubShapeIndices(); int length = indices->length(); - for ( int i = 0; i < length && !found; i++ ) { - if ( indices[i] == theIndex ) { - object = cobject; - found = true; - } + // VSR 18/03/2014: we need only sub-shapes with single sub-shape index (to exclude groups, etc) + if ( length == 1 && indices[0] == theIndex ) { + object = cobject; + break; } } } } } - + return object._retn(); } @@ -1149,7 +1220,18 @@ GEOM::GEOM_Object_ptr GEOMBase_Helper::findObjectInFather( GEOM::GEOM_Object_ptr //================================================================ void GEOMBase_Helper::addSubshapesToStudy() { - //Impemented in Dialogs, called from Accept method + //Implemented in Dialogs, called from Accept method +} + +//================================================================ +// Function : getSourceObjects +// Purpose : Virtual method to get source objects +//================================================================ +QList GEOMBase_Helper::getSourceObjects() +{ + //Implemented in Dialogs, called from Accept method + QList res; + return res; } //================================================================ @@ -1159,7 +1241,7 @@ void GEOMBase_Helper::addSubshapesToStudy() // Returns valid object if only one object of the specified type is selected // (no matter global or local selection is activated). If \a type is TopAbs_SHAPE, // geometrical object of any valid type is expected. -// +// // \param type type of the object to be obtained from selection // \return selected geometrical object or nil object if selection is not satisfactory //================================================================ @@ -1178,7 +1260,7 @@ GEOM::GeomObjPtr GEOMBase_Helper::getSelected( TopAbs_ShapeEnum type ) // (no matter global or local selection is activated). The list of allowed // shape types is passed via \a types. If \a types includes TopAbs_SHAPE, // geometrical object of any valid type is expected. -// +// // \param types list of allowed shape types for the objects to be obtained from selection // \return selected geometrical object or nil object if selection is not satisfactory //================================================================ @@ -1198,7 +1280,7 @@ GEOM::GeomObjPtr GEOMBase_Helper::getSelected( const QList& ty // // The \a type parameter specifies allowed type of the object(s) being selected. // The \a count parameter specifies exact number of the objects to be retrieved from selection. -// The \a strict parameter specifies policy being applied to the selection. +// The \a strict parameter specifies policy being applied to the selection. // If \a count < 0, then any number of the selected objects is valid (including 0). // In this case, if \a strict is \c true (default), all selected objects should satisfy // the specified \a type. @@ -1206,7 +1288,7 @@ GEOM::GeomObjPtr GEOMBase_Helper::getSelected( const QList& ty // In this case, if \a strict is \c true (default), function returns empty list if total number of selected // objects does not correspond to the \a count parameter. Otherwise (if \a strict is \c false), // function returns valid list of objects if at least \a count objects satisfy specified \a type. -// +// // \param type type of the object(s) to be obtained from selection // \param count number of items to be retrieved from selection // \param strict selection policy @@ -1237,7 +1319,7 @@ static bool typeInList( TopAbs_ShapeEnum type, const QList& ty // // The \a types parameter specifies allowed types of the object(s) being selected. // The \a count parameter specifies exact number of the objects to be retrieved from selection. -// The \a strict parameter specifies policy being applied to the selection. +// The \a strict parameter specifies policy being applied to the selection. // If \a count < 0, then any number of the selected objects is valid (including 0). // In this case, if \a strict is \c true (default), all selected objects should satisfy // the specified \a type. @@ -1245,7 +1327,7 @@ static bool typeInList( TopAbs_ShapeEnum type, const QList& ty // In this case, if \a strict is \c true (default), function returns empty list if total number of selected // objects does not correspond to the \a count parameter. Otherwise (if \a strict is \c false), // function returns valid list of objects if at least \a count objects satisfy specified \a type. -// +// // \param types list of allowed shape types for the objects to be obtained from selection // \param count number of items to be retrieved from selection // \param strict selection policy @@ -1296,7 +1378,7 @@ QList GEOMBase_Helper::getSelected( const QListGetIShapesOperations( getStudyId() ); + GEOM::ShapesOpPtr shapesOp = getGeomEngine()->GetIShapesOperations(); subShape.take( shapesOp->GetSubShape( object.get(), idx ) ); // take ownership! } if ( typeInList( (TopAbs_ShapeEnum)(subShape->GetShapeType()), types ) ) { @@ -1322,6 +1404,19 @@ QList GEOMBase_Helper::getSelected( const QList theObject ) +{ + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + if ( resMgr->booleanValue( "Geometry", "hide_input_object", true) ) { + GEOM_Displayer* aDisplayer = getDisplayer(); + for ( int i = 0; i < theObject.count(); i++ ) + aDisplayer->Erase( theObject[i].get() ); + } +} //================================================================ // Function : setIsApplyAndClose