From eda06d81d6e5947fa63a55261bab6c407ee02ed4 Mon Sep 17 00:00:00 2001 From: eap Date: Mon, 26 Feb 2018 19:57:39 +0300 Subject: [PATCH] 54353: Mesh group is not updated in VTK --- src/SMESHGUI/SMESHGUI_RemoveElementsDlg.cxx | 8 ++--- src/SMESHGUI/SMESHGUI_VTKUtils.cxx | 35 ++++++++++++++++++--- src/SMESHGUI/SMESHGUI_VTKUtils.h | 2 +- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/SMESHGUI/SMESHGUI_RemoveElementsDlg.cxx b/src/SMESHGUI/SMESHGUI_RemoveElementsDlg.cxx index 1e458d8ca..31a46b557 100644 --- a/src/SMESHGUI/SMESHGUI_RemoveElementsDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_RemoveElementsDlg.cxx @@ -247,15 +247,13 @@ void SMESHGUI_RemoveElementsDlg::ClickOnApply() } catch (const SALOME::SALOME_Exception& S_ex) { SalomeApp_Tools::QtCatchCorbaException(S_ex); - myEditCurrentArgument->clear(); - } catch (...){ - myEditCurrentArgument->clear(); + } catch (...) { } + myEditCurrentArgument->clear(); if (aResult) { - myEditCurrentArgument->clear(); mySelector->ClearIndex(); - SMESH::UpdateView(); + SMESH::UpdateView( /*withChildrenOfSelected=*/true ); SMESHGUI::Modified(); } } diff --git a/src/SMESHGUI/SMESHGUI_VTKUtils.cxx b/src/SMESHGUI/SMESHGUI_VTKUtils.cxx index 10bc6ba22..ef9fb3896 100644 --- a/src/SMESHGUI/SMESHGUI_VTKUtils.cxx +++ b/src/SMESHGUI/SMESHGUI_VTKUtils.cxx @@ -794,12 +794,13 @@ namespace SMESH return false; } - void UpdateView(){ + void UpdateView( bool withChildrenOfSelected ) + { if ( SVTK_ViewWindow* aWnd = SMESH::GetCurrentVtkView()) { LightApp_SelectionMgr* mgr = SMESHGUI::selectionMgr(); SALOME_ListIO selected; mgr->selectedObjects( selected ); - if( selected.Extent() == 0){ + if ( selected.Extent() == 0 ) { vtkRenderer* aRenderer = aWnd->getRenderer(); VTK::ActorCollectionCopy aCopy(aRenderer->GetActors()); vtkActorCollection *aCollection = aCopy.GetActors(); @@ -811,12 +812,36 @@ namespace SMESH break; // avoid multiple warinings if visu failed } } - }else{ + } + else + { SALOME_ListIteratorOfListIO anIter( selected ); - for( ; anIter.More(); anIter.Next()){ + for( ; anIter.More(); anIter.Next()) + { Handle(SALOME_InteractiveObject) anIO = anIter.Value(); - if ( !Update(anIO,true) ) + if ( !Update( anIO, true )) break; // avoid multiple warinings if visu failed + + if ( withChildrenOfSelected ) // update all visible children + { + QString aFatherID = anIO->getEntry(); + vtkRenderer* aRenderer = aWnd->getRenderer(); + VTK::ActorCollectionCopy aCopy(aRenderer->GetActors()); + vtkActorCollection *aCollection = aCopy.GetActors(); + aCollection->InitTraversal(); + while ( vtkActor *anAct = aCollection->GetNextActor() ) { + if ( SMESH_Actor *anActor = dynamic_cast( anAct )) { + if ( anActor->hasIO() && anActor->GetVisibility() ) + { + QString aChildID = anActor->getIO()->getEntry(); + if ( aChildID.size() > aFatherID.size() && + aChildID.startsWith( aFatherID )) + if ( ! Update( anActor->getIO(), true )) + break; + } + } + } + } } } RepaintCurrentView(); diff --git a/src/SMESHGUI/SMESHGUI_VTKUtils.h b/src/SMESHGUI/SMESHGUI_VTKUtils.h index b1159bd13..0f47edb71 100644 --- a/src/SMESHGUI/SMESHGUI_VTKUtils.h +++ b/src/SMESHGUI/SMESHGUI_VTKUtils.h @@ -120,7 +120,7 @@ SMESHGUI_EXPORT bool UpdateView( EDisplaing, const char* = "" ); SMESHGUI_EXPORT - void UpdateView(); + void UpdateView( bool withChildrenOfSelected = false ); SMESHGUI_EXPORT bool UpdateNulData( const Handle(SALOME_InteractiveObject)& theIO, bool theDisplay); -- 2.39.2