Salome HOME
land cover object is removed from the data model
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_OCCDisplayer.cxx
index 5707d78b092e816914b72c652cd5ad5db5c82818..ccec796fca83cda5220761d0d301e838cded7442 100644 (file)
@@ -23,6 +23,7 @@
 #include "HYDROGUI_Tool.h"
 #include <HYDROGUI_ShapeImage.h>
 #include <HYDROGUI_ShapeBathymetry.h>
+#include <HYDROGUI_ShapeLandCover.h>
 #include "HYDROGUI_Operation.h"
 #include "HYDROGUI_DataObject.h"
 #include "HYDROGUI_ZLayers.h"
@@ -144,7 +145,9 @@ void HYDROGUI_OCCDisplayer::Erase( const HYDROData_SequenceOfObjects& theObjs,
     module()->removeObjectShape( (size_t)aViewer, anObj );
   }
   aViewer->update();
-  UpdateColorScale( aViewer );
+  if ( !module()->isLandCoversScalarMapModeOn( (size_t)aViewer ) ) {
+    UpdateColorScale( aViewer );
+  }
 }
 
 HYDROGUI_Shape* HYDROGUI_OCCDisplayer::createShape( const int                             theViewerId,
@@ -162,6 +165,10 @@ 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 ) ) ) {
+    bool isScalarMode = module()->isLandCoversScalarMapModeOn( theViewerId );
+    aResShape = new HYDROGUI_ShapeLandCover( this, theContext, Handle_HYDROData_LandCover::DownCast( theObject ), -1, isScalarMode );
+  }
   else
     aResShape = new HYDROGUI_Shape( theContext, theObject );
 
@@ -403,12 +410,12 @@ void HYDROGUI_OCCDisplayer::SetToUpdateColorScale()
 
 void HYDROGUI_OCCDisplayer::UpdateColorScale( const OCCViewer_Viewer* theViewer )
 {
-  if( !myToUpdateColorScale )
+  if( !myToUpdateColorScale || !theViewer )
     return;
   
   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 );
     
@@ -428,11 +435,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();
     }
@@ -492,24 +500,26 @@ void HYDROGUI_OCCDisplayer::UpdateColorScale( const OCCViewer_Viewer* theViewer
       aView->ColorScaleErase();
   }
 
-  bool isScaleColoringOn = isDisplayColorScale && !aColorScale.IsNull();
   foreach( HYDROGUI_Shape* aShape, aLandCoverShapes ) {
-    if ( !aShape || !aShape->isVisible() ) {
+    HYDROGUI_ShapeLandCover* aLandCoverShape = 
+      dynamic_cast<HYDROGUI_ShapeLandCover*>( aShape );
+
+    if ( !aLandCoverShape || !aLandCoverShape->isVisible() ) {
       continue;
     }
-
+    
     Handle(HYDROData_LandCover) aLandCover = 
-      Handle(HYDROData_LandCover)::DownCast( aShape->getObject() );
+      Handle(HYDROData_LandCover)::DownCast( aLandCoverShape->getObject() );
 
     if ( aLandCover.IsNull() ) {
       continue;
     }
-
+    
     QColor aUndefinedColor( Qt::gray );
     QColor aColor = isLandCoverColoringOn ? aUndefinedColor : aLandCover->GetFillingColor();
     
     if ( isLandCoverColoringOn && !aTable.IsNull() ) {
-      TCollection_ExtendedString aStricklerType = 
+      QString aStricklerType = 
         aLandCover->GetStricklerType().toLatin1().constData();
      
       if ( aTable->HasType( aStricklerType ) ) {
@@ -523,8 +533,9 @@ void HYDROGUI_OCCDisplayer::UpdateColorScale( const OCCViewer_Viewer* theViewer
       }
     }
     
-    //@MZN aShape->update( false, false );
-    aShape->setFillingColor( aColor, true, true );
+    aLandCoverShape->setFillingColor( aColor, true, true );
+    aLandCoverShape->setScalarMapModeEnabled( isLandCoverColoringOn );
+    theViewer->getAISContext()->Redisplay( aLandCoverShape->getAISObject() );
   }
 
   myToUpdateColorScale = false;