X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_ShowHideOp.cxx;h=c3185734493165204c92c26363cb8b15e007a321;hb=80b3ef265c1b8564a52097094156256956017ae1;hp=6ff798943be9ba6eb0bf539e0169ac2ac717d6f2;hpb=3ee052316eb0a4857a0241a22275528191ce3687;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_ShowHideOp.cxx b/src/HYDROGUI/HYDROGUI_ShowHideOp.cxx index 6ff79894..c3185734 100644 --- a/src/HYDROGUI/HYDROGUI_ShowHideOp.cxx +++ b/src/HYDROGUI/HYDROGUI_ShowHideOp.cxx @@ -1,12 +1,8 @@ -// Copyright (C) 2007-2013 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 -// +// Copyright (C) 2014-2015 EDF-R&D // 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 @@ -25,6 +21,7 @@ #include #include "HYDROGUI_Module.h" +#include "HYDROGUI_OCCDisplayer.h" #include "HYDROGUI_Operations.h" #include "HYDROGUI_Tool.h" #include "HYDROGUI_UpdateFlags.h" @@ -34,8 +31,11 @@ #include #include +#include #include +#include + #include #include @@ -65,24 +65,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 +84,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,11 +92,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; @@ -115,7 +125,7 @@ void HYDROGUI_ShowHideOp::startOperation() if ( anObject->GetKind() == KIND_IMAGE ) isFoundImage = true; - module()->setObjectVisible( aViewId, anObject, aVisibility ); + aModule->setObjectVisible( aViewId, anObject, aVisibility ); if ( anObject->GetKind() == KIND_REGION ) { Handle( HYDROData_Region ) aRegion = Handle( HYDROData_Region )::DownCast( anObject ); @@ -127,24 +137,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 ); } } } @@ -165,6 +179,6 @@ void HYDROGUI_ShowHideOp::startOperation() aVTKMgr->setShown( true ); } - module()->update( anUpdateFlags ); + aModule->update( anUpdateFlags ); commit(); }