-// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2015 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
// 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
#include "HYDROGUI_DataModel.h"
#include "HYDROGUI_Module.h"
#include "HYDROGUI_Tool.h"
-#include "HYDROGUI_Shape.h"
+#include <HYDROGUI_ShapeImage.h>
+#include <HYDROGUI_ShapeBathymetry.h>
#include "HYDROGUI_Operation.h"
#include "HYDROGUI_DataObject.h"
#include "HYDROGUI_ZLayers.h"
+#include <HYDROData_Bathymetry.h>
#include <AIS_InteractiveContext.hxx>
#include <AIS_ListIteratorOfListOfInteractive.hxx>
HYDROGUI_OCCDisplayer::HYDROGUI_OCCDisplayer( HYDROGUI_Module* theModule )
: HYDROGUI_AbstractDisplayer( theModule )
{
+ myToUpdateColorScale = false;
}
HYDROGUI_OCCDisplayer::~HYDROGUI_OCCDisplayer()
if ( !HYDROGUI_Tool::IsObjectHasPresentation( theObject, OCCViewer_Viewer::Type() ) )
return aResShape;
- aResShape = new HYDROGUI_Shape( theContext, theObject );
+ 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( this, theContext, Handle_HYDROData_Bathymetry::DownCast( theObject ) );
+ else
+ aResShape = new HYDROGUI_Shape( theContext, theObject );
+
module()->setObjectShape( theViewerId, theObject, aResShape );
return aResShape;
if ( anObjShape ) {
// update if needed
if ( anObjShape->getIsToUpdate() || theIsForced ) {
- anObjShape->update( false );
+ anObjShape->update( false, false );
}
// Set visibility
aRes = true;
}
- UpdateColorScale( theViewer );
return aRes;
}
}
}
+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();
int aViewerId = (size_t)theViewer;//TODO: check if viewer id is correct
- QList<HYDROGUI_Shape*> aBaths = module()->getObjectShapes( aViewerId, KIND_BATHYMETRY );
+ QList<HYDROGUI_Shape*> aShapes = module()->getObjectShapes( aViewerId, KIND_BATHYMETRY );
- bool isDisplayColorScale = !aBaths.empty();
+ bool isDisplayColorScale = !aShapes.empty();
Standard_Real anXPos = 0.05; //TODO
Standard_Real anYPos = 0.1; //TODO
Standard_Real aWidth = 0.2; //TODO
Standard_Real aColorScaleMin = 0, aColorScaleMax = 1, aMin, aMax;
bool isFirst = true;
- foreach( HYDROGUI_Shape* aBathShape, aBaths )
+ foreach( HYDROGUI_Shape* aShape, aShapes )
{
+ HYDROGUI_ShapeBathymetry* aBathShape = dynamic_cast<HYDROGUI_ShapeBathymetry*>( aShape );
+ if( !aBathShape || !aBathShape->isVisible() )
+ continue;
+
aBathShape->GetRange( aMin, aMax );
if( isFirst || aMin < aColorScaleMin )
aColorScale->SetTitle( aColorScaleTitle );
aColorScale->SetRange( aColorScaleMin, aColorScaleMax );
- foreach( HYDROGUI_Shape* aBathShape, aBaths )
+ foreach( HYDROGUI_Shape* aShape, aShapes )
+ {
+ HYDROGUI_ShapeBathymetry* aBathShape = dynamic_cast<HYDROGUI_ShapeBathymetry*>( aShape );
+ if( !aBathShape || !aBathShape->isVisible() )
+ continue;
+
aBathShape->UpdateWithColorScale( aColorScale );
+ }
}
if( !aView->ColorScaleIsDisplayed() )
aView->ColorScaleDisplay();
if( aView->ColorScaleIsDisplayed() )
aView->ColorScaleErase();
}
+
+ myToUpdateColorScale = false;
}