Salome HOME
#571 - Land Cover: calculation of Strickler coefficient
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_OCCDisplayer.cxx
index c8cf6c697c21963061de7bd8eb9041dea72bc1e2..40256a51b2e6b54640a4812ff8cd00e5e8df8d62 100644 (file)
@@ -1,12 +1,8 @@
-// Copyright (C) 2007-2013  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
-//
+// Copyright (C) 2014-2015  EDF-R&D
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -51,6 +47,7 @@
 HYDROGUI_OCCDisplayer::HYDROGUI_OCCDisplayer( HYDROGUI_Module* theModule )
 : HYDROGUI_AbstractDisplayer( theModule )
 {
+  myToUpdateColorScale = false;
 }
 
 HYDROGUI_OCCDisplayer::~HYDROGUI_OCCDisplayer()
@@ -161,7 +158,7 @@ HYDROGUI_Shape* HYDROGUI_OCCDisplayer::createShape( const int
   if( theObject->IsKind( STANDARD_TYPE( HYDROData_Image ) ) )
     aResShape = new HYDROGUI_ShapeImage( theContext, Handle_HYDROData_Image::DownCast( theObject ) );
   else if( theObject->IsKind( STANDARD_TYPE( HYDROData_Bathymetry ) ) )
-    aResShape = new HYDROGUI_ShapeBathymetry( theContext, Handle_HYDROData_Bathymetry::DownCast( theObject ) );
+    aResShape = new HYDROGUI_ShapeBathymetry( this, theContext, Handle_HYDROData_Bathymetry::DownCast( theObject ) );
   else
     aResShape = new HYDROGUI_Shape( theContext, theObject );
 
@@ -367,7 +364,6 @@ bool HYDROGUI_OCCDisplayer::Display( const Handle(HYDROData_Entity)& theObject,
     aRes = true;
   }
 
-  UpdateColorScale( theViewer );
   return aRes;
 }
 
@@ -375,7 +371,7 @@ void HYDROGUI_OCCDisplayer::SetZLayer( const OCCViewer_Viewer* theViewer,
                                        const Handle(HYDROData_Entity)& theObject, 
                                        const int theZLayerId )
 {
-  if ( !theViewer || ( theZLayerId < 0 ) ) {
+  if ( !theViewer /*|| ( theZLayerId < 0 )*/ ) {
     return;
   }
   
@@ -397,8 +393,16 @@ void HYDROGUI_OCCDisplayer::SetZLayer( const OCCViewer_Viewer* theViewer,
   }
 }
 
+void HYDROGUI_OCCDisplayer::SetToUpdateColorScale()
+{
+  myToUpdateColorScale = true;
+}
+
 void HYDROGUI_OCCDisplayer::UpdateColorScale( const OCCViewer_Viewer* theViewer )
 {
+  if( !myToUpdateColorScale )
+    return;
+
   OCCViewer_ViewWindow* aWnd = dynamic_cast<OCCViewer_ViewWindow*>( theViewer->getViewManager()->getActiveView() );
   Handle(V3d_View) aView = aWnd->getViewPort()->getView();
 
@@ -419,7 +423,7 @@ void HYDROGUI_OCCDisplayer::UpdateColorScale( const OCCViewer_Viewer* theViewer
   foreach( HYDROGUI_Shape* aShape, aShapes )
   {
     HYDROGUI_ShapeBathymetry* aBathShape = dynamic_cast<HYDROGUI_ShapeBathymetry*>( aShape );
-    if( !aBathShape )
+    if( !aBathShape || !aBathShape->isVisible() )
       continue;
 
     aBathShape->GetRange( aMin, aMax );
@@ -451,7 +455,7 @@ void HYDROGUI_OCCDisplayer::UpdateColorScale( const OCCViewer_Viewer* theViewer
       foreach( HYDROGUI_Shape* aShape, aShapes )
       {
         HYDROGUI_ShapeBathymetry* aBathShape = dynamic_cast<HYDROGUI_ShapeBathymetry*>( aShape );
-        if( !aBathShape )
+        if( !aBathShape || !aBathShape->isVisible() )
           continue;
 
         aBathShape->UpdateWithColorScale( aColorScale );
@@ -465,4 +469,6 @@ void HYDROGUI_OCCDisplayer::UpdateColorScale( const OCCViewer_Viewer* theViewer
     if( aView->ColorScaleIsDisplayed() )
       aView->ColorScaleErase();
   }
+
+  myToUpdateColorScale = false;
 }