From 57bf2cbe472628bfc65af9cdce7d298049965862 Mon Sep 17 00:00:00 2001 From: mkr Date: Fri, 13 Nov 2015 13:10:07 +0300 Subject: [PATCH] Implement automatic coloring of land cover maps 1) by colors of Strickler types selected during land cover map creation, or 2) by colors from Strickler table active for scalar map mode. Add a possibility to change Z order for land cover maps. --- src/HYDROData/HYDROData_LandCoverMap.cxx | 8 ++++ src/HYDROData/HYDROData_LandCoverMap.h | 5 ++ src/HYDROGUI/HYDROGUI_AbstractDisplayer.h | 4 +- src/HYDROGUI/HYDROGUI_ShapeLandCoverMap.cxx | 53 ++++++++++++++++----- 4 files changed, 57 insertions(+), 13 deletions(-) diff --git a/src/HYDROData/HYDROData_LandCoverMap.cxx b/src/HYDROData/HYDROData_LandCoverMap.cxx index d33d90de..5d16d29e 100644 --- a/src/HYDROData/HYDROData_LandCoverMap.cxx +++ b/src/HYDROData/HYDROData_LandCoverMap.cxx @@ -848,6 +848,14 @@ void HYDROData_LandCoverMap::StoreLandCovers( const HYDROData_MapOfFaceToStrickl SetShape( aResult ); } +/** + Checks that object has 2D presentation. Reimlemented to retun true. +*/ +bool HYDROData_LandCoverMap::IsHas2dPrs() const +{ + return true; +} + /** Find the land cover for the given point @param thePoint the point laying in some land cover diff --git a/src/HYDROData/HYDROData_LandCoverMap.h b/src/HYDROData/HYDROData_LandCoverMap.h index 9ce1613e..8b1cce97 100644 --- a/src/HYDROData/HYDROData_LandCoverMap.h +++ b/src/HYDROData/HYDROData_LandCoverMap.h @@ -124,6 +124,11 @@ public: HYDRODATA_EXPORT void StoreLandCovers( const HYDROData_MapOfFaceToStricklerType& ); + /** + * Checks that object has 2D presentation. Reimlemented to retun true. + */ + HYDRODATA_EXPORT virtual bool IsHas2dPrs() const; + protected: void SetShape( const TopoDS_Shape& ); diff --git a/src/HYDROGUI/HYDROGUI_AbstractDisplayer.h b/src/HYDROGUI/HYDROGUI_AbstractDisplayer.h index 7fe58582..2973dc1d 100644 --- a/src/HYDROGUI/HYDROGUI_AbstractDisplayer.h +++ b/src/HYDROGUI/HYDROGUI_AbstractDisplayer.h @@ -81,6 +81,8 @@ public: */ virtual QString GetType() const = 0; + HYDROGUI_Module* module() const {return myModule;} + protected: /** * \brief Update and display all objects in the viewer. @@ -136,7 +138,7 @@ protected: */ virtual void purgeObjects( const int theViewerId ) = 0; - HYDROGUI_Module* module() const {return myModule;} + //HYDROGUI_Module* module() const {return myModule;} private: HYDROGUI_Module* myModule; diff --git a/src/HYDROGUI/HYDROGUI_ShapeLandCoverMap.cxx b/src/HYDROGUI/HYDROGUI_ShapeLandCoverMap.cxx index c365cfc4..450a195e 100644 --- a/src/HYDROGUI/HYDROGUI_ShapeLandCoverMap.cxx +++ b/src/HYDROGUI/HYDROGUI_ShapeLandCoverMap.cxx @@ -19,6 +19,14 @@ #include "HYDROGUI_ShapeLandCoverMap.h" #include "HYDROGUI_OCCDisplayer.h" #include "HYDROGUI_LandCoverMapPrs.h" +#include "HYDROGUI_Tool.h" +#include "HYDROGUI_Module.h" + +#include +#include +#include +#include +#include #include @@ -51,17 +59,6 @@ void HYDROGUI_ShapeLandCoverMap::update( bool theIsUpdateViewer, bool isDeactiva setShape( aLandCoverMapShape, false, false ); } - /* TODO - if ( !myIsScalarMapMode ) { - QColor aFillingColor = aLandCoverMapObj->GetFillingColor(); - QColor aBorderColor = aLandCoverMapObj->GetBorderColor(); - - setFillingColor( aFillingColor, false, false ); - setBorderColor( aBorderColor, false, false ); - } else { - updateShape( false, false ); - }*/ - Handle(HYDROGUI_LandCoverMapPrs) aLandCoverMapPrs = Handle(HYDROGUI_LandCoverMapPrs)::DownCast( getAISObject() ); if ( !aLandCoverMapPrs.IsNull() ) aLandCoverMapPrs->UpdateColors(); @@ -72,6 +69,7 @@ void HYDROGUI_ShapeLandCoverMap::update( bool theIsUpdateViewer, bool isDeactiva void HYDROGUI_ShapeLandCoverMap::setScalarMapModeEnabled( const bool theIsToEnable ) { myIsScalarMapMode = theIsToEnable; + update( false, false ); } void HYDROGUI_ShapeLandCoverMap::setVisible( const bool theState, @@ -91,7 +89,38 @@ Handle_AIS_InteractiveObject HYDROGUI_ShapeLandCoverMap::createShape() const { Handle(HYDROData_LandCoverMap) aLandCoverMap = Handle(HYDROData_LandCoverMap)::DownCast( getObject() ); if ( !aLandCoverMap.IsNull() ) - return new HYDROGUI_LandCoverMapPrs( aLandCoverMap ); + { + Handle(HYDROGUI_LandCoverMapPrs) aLandCoverMapPrs = new HYDROGUI_LandCoverMapPrs( aLandCoverMap ); + if ( myIsScalarMapMode ) + { + LightApp_Application* anApp = myDisplayer->module()->getApp(); + OCCViewer_ViewManager* aViewManager = ::qobject_cast( + anApp->getViewManager( OCCViewer_Viewer::Type(), true ) ); + if ( aViewManager ) + { + if ( OCCViewer_Viewer* aViewer = aViewManager->getOCCViewer() ) + { + int aViewerId = (size_t)aViewer; + + // Set Strickler table + Handle(HYDROData_StricklerTable) aTable = + myDisplayer->module()->getLandCoverColoringTable( aViewerId ); + if( !aTable.IsNull() ) + aLandCoverMapPrs->SetTable( aTable ); + + // Set color scale + OCCViewer_ViewWindow* aWnd = dynamic_cast( aViewer->getViewManager()->getActiveView() ); + Handle(V3d_View) aView = aWnd->getViewPort()->getView(); + if( !aView.IsNull() ) + { + Handle(Aspect_ColorScale) aColorScale = aView->ColorScale(); + aLandCoverMapPrs->SetColorScale( aColorScale ); + } + } + } + } + return aLandCoverMapPrs; + } return NULL; } -- 2.39.2