X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_VTKPrsDisplayer.cxx;h=2fdff8ead6df89bf7a2fa72ef6d6211ec940bd0e;hb=adf1c2cc49502c366a2637adfcda9c1c71b11887;hp=d4317fcd46887b389b71c6fd9b411d4635e2820e;hpb=a1431f03eac1d1aed4203d0568d987c41ce939b3;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_VTKPrsDisplayer.cxx b/src/HYDROGUI/HYDROGUI_VTKPrsDisplayer.cxx index d4317fcd..2fdff8ea 100644 --- a/src/HYDROGUI/HYDROGUI_VTKPrsDisplayer.cxx +++ b/src/HYDROGUI/HYDROGUI_VTKPrsDisplayer.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 @@ -33,7 +33,7 @@ #include #include #include -#include +//#include #include #include #include @@ -90,12 +90,49 @@ void HYDROGUI_VTKPrsDisplayer::SetToUpdate( const HYDROData_SequenceOfObjects& t } } +void HYDROGUI_VTKPrsDisplayer::DisplayAll( const int theViewerId, + const bool theIsForced, + const bool theDoFitAll ) +{ + HYDROGUI_AbstractDisplayer::DisplayAll( theViewerId, theIsForced, theDoFitAll ); + + bool isEraseScalarBar = true; + + SVTK_Viewer* aViewer = module()->getVTKViewer( theViewerId ); + if( aViewer ) + { + SALOME_ListIO aListIO; + aViewer->GetVisible( aListIO ); + + HYDROGUI_VTKPrs* aPrs; + SALOME_ListIteratorOfListIO anIter( aListIO ); + for( ; anIter.More(); anIter.Next() ) + { + Handle(SALOME_InteractiveObject) aPrsObj = anIter.Value(); + if ( !aPrsObj.IsNull() ) + { + Handle(HYDROData_Entity) anObj = + module()->getDataModel()->objectByEntry( aPrsObj->getEntry() ); + aPrs = module()->getObjectVTKPrs( (size_t)aViewer, anObj ); + if( aPrs->needScalarBar() ) + { + isEraseScalarBar = false; + break; + } + } + } + } + + if( isEraseScalarBar ) + EraseScalarBar( theViewerId ); +} + void HYDROGUI_VTKPrsDisplayer::EraseAll( const int theViewerId ) { SVTK_Viewer* aViewer = module()->getVTKViewer( theViewerId ); if( aViewer ) { - aViewer->EraseAll( true ); + aViewer->EraseAll( 0, true ); module()->removeViewVTKPrs( (size_t)aViewer ); EraseScalarBar( theViewerId ); } @@ -279,12 +316,14 @@ void HYDROGUI_VTKPrsDisplayer::Display( const HYDROData_SequenceOfObjects& theOb void HYDROGUI_VTKPrsDisplayer::purgeObjects( const int theViewerId ) { + bool doEraseScalarBar = false; + SVTK_Viewer* aViewer = module()->getVTKViewer( theViewerId ); if( aViewer ) { SALOME_ListIO aListIO; aViewer->GetVisible( aListIO ); - + HYDROGUI_VTKPrs* aPrs; SALOME_ListIteratorOfListIO anIter( aListIO ); for( ; anIter.More(); anIter.Next() ) @@ -294,17 +333,47 @@ void HYDROGUI_VTKPrsDisplayer::purgeObjects( const int theViewerId ) { Handle(HYDROData_Entity) anOwnerObj = module()->getDataModel()->objectByEntry( aPrsObj->getEntry() ); - if ( !anOwnerObj.IsNull() && anOwnerObj->IsRemoved() ) + if ( anOwnerObj.IsNull() ) + { + // We found an unknown IO presented in the viewer. + // Remove such an orphan presentation from all the views of the viewer. + SUIT_ViewManager* aViewMgr = dynamic_cast( aViewer->getViewManager() ); + if ( aViewMgr && aViewMgr->getViewsCount() > 0 ) + { + QVector aViews = aViewMgr->getViews(); + foreach ( SUIT_ViewWindow* aView, aViews ) + { + SVTK_ViewWindow* aVTKView = dynamic_cast( aView ); + if ( aVTKView ) + { + aVTKView->Erase( aPrsObj, false ); + } + } + } + // Remove the object presentation from the module's cache + module()->removeObjectVTKPrs( (size_t)aViewer, aPrsObj->getEntry() ); + doEraseScalarBar = true; + } + else if ( anOwnerObj->IsRemoved() ) { aPrs = module()->getObjectVTKPrs( (size_t)aViewer, anOwnerObj ); if ( aPrs ) { aViewer->Erase( aPrs ); } + else + { + } module()->removeObjectVTKPrs( (size_t)aViewer, anOwnerObj ); + doEraseScalarBar = true; } } } + + if ( doEraseScalarBar ) + { + EraseScalarBar( theViewerId ); + } } } @@ -366,6 +435,10 @@ void HYDROGUI_VTKPrsDisplayer::createScalarBar( const int theViewId ) aScalarBar->SetNumberOfLabels( NB_COLORS * 0.75 ); aScalarBar->SetWidth( aScalarBar->GetWidth() / 1.5 ); aScalarBar->SetTextureGridWidth( aScalarBar->GetTextureGridWidth() * 4. ); + aScalarBar->SetTitle( " " ); + // The call of SetTitle() with dummy string is a workaround necessary + // to avoid the problem with uninitialized variables in VTK scalar bar actor + // which leads to incorrect (very big) size of the VTK scalar bar presentation aTable->Delete(); myScalarBars.insert( theViewId, aScalarBar ); }