X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_OCCDisplayer.cxx;h=6f5081110ab3a624f5d3235d7536a798ce976768;hb=58bb6b7459bebeeb089c9ed486c4683a8bae7288;hp=6cfbf67e20ebbfedb2ef2d6d431a2159eb88628b;hpb=a0af24ffefdde80cb89a80cc048fbb72f4479139;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_OCCDisplayer.cxx b/src/HYDROGUI/HYDROGUI_OCCDisplayer.cxx index 6cfbf67e..6f508111 100644 --- a/src/HYDROGUI/HYDROGUI_OCCDisplayer.cxx +++ b/src/HYDROGUI/HYDROGUI_OCCDisplayer.cxx @@ -20,23 +20,23 @@ #include "HYDROGUI_DataModel.h" #include "HYDROGUI_Module.h" -#include "HYDROGUI_Tool.h" +#include "HYDROGUI_Tool2.h" #include #include -#include +#include #include "HYDROGUI_Operation.h" #include "HYDROGUI_DataObject.h" #include "HYDROGUI_ZLayers.h" #include -#include +#include +#include #include #include #include #include - -#include +#include #include @@ -162,12 +162,12 @@ HYDROGUI_Shape* HYDROGUI_OCCDisplayer::createShape( const int return aResShape; if( theObject->IsKind( STANDARD_TYPE( HYDROData_Image ) ) ) - aResShape = new HYDROGUI_ShapeImage( theContext, Handle_HYDROData_Image::DownCast( theObject ) ); + 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 ) ) ) { + aResShape = new HYDROGUI_ShapeBathymetry( this, theContext, Handle(HYDROData_Bathymetry)::DownCast( theObject ) ); + 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 +415,11 @@ void HYDROGUI_OCCDisplayer::UpdateColorScale( const OCCViewer_Viewer* theViewer OCCViewer_ViewWindow* aWnd = dynamic_cast( 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 aLandCoverShapes = module()->getObjectShapes( aViewerId, KIND_LAND_COVER ); + QList aLandCoverMapShapes = module()->getObjectShapes( aViewerId, KIND_LAND_COVER_MAP ); QList aBathShapes = module()->getObjectShapes( aViewerId, KIND_BATHYMETRY ); bool isDisplayColorScale = !aBathShapes.empty() || isLandCoverColoringOn; @@ -435,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(); } @@ -463,10 +464,10 @@ void HYDROGUI_OCCDisplayer::UpdateColorScale( const OCCViewer_Viewer* theViewer } } - Handle(Aspect_ColorScale) aColorScale; + Handle(AIS_ColorScale) aColorScale = GetColorScale( aViewerId ); + Handle(AIS_InteractiveContext) aCtx = theViewer->getAISContext(); if( isDisplayColorScale ) { - aColorScale = aView->ColorScale(); if( !aColorScale.IsNull() ) { aColorScale->SetXPosition( anXPos ); @@ -479,6 +480,8 @@ void HYDROGUI_OCCDisplayer::UpdateColorScale( const OCCViewer_Viewer* theViewer aColorScale->SetTitle( aColorScaleTitle ); aColorScale->SetRange( aColorScaleMin, aColorScaleMax ); + + aColorScale->SetToUpdate(); if ( !isLandCoverColoringOn ) { foreach( HYDROGUI_Shape* aShape, aBathShapes ) { @@ -489,56 +492,54 @@ void HYDROGUI_OCCDisplayer::UpdateColorScale( const OCCViewer_Viewer* theViewer aBathShape->UpdateWithColorScale( aColorScale ); } } + + if ( !aCtx.IsNull() && !aCtx->IsDisplayed( aColorScale ) ) { + aCtx->Display( aColorScale ); + } } - if( !aView->ColorScaleIsDisplayed() ) - aView->ColorScaleDisplay(); } else { - if( aView->ColorScaleIsDisplayed() ) - aView->ColorScaleErase(); + if ( !aCtx.IsNull() && aCtx->IsDisplayed( aColorScale ) ) { + aCtx->Erase( aColorScale ); + } } - foreach( HYDROGUI_Shape* aShape, aLandCoverShapes ) { - HYDROGUI_ShapeLandCover* aLandCoverShape = - dynamic_cast( aShape ); + foreach( HYDROGUI_Shape* aShape, aLandCoverMapShapes ) { + HYDROGUI_ShapeLandCoverMap* aLandCoverMapShape = + dynamic_cast( 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; } + +Handle(AIS_ColorScale) HYDROGUI_OCCDisplayer::GetColorScale( const int theViewerId ) +{ + Handle(AIS_ColorScale) aColorScale; + + aColorScale = myColorScales.value( theViewerId, aColorScale ); + if ( aColorScale.IsNull() ) { + aColorScale = new AIS_ColorScale(); + myColorScales.insert( theViewerId, aColorScale ); + } + + return aColorScale; +}