Salome HOME
17.12.2013. Added Partition algorithm (draft version).
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_VTKPrsDisplayer.cxx
index 8b373317e81242cbaae2fafeddba21582cf7f389..a75f52a9966f60e4309a4e5df1f50506ff69fd02 100644 (file)
@@ -97,10 +97,11 @@ void HYDROGUI_VTKPrsDisplayer::EraseAll( const int theViewerId )
   {
     aViewer->EraseAll( true );
     module()->removeViewVTKPrs( (size_t)aViewer );
+    EraseScalarBar( theViewerId );
   }
 }
 
-void HYDROGUI_VTKPrsDisplayer::DeleteScalarBar( const int theViewerId )
+void HYDROGUI_VTKPrsDisplayer::EraseScalarBar( const int theViewerId, const bool theIsDelete )
 {
   SVTK_Viewer* aViewer = module()->getVTKViewer( theViewerId );
   if( aViewer )
@@ -120,7 +121,10 @@ void HYDROGUI_VTKPrsDisplayer::DeleteScalarBar( const int theViewerId )
           }
         }
       }
-      myScalarBars.remove( (size_t)aViewer );
+      if ( theIsDelete )
+      {
+        myScalarBars.remove( (size_t)aViewer );
+      }
     }
   }
 }
@@ -183,6 +187,7 @@ void HYDROGUI_VTKPrsDisplayer::Display( const HYDROData_SequenceOfObjects& theOb
 
     int anInvalidZ = HYDROGUI_VTKPrs::InvalidZValue();
     bool isChanged = false;
+    bool isScalarBarNeeded = false;
     HYDROGUI_VTKPrs* aPrs;
     for ( int i = 1, n = theObjs.Length(); i <= n; i++ )
     {
@@ -208,28 +213,31 @@ void HYDROGUI_VTKPrsDisplayer::Display( const HYDROData_SequenceOfObjects& theOb
         {
           if ( anIsVisible )
           {
-
-            // Extend the global Z range if necessary
-            double* aGlobalRange = GetZRange( (size_t)aViewer );
-            double* aRange = aPrs->getInternalZRange();
-            bool anIsUpdate = false;
-            if ( aRange[0] < aGlobalRange[0] || ValuesEquals( aGlobalRange[0], anInvalidZ ) )
-            {
-              aGlobalRange[0] = aRange[0];
-              anIsUpdate = true;
-            }
-            if ( aRange[1] > aGlobalRange[1] || ValuesEquals( aGlobalRange[1], anInvalidZ ) )
-            {
-              aGlobalRange[1] = aRange[1];
-              anIsUpdate = true;
-            }
-
-            if ( anIsUpdate )
+            if ( aPrs->needScalarBar() )
             {
-              module()->updateVTKZRange( (size_t)aViewer, aGlobalRange );
+              // Extend the global Z range if necessary
+              double* aGlobalRange = GetZRange( (size_t)aViewer );
+              double* aRange = aPrs->getInternalZRange();
+              bool anIsUpdate = false;
+              if ( aRange[0] < aGlobalRange[0] || ValuesEquals( aGlobalRange[0], anInvalidZ ) )
+              {
+                aGlobalRange[0] = aRange[0];
+                anIsUpdate = true;
+              }
+              if ( aRange[1] > aGlobalRange[1] || ValuesEquals( aGlobalRange[1], anInvalidZ ) )
+              {
+                aGlobalRange[1] = aRange[1];
+                anIsUpdate = true;
+              }
+
+              if ( anIsUpdate )
+              {
+                module()->updateVTKZRange( (size_t)aViewer, aGlobalRange );
+              }
             }
 
             aViewer->Display( aPrs );
+            isScalarBarNeeded = isScalarBarNeeded || aPrs->needScalarBar();
 
           }
           else
@@ -243,7 +251,7 @@ void HYDROGUI_VTKPrsDisplayer::Display( const HYDROData_SequenceOfObjects& theOb
 
     if ( aView ) 
     {
-      if ( isChanged && aScalarBar )
+      if ( isChanged && isScalarBarNeeded && aScalarBar )
       {
         // Show colors legend bar
           aView->getRenderer()->AddActor2D( aScalarBar );