From: eap Date: Mon, 26 Feb 2018 16:57:39 +0000 (+0300) Subject: 54353: Mesh group is not updated in VTK X-Git-Tag: V8_5_0a1~2 X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=commitdiff_plain;h=eda06d81d6e5947fa63a55261bab6c407ee02ed4;hp=f7712f9c03c5553fc299b9bd9d28d81ce1c83666;ds=sidebyside 54353: Mesh group is not updated in VTK --- 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);