Salome HOME
oubli
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_VTKUtils.cxx
index bc6714980ac919d96a441e40c85f27fa706c7567..39966b6d679b11adba7545687ee1b8e4adc5086a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2019  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2020  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
@@ -281,7 +281,7 @@ namespace SMESH
             _PTR(AttributePixMap) pixMap = attr;
             toShow = ( pixMap->GetPixMap() != emptyIcon );
           }
-          smeshActor->Update();
+          //smeshActor->Update();
           UpdateView( theWindow, toShow ? eDisplay : eErase, io->getEntry() );
         }
       }
@@ -289,6 +289,29 @@ namespace SMESH
     return;
   }
 
+  //================================================================================
+  /*!
+   * \brief Remove/update actors while module activation
+   *
+   * At module activation, groups and sub-meshes can be removed on engine side due
+   * to modification of meshed geometry, while their actors can remain.
+   * Here we remove/update SMESH_Actor's of changed objects. State (emptiness) of objects
+   * is defined by their icons in the Object Browser
+   */
+  //================================================================================
+
+  void UpdateActorsAfterUpdateStudy()
+  {
+    SUIT_Study* study = SMESH::GetActiveStudy();
+    if ( SUIT_Desktop* desk = study->application()->desktop() )
+    {
+      QList<SUIT_ViewWindow*> wndList = desk->windows();
+      SUIT_ViewWindow* wnd;
+      foreach ( wnd, wndList )
+        SMESH::UpdateActorsAfterUpdateStudy(wnd);
+    }
+  }
+
   //================================================================================
   /*!
    * \brief Notify the user on problems during visualization
@@ -703,9 +726,10 @@ namespace SMESH
    */
   //================================================================================
 
-  bool noSmeshActors(SUIT_ViewWindow *theWnd)
+  bool NoSmeshActors(SUIT_ViewWindow *theWnd)
   {
-    if(SVTK_ViewWindow* aViewWindow = GetVtkViewWindow(theWnd)) {
+    SUIT_ViewWindow* aWnd = ( theWnd == nullptr ) ? GetActiveWindow() : theWnd;
+    if(SVTK_ViewWindow* aViewWindow = GetVtkViewWindow(aWnd)) {
       vtkRenderer *aRenderer = aViewWindow->getRenderer();
       VTK::ActorCollectionCopy aCopy(aRenderer->GetActors());
       vtkActorCollection *aCollection = aCopy.GetActors();
@@ -770,6 +794,7 @@ namespace SMESH
         }
         aStudy->setVisibilityStateForAll(Qtx::HiddenState);
       }
+      // fall through
       default: {
         if (SMESH_Actor *anActor = FindActorByEntry(theWnd,theEntry)) {
           switch (theAction) {
@@ -803,7 +828,7 @@ namespace SMESH
               if ( (aVisualObj = GetVisualObj(theEntry)) && aVisualObj->IsValid())
               {
                 if ((anActor = CreateActor(theEntry,true))) {
-                  bool needFitAll = noSmeshActors(theWnd); // fit for the first object only
+                  bool needFitAll = NoSmeshActors(theWnd); // fit for the first object only
                   DisplayActor(theWnd,anActor);
                   anActor->SetVisibility(true);
                   aStudy->setVisibilityState(theEntry, Qtx::ShownState);
@@ -1302,7 +1327,7 @@ namespace SMESH
 
   int GetSelected(LightApp_SelectionMgr*       theMgr,
                   TColStd_IndexedMapOfInteger& theMap,
-                  const bool                   theIsElement)
+                  const bool                   /*theIsElement*/)
   {
     theMap.Clear();
     SALOME_ListIO selected; theMgr->selectedObjects( selected );