X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_ShowHideOp.cxx;h=dbef108fc142d500c02552f7e8e5006cbd0278bd;hb=575363a8b27efeb72d97631bcf9644486b14f2dd;hp=755e933a3cde31fb1e543d00fb7dfd76f864a876;hpb=d5288d46b0d85156f7666edf2cef050dc6655eae;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_ShowHideOp.cxx b/src/HYDROGUI/HYDROGUI_ShowHideOp.cxx index 755e933a..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,7 +68,32 @@ void HYDROGUI_ShowHideOp::startOperation() { HYDROGUI_Operation::startOperation(); - size_t aViewId = HYDROGUI_Tool::GetActiveViewId( module() ); + HYDROGUI_Module* aModule = module(); + + size_t aViewId = HYDROGUI_Tool::GetActiveViewId( aModule ); + + int anUpdateFlags = 0; + + SUIT_ViewManager* aVTKMgr = NULL; + OCCViewer_ViewManager* anOCCManager = NULL; + + SUIT_ViewManager* aViewMgr = aModule->getApp()->activeViewManager(); + if ( aViewMgr ) + { + if ( aViewMgr->getType() == GraphicsView_Viewer::Type() ) + { + anUpdateFlags |= UF_Viewer; + } + else if ( aViewMgr->getType() == OCCViewer_Viewer::Type() ) + { + anUpdateFlags |= UF_OCCViewer; + anOCCManager = ::qobject_cast( aViewMgr ); + } + else if ( aViewMgr->getType() == SVTK_Viewer::Type() ) + { + anUpdateFlags |= UF_VTKViewer; + } + } // for all objects if( myId == ShowOnlyId || myId == ShowAllId || myId == HideAllId ) @@ -76,23 +104,31 @@ void HYDROGUI_ShowHideOp::startOperation() { Handle(HYDROData_Entity) anObject = anIterator.Current(); if( !anObject.IsNull() ) - module()->setObjectVisible( aViewId, anObject, aVisibility ); + 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() ); - - bool aVisibility = myId == ShowId || myId == ShowOnlyId; + HYDROData_SequenceOfObjects aSeq = HYDROGUI_Tool::GetSelectedObjects( aModule ); + + bool aVisibility = myId == ShowId || myId == ShowOnlyId || myId == ShowAllId; Handle( HYDROData_Entity ) anObject; for( Standard_Integer anIndex = 1, aLength = aSeq.Length(); anIndex <= aLength; anIndex++ ) { 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 ); @@ -104,39 +140,48 @@ 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_OCCViewer ) + { + aModule->setObjectVisible( aViewId, anObject, aVisibility ); + } + else if ( !(anUpdateFlags & UF_VTKViewer) ) + { + // Activate VTK viewer if show a bathymetry + aVTKMgr = aModule->getApp()->viewManager( SVTK_Viewer::Type() ); + if ( !aVTKMgr ) + { + aVTKMgr = aModule->getApp()->createViewManager( SVTK_Viewer::Type() ); + } + if ( aVTKMgr ) + { + aModule->setObjectVisible( (size_t)aVTKMgr->getViewModel(), anObject, aVisibility ); + } + } + } } } } - int anUpdateFlags = 0; - if ( myId == ShowOnlyId || myId == ShowId || myId == ShowAllId ) { - anUpdateFlags = UF_FitAll; + if( isFoundImage || myId == ShowAllId ) + anUpdateFlags |= UF_FitAll; } - SUIT_ViewManager* aViewMgr = module()->getApp()->activeViewManager(); - if ( aViewMgr ) + // Set VTK viewer active if show a bathymetry + if ( aVTKMgr ) { - if ( aViewMgr->getType() == GraphicsView_Viewer::Type() ) - { - anUpdateFlags |= UF_Viewer; - } - else if ( aViewMgr->getType() == OCCViewer_Viewer::Type() ) - { - anUpdateFlags |= UF_OCCViewer; - } - else if ( aViewMgr->getType() == SVTK_Viewer::Type() ) - { - anUpdateFlags |= UF_VTKViewer; - } + anUpdateFlags |= UF_VTKViewer; + aVTKMgr->setShown( true ); } - module()->update( anUpdateFlags ); + aModule->update( anUpdateFlags ); commit(); }