Salome HOME
54353: Mesh group is not updated in VTK
authoreap <eap@opencascade.com>
Mon, 26 Feb 2018 16:57:39 +0000 (19:57 +0300)
committereap <eap@opencascade.com>
Mon, 26 Feb 2018 16:57:39 +0000 (19:57 +0300)
src/SMESHGUI/SMESHGUI_RemoveElementsDlg.cxx
src/SMESHGUI/SMESHGUI_VTKUtils.cxx
src/SMESHGUI/SMESHGUI_VTKUtils.h

index 1e458d8..31a46b5 100644 (file)
@@ -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();
     }
   }
index 10bc6ba..ef9fb38 100644 (file)
@@ -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<SMESH_Actor*>( 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();
index b1159bd..0f47edb 100644 (file)
@@ -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);