X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_ShowHideOp.cxx;h=dbef108fc142d500c02552f7e8e5006cbd0278bd;hb=cd6ea20d9a76665a24a533d0340385a335961f05;hp=90a1c4d1cd98cdcf2e25b1c6d07e104a151b0a9a;hpb=1abcf8de100d14016ab483553c2d3c0f2d706daf;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_ShowHideOp.cxx b/src/HYDROGUI/HYDROGUI_ShowHideOp.cxx index 90a1c4d1..dbef108f 100644 --- a/src/HYDROGUI/HYDROGUI_ShowHideOp.cxx +++ b/src/HYDROGUI/HYDROGUI_ShowHideOp.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, 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 @@ -34,8 +34,11 @@ #include #include +#include #include +#include + #include #include @@ -65,24 +68,16 @@ void HYDROGUI_ShowHideOp::startOperation() { HYDROGUI_Operation::startOperation(); - size_t aViewId = HYDROGUI_Tool::GetActiveViewId( module() ); + HYDROGUI_Module* aModule = module(); - // for all objects - if( myId == ShowOnlyId || myId == ShowAllId || myId == HideAllId ) - { - bool aVisibility = myId == ShowAllId; - HYDROData_Iterator anIterator( doc() ); - for( ; anIterator.More(); anIterator.Next() ) - { - Handle(HYDROData_Entity) anObject = anIterator.Current(); - if( !anObject.IsNull() ) - module()->setObjectVisible( aViewId, anObject, aVisibility ); - } - } + size_t aViewId = HYDROGUI_Tool::GetActiveViewId( aModule ); int anUpdateFlags = 0; - SUIT_ViewManager* aVTKMgr = 0; - SUIT_ViewManager* aViewMgr = module()->getApp()->activeViewManager(); + + SUIT_ViewManager* aVTKMgr = NULL; + OCCViewer_ViewManager* anOCCManager = NULL; + + SUIT_ViewManager* aViewMgr = aModule->getApp()->activeViewManager(); if ( aViewMgr ) { if ( aViewMgr->getType() == GraphicsView_Viewer::Type() ) @@ -92,6 +87,7 @@ void HYDROGUI_ShowHideOp::startOperation() else if ( aViewMgr->getType() == OCCViewer_Viewer::Type() ) { anUpdateFlags |= UF_OCCViewer; + anOCCManager = ::qobject_cast( aViewMgr ); } else if ( aViewMgr->getType() == SVTK_Viewer::Type() ) { @@ -99,10 +95,28 @@ void HYDROGUI_ShowHideOp::startOperation() } } + // for all objects + if( myId == ShowOnlyId || myId == ShowAllId || myId == HideAllId ) + { + bool aVisibility = myId == ShowAllId; + HYDROData_Iterator anIterator( doc() ); + for( ; anIterator.More(); anIterator.Next() ) + { + Handle(HYDROData_Entity) anObject = anIterator.Current(); + if( !anObject.IsNull() ) + aModule->setObjectVisible( aViewId, anObject, aVisibility ); + } + + // For occ viewer we do the additional step to hide objects from other modules + if ( anOCCManager != NULL && !aVisibility ) + LightApp_Displayer().EraseAll( true ); + } + + bool isFoundImage = false; // for selected objects if( myId == ShowId || myId == ShowOnlyId || myId == HideId ) { - HYDROData_SequenceOfObjects aSeq = HYDROGUI_Tool::GetSelectedObjects( module() ); + HYDROData_SequenceOfObjects aSeq = HYDROGUI_Tool::GetSelectedObjects( aModule ); bool aVisibility = myId == ShowId || myId == ShowOnlyId || myId == ShowAllId; Handle( HYDROData_Entity ) anObject; @@ -111,7 +125,10 @@ void HYDROGUI_ShowHideOp::startOperation() anObject = aSeq.Value( anIndex ); if( !anObject.IsNull() ) { - module()->setObjectVisible( aViewId, anObject, aVisibility ); + if ( anObject->GetKind() == KIND_IMAGE ) + isFoundImage = true; + + aModule->setObjectVisible( aViewId, anObject, aVisibility ); if ( anObject->GetKind() == KIND_REGION ) { Handle( HYDROData_Region ) aRegion = Handle( HYDROData_Region )::DownCast( anObject ); @@ -123,24 +140,28 @@ void HYDROGUI_ShowHideOp::startOperation() anObject = aZonesSeq.Value( aZoneIdx ); if( !anObject.IsNull() ) { - module()->setObjectVisible( aViewId, anObject, aVisibility ); + aModule->setObjectVisible( aViewId, anObject, aVisibility ); } } } } else if ( anObject->GetKind() == KIND_BATHYMETRY && aVisibility ) { - if ( !(anUpdateFlags & UF_VTKViewer) ) + if ( anUpdateFlags & UF_OCCViewer ) + { + aModule->setObjectVisible( aViewId, anObject, aVisibility ); + } + else if ( !(anUpdateFlags & UF_VTKViewer) ) { // Activate VTK viewer if show a bathymetry - aVTKMgr = module()->getApp()->viewManager( SVTK_Viewer::Type() ); + aVTKMgr = aModule->getApp()->viewManager( SVTK_Viewer::Type() ); if ( !aVTKMgr ) { - aVTKMgr = module()->getApp()->createViewManager( SVTK_Viewer::Type() ); + aVTKMgr = aModule->getApp()->createViewManager( SVTK_Viewer::Type() ); } if ( aVTKMgr ) { - module()->setObjectVisible( (size_t)aVTKMgr->getViewModel(), anObject, aVisibility ); + aModule->setObjectVisible( (size_t)aVTKMgr->getViewModel(), anObject, aVisibility ); } } } @@ -150,7 +171,8 @@ void HYDROGUI_ShowHideOp::startOperation() if ( myId == ShowOnlyId || myId == ShowId || myId == ShowAllId ) { - //anUpdateFlags |= UF_FitAll; + if( isFoundImage || myId == ShowAllId ) + anUpdateFlags |= UF_FitAll; } // Set VTK viewer active if show a bathymetry @@ -160,6 +182,6 @@ void HYDROGUI_ShowHideOp::startOperation() aVTKMgr->setShown( true ); } - module()->update( anUpdateFlags ); + aModule->update( anUpdateFlags ); commit(); }