Salome HOME
refs #716: blinking land cover map on show/hide other objects
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_OCCDisplayer.cxx
index 6cfbf67e20ebbfedb2ef2d6d431a2159eb88628b..b7505b0c0d19a980056972e8ba9df22c9b1ffa2a 100644 (file)
 
 #include "HYDROGUI_DataModel.h"
 #include "HYDROGUI_Module.h"
-#include "HYDROGUI_Tool.h"
+#include "HYDROGUI_Tool2.h"
 #include <HYDROGUI_ShapeImage.h>
 #include <HYDROGUI_ShapeBathymetry.h>
-#include <HYDROGUI_ShapeLandCover.h>
+#include <HYDROGUI_ShapeLandCoverMap.h>
 #include "HYDROGUI_Operation.h"
 #include "HYDROGUI_DataObject.h"
 #include "HYDROGUI_ZLayers.h"
 
 #include <HYDROData_Bathymetry.h>
-#include <HYDROData_LandCover.h>
+#include <HYDROData_Image.h>
+#include <HYDROData_LandCoverMap.h>
 #include <HYDROData_StricklerTable.h>
 
 #include <AIS_InteractiveContext.hxx>
@@ -165,9 +166,9 @@ HYDROGUI_Shape* HYDROGUI_OCCDisplayer::createShape( const int
     aResShape = new HYDROGUI_ShapeImage( theContext, Handle_HYDROData_Image::DownCast( theObject ) );
   else if( theObject->IsKind( STANDARD_TYPE( HYDROData_Bathymetry ) ) )
     aResShape = new HYDROGUI_ShapeBathymetry( this, theContext, Handle_HYDROData_Bathymetry::DownCast( theObject ) );
-  else if( theObject->IsKind( STANDARD_TYPE( HYDROData_LandCover ) ) ) {
+  else if( theObject->IsKind( STANDARD_TYPE( HYDROData_LandCoverMap ) ) ) {
     bool isScalarMode = module()->isLandCoversScalarMapModeOn( theViewerId );
-    aResShape = new HYDROGUI_ShapeLandCover( this, theContext, Handle_HYDROData_LandCover::DownCast( theObject ), -1, isScalarMode );
+    aResShape = new HYDROGUI_ShapeLandCoverMap( this, theContext, Handle_HYDROData_LandCoverMap::DownCast( theObject ), -1, isScalarMode );
   }
   else
     aResShape = new HYDROGUI_Shape( theContext, theObject );
@@ -415,11 +416,11 @@ void HYDROGUI_OCCDisplayer::UpdateColorScale( const OCCViewer_Viewer* theViewer
   
   OCCViewer_ViewWindow* aWnd = dynamic_cast<OCCViewer_ViewWindow*>( theViewer->getViewManager()->getActiveView() );
   Handle(V3d_View) aView = aWnd->getViewPort()->getView();
-    
+      
   int aViewerId = (size_t)theViewer;//TODO: check if viewer id is correct
   bool isLandCoverColoringOn = module()->isLandCoversScalarMapModeOn( aViewerId );
     
-  QList<HYDROGUI_Shape*> aLandCoverShapes = module()->getObjectShapes( aViewerId, KIND_LAND_COVER );
+  QList<HYDROGUI_Shape*> aLandCoverMapShapes = module()->getObjectShapes( aViewerId, KIND_LAND_COVER_MAP );
   QList<HYDROGUI_Shape*> aBathShapes = module()->getObjectShapes( aViewerId, KIND_BATHYMETRY );
 
   bool isDisplayColorScale = !aBathShapes.empty() || isLandCoverColoringOn;
@@ -435,11 +436,12 @@ void HYDROGUI_OCCDisplayer::UpdateColorScale( const OCCViewer_Viewer* theViewer
 
   // Get range
   Handle(HYDROData_StricklerTable) aTable;
-  TColStd_SequenceOfExtendedString aTableTypes;
+  QStringList aTableTypes;
   if ( isLandCoverColoringOn ) {
     aTable = module()->getLandCoverColoringTable( aViewerId );
     if ( !aTable.IsNull() ) {
-      aColorScaleTitle = TCollection_ExtendedString( aTable->GetName().toLatin1().constData() );
+      // TODO: non-empty title leads to buggy behaviour
+      // aColorScaleTitle = TCollection_ExtendedString( aTable->GetName().toLatin1().constData() );
       aTable->GetCoefficientRange( aColorScaleMin, aColorScaleMax );
       aTableTypes = aTable->GetTypes();
     }
@@ -499,46 +501,28 @@ void HYDROGUI_OCCDisplayer::UpdateColorScale( const OCCViewer_Viewer* theViewer
       aView->ColorScaleErase();
   }
 
-  foreach( HYDROGUI_Shape* aShape, aLandCoverShapes ) {
-    HYDROGUI_ShapeLandCover* aLandCoverShape = 
-      dynamic_cast<HYDROGUI_ShapeLandCover*>( aShape );
+  foreach( HYDROGUI_Shape* aShape, aLandCoverMapShapes ) {
+    HYDROGUI_ShapeLandCoverMap* aLandCoverMapShape = 
+      dynamic_cast<HYDROGUI_ShapeLandCoverMap*>( aShape );
 
-    if ( !aLandCoverShape || !aLandCoverShape->isVisible() ) {
+    if ( !aLandCoverMapShape || !aLandCoverMapShape->isVisible() ) {
       continue;
     }
     
-    Handle(HYDROData_LandCover) aLandCover = 
-      Handle(HYDROData_LandCover)::DownCast( aLandCoverShape->getObject() );
+    Handle(HYDROData_LandCoverMap) aLandCoverMap = 
+      Handle(HYDROData_LandCoverMap)::DownCast( aLandCoverMapShape->getObject() );
 
-    if ( aLandCover.IsNull() ) {
+    if ( aLandCoverMap.IsNull() ) {
       continue;
     }
     
-    QColor aUndefinedColor( Qt::gray );
-    QColor aColor = isLandCoverColoringOn ? aUndefinedColor : aLandCover->GetFillingColor();
-    
-    if ( isLandCoverColoringOn && !aTable.IsNull() ) {
-      TCollection_ExtendedString aStricklerType = 
-        aLandCover->GetStricklerType().toLatin1().constData();
-     
-      if ( aTable->HasType( aStricklerType ) ) {
-        double aStricklerCoeff = aTable->Get( aStricklerType, 0 );
-        Quantity_Color aShapeColor;
-        if ( aColorScale->FindColor( aStricklerCoeff, aShapeColor ) ) {
-          aColor = QColor( aShapeColor.Red() * 255, 
-                           aShapeColor.Green() * 255,
-                           aShapeColor.Blue() * 255 );
-        }
-      }
+    bool isScalarMode = aLandCoverMapShape->isScalarMapModeEnabled();
+    if( isScalarMode != isLandCoverColoringOn )
+    {
+      aLandCoverMapShape->setScalarMapModeEnabled( isLandCoverColoringOn );
+      theViewer->getAISContext()->Redisplay( aLandCoverMapShape->getAISObject() );
     }
-    
-    aLandCoverShape->setFillingColor( aColor, true, true );
-    aLandCoverShape->setScalarMapModeEnabled( isLandCoverColoringOn );
-    theViewer->getAISContext()->Redisplay( aLandCoverShape->getAISObject() );
-    //theViewer->getAISContext()->UpdateCurrentViewer(); //@MZN
-    //theViewer->getAISContext()->UpdateCurrent();
-    //theViewer->getAISContext()->UpdateSelected( true );
   }
-
+  
   myToUpdateColorScale = false;
 }