]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
Fix for the Feature #229: Showing objects in VTK: Scalar bar is used for bathymetries...
authorrkv <rkv@opencascade.com>
Tue, 17 Dec 2013 08:06:09 +0000 (08:06 +0000)
committerrkv <rkv@opencascade.com>
Tue, 17 Dec 2013 08:06:09 +0000 (08:06 +0000)
src/HYDROGUI/HYDROGUI_Module.cxx
src/HYDROGUI/HYDROGUI_VTKPrs.h
src/HYDROGUI/HYDROGUI_VTKPrsBathymetry.h
src/HYDROGUI/HYDROGUI_VTKPrsDisplayer.cxx
src/HYDROGUI/HYDROGUI_VTKPrsDisplayer.h
src/HYDROGUI/HYDROGUI_VTKPrsShapeDriver.cxx

index 7c9c45f802674298fb55eec1446390a60efbdceb..1ffbf5aa90a15565a86bfafa57b422299bbe7711 100644 (file)
@@ -901,25 +901,28 @@ void HYDROGUI_Module::setObjectVTKPrs( const int                       theViewId
   if( theObject.IsNull() )
     return;
 
-  // Compute the new global Z range from the added presentation and the old global Z range.
-  double* aGlobalRange = getVTKDisplayer()->GetZRange( theViewId );
-  double* aRange = theShape->getInternalZRange();
-  bool anIsUpdate = false;
-  if ( aRange[0] < aGlobalRange[0] )
+  if( theShape && theShape->needScalarBar() )
   {
-    aGlobalRange[0] = aRange[0];
-    anIsUpdate = true;
-  }
-  if ( aRange[1] > aGlobalRange[1] )
-  {
-    aGlobalRange[1] = aRange[1];
-    anIsUpdate = true;
-  }
+    // Compute the new global Z range from the added presentation and the old global Z range.
+    double* aGlobalRange = getVTKDisplayer()->GetZRange( theViewId );
+    double* aRange = theShape->getInternalZRange();
+    bool anIsUpdate = false;
+    if ( aRange[0] < aGlobalRange[0] )
+    {
+      aGlobalRange[0] = aRange[0];
+      anIsUpdate = true;
+    }
+    if ( aRange[1] > aGlobalRange[1] )
+    {
+      aGlobalRange[1] = aRange[1];
+      anIsUpdate = true;
+    }
 
-  //if ( anIsUpdate )
-  //{
-    updateVTKZRange( theViewId, aGlobalRange );
-  //}
+    //if ( anIsUpdate )
+    //{
+      updateVTKZRange( theViewId, aGlobalRange );
+    //}
+  }
 
   ListOfVTKPrs& aViewShapes = myVTKPrsMap[ theViewId ];
   aViewShapes.append( theShape );
@@ -978,7 +981,7 @@ void HYDROGUI_Module::updateVTKZRange( const int theViewId, double theRange[] )
     for ( int i = 0, n = aViewShapes.length(); i < n; ++i )
     {
       aShape = aViewShapes.at( i );
-      if ( aShape )
+      if ( aShape && aShape->needScalarBar() )
       {
         aShape->setZRange( theRange );
       }
@@ -1102,7 +1105,7 @@ void HYDROGUI_Module::onViewManagerRemoved( SUIT_ViewManager* theViewManager )
       SVTK_Viewer* aVTKViewer = getVTKViewer( anId );
       if ( aVTKViewer )
       {
-        getVTKDisplayer()->DeleteScalarBar( anId );
+        getVTKDisplayer()->EraseScalarBar( anId, true );
         removeViewShapes( (size_t)aVTKViewer );
       }
     }
index d6a8b206e7cd585a9ef3ee5bcb1cd3f20ea10d65..558d7ba54c120f592c8c232ed6abbd5d4a4c1454 100644 (file)
@@ -42,6 +42,7 @@ public:
   virtual ~HYDROGUI_VTKPrs();
 
   virtual void                     compute();
+  virtual bool                     needScalarBar() { return false; }
 
   static double InvalidZValue() { return HYDROData_AltitudeObject::GetInvalidAltitude(); }
 
index 25e357d53737a283a15b57f60184fa8436d718d1..8b8cd54f53274b6943aae63bde85ebc3b7cc31e7 100644 (file)
@@ -42,7 +42,8 @@ public:
   HYDROGUI_VTKPrsBathymetry( const Handle(HYDROData_Bathymetry)& theObject );
   virtual ~HYDROGUI_VTKPrsBathymetry();
 
-  virtual void compute();
+  virtual void                     compute();
+  virtual bool                     needScalarBar() { return true; }
 
   //! Get the range of colored 
   void setLookupTable( vtkScalarsToColors* theTable ) { myLookupTable = theTable; }
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 );
index abcdfd46bc13e96530106fea5182a9faa1602a12..66e2f75111e7c47356c5178e309c620d0bbb5105 100644 (file)
@@ -75,7 +75,7 @@ public:
    * \brief Delete scalar bar for the given viewer id.
    * \param theViewerId viewer identifier
    */
-  void             DeleteScalarBar( const int theViewerId );
+  void             EraseScalarBar( const int theViewerId, const bool theIsDelete = false );
 
 protected:
   /**
index cb8d03f9fcc2bba77a80d40eef94b1c8b894b27a..b5cb23932e8c1b7122b9e9d90da076cb31fab9a4 100644 (file)
@@ -47,8 +47,6 @@ bool HYDROGUI_VTKPrsShapeDriver::Update( const Handle(HYDROData_Entity)& theObj,
     thePrs = new HYDROGUI_VTKPrsShape( theObj );
 
   HYDROGUI_VTKPrsShape* aPrsShape = (HYDROGUI_VTKPrsShape*)thePrs;
-  // Update global colors table during compute if necessary
-  aPrsShape->setLookupTable( myScalarBar->GetLookupTable() );
   aPrsShape->compute();
 
   return true;