Salome HOME
54499: SALOME crash at mesh evaluation
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_VTKUtils.cxx
index 98549bdc8e0a1ab74ef3ff47a1f17cd1474758ad..a706037bd97b30321e412ceb40252b4a20d5abe1 100644 (file)
@@ -32,6 +32,7 @@
 #include "SMESHGUI_Utils.h"
 #include "SMDS_Mesh.hxx"
 #include "SMESH_Actor.h"
+#include "SMESH_ActorProps.h"
 #include "SMESH_ActorUtils.h"
 #include "SMESH_CellLabelActor.h"
 #include "SMESH_ControlsDef.hxx"
@@ -676,6 +677,7 @@ namespace SMESH
     if (!aStudy)
       return OK;
 
+    SUIT_ResourceMgr* resMgr;
     {
       OK = true;
       vtkRenderer *aRenderer = aViewWnd->getRenderer();
@@ -721,6 +723,10 @@ namespace SMESH
               anActor->SetVisibility(true);
               if (theAction == eDisplayOnly) aRenderer->ResetCameraClippingRange();
               aStudy->setVisibilityState(theEntry, Qtx::ShownState);
+              if (( theAction == eDisplayOnly ) &&
+                  ( resMgr = SMESHGUI::resourceMgr() ) &&
+                  ( resMgr->booleanValue( "SMESH", "fitall_on_displayonly", false )))
+                FitAll(); // PAL23615
               break;
             case eErase:
               //MESSAGE("--- erase " << anActor);
@@ -745,8 +751,16 @@ namespace SMESH
                   anActor->SetVisibility(true);
                   aStudy->setVisibilityState(theEntry, Qtx::ShownState);
                   // FitAll(); - PAL16770(Display of a group performs an automatic fit all)
-                  if (needFitAll) FitAll();
-                } else {
+                  if (( !needFitAll ) &&
+                      ( theAction == eDisplayOnly ) &&
+                      ( resMgr = SMESHGUI::resourceMgr() ))
+                  {
+                    needFitAll = resMgr->booleanValue( "SMESH", "fitall_on_displayonly", false );
+                  }
+                  if ( needFitAll )
+                    FitAll();
+                }
+                else {
                   OK = false;
                 }
               }
@@ -789,7 +803,7 @@ namespace SMESH
           if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
             if(anActor->hasIO())
               if (!Update(anActor->getIO(),anActor->GetVisibility()))
-                break; // avoid multiple warinings if visu failed
+                break; // avoid multiple warnings if visu failed
           }
         }
       }
@@ -800,7 +814,7 @@ namespace SMESH
         {
           Handle(SALOME_InteractiveObject) anIO = anIter.Value();
           if ( !Update( anIO, true ))
-            break; // avoid multiple warinings if visu failed
+            break; // avoid multiple warnings if visu failed
 
           if ( withChildrenOfSelected ) // update all visible children
           {
@@ -879,8 +893,10 @@ namespace SMESH
       return;
     }
 
+    SMESH_ActorProps::props()->reset();
+
     QColor
-      aHiColor = mgr->colorValue( "SMESH", "selection_object_color", Qt::white ),
+      //aHiColor = mgr->colorValue( "SMESH", "selection_object_color", Qt::white ),
       aSelColor = mgr->colorValue( "SMESH", "selection_element_color", Qt::yellow ),
       aPreColor = mgr->colorValue( "SMESH", "highlight_color", Qt::cyan );
 
@@ -920,12 +936,7 @@ namespace SMESH
         aCollection->InitTraversal();
         while ( vtkActor *anAct = aCollection->GetNextActor() ) {
           if ( SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct) ) {
-            anActor->SetHighlightColor(aHiColor.red()/255.,
-                                       aHiColor.green()/255.,
-                                       aHiColor.blue()/255.);
-            anActor->SetPreHighlightColor(aPreColor.red()/255.,
-                                          aPreColor.green()/255.,
-                                          aPreColor.blue()/255.);
+            anActor->UpdateSelectionProps();
           }
         }
       }
@@ -1422,7 +1433,7 @@ namespace SMESH
   //================================================================================
   /*!
    * \brief Find all SMESH_Actor's in the View Window.
-   * If actor constains Plot2d_Histogram object remove it from each Plot2d Viewer.
+   * If actor contains Plot2d_Histogram object remove it from each Plot2d Viewer.
    */
   //================================================================================