From: rkv Date: Thu, 9 Jan 2014 06:59:15 +0000 (+0000) Subject: Fix for the bug #316: deleted bathymetry is shown in VTK viewer. X-Git-Tag: BR_hydro_v_0_8~13 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=48b06ef1158104deae63f0c2b2a482549bc0efbb;p=modules%2Fhydro.git Fix for the bug #316: deleted bathymetry is shown in VTK viewer. --- diff --git a/src/HYDROGUI/HYDROGUI_Module.cxx b/src/HYDROGUI/HYDROGUI_Module.cxx index ae7dad74..c409cdbe 100644 --- a/src/HYDROGUI/HYDROGUI_Module.cxx +++ b/src/HYDROGUI/HYDROGUI_Module.cxx @@ -1049,6 +1049,35 @@ void HYDROGUI_Module::setObjectVTKPrs( const int theViewId aViewShapes.append( theShape ); } +void HYDROGUI_Module::removeObjectVTKPrs( const int theViewId, + const QString& theEntry ) +{ + if ( !myVTKPrsMap.contains( theViewId ) ) + return; + + ListOfVTKPrs& aViewShapes = myVTKPrsMap[ theViewId ]; + Handle(HYDROData_Entity) anObject; + QString anEntryRef; + for ( int i = 0; i < aViewShapes.length(); ) + { + HYDROGUI_VTKPrs* aShape = aViewShapes.at( i ); + anObject = aShape->getObject(); + anEntryRef = HYDROGUI_DataObject::dataObjectEntry( anObject ); + if ( aShape && (!anObject.IsNull()) && ( anEntryRef == theEntry ) ) + { + delete aShape; + aViewShapes.removeAt( i ); + continue; + } + + ++i; + } + + // Invalidate global Z range + double anInvalidRange[2] = { HYDROGUI_VTKPrs::InvalidZValue(), HYDROGUI_VTKPrs::InvalidZValue() }; + getVTKDisplayer()->SetZRange( theViewId, anInvalidRange ); +} + void HYDROGUI_Module::removeObjectVTKPrs( const int theViewId, const Handle(HYDROData_Entity)& theObject ) { diff --git a/src/HYDROGUI/HYDROGUI_Module.h b/src/HYDROGUI/HYDROGUI_Module.h index f4a87f48..3ffc7113 100644 --- a/src/HYDROGUI/HYDROGUI_Module.h +++ b/src/HYDROGUI/HYDROGUI_Module.h @@ -151,6 +151,9 @@ public: void removeObjectVTKPrs( const int theViewId, const Handle(HYDROData_Entity)& theObject ); + void removeObjectVTKPrs( const int theViewId, + const QString& theEntry ); + /** * Update global imposed range of Z values for the given VTK viewer id */ diff --git a/src/HYDROGUI/HYDROGUI_VTKPrsDisplayer.cxx b/src/HYDROGUI/HYDROGUI_VTKPrsDisplayer.cxx index d4317fcd..b096a067 100644 --- a/src/HYDROGUI/HYDROGUI_VTKPrsDisplayer.cxx +++ b/src/HYDROGUI/HYDROGUI_VTKPrsDisplayer.cxx @@ -279,12 +279,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 +296,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 ); + } } }