#include <vtkLookupTable.h>
#include <vtkRenderer.h>
+#include <vtkTextProperty.h>
#include <vtkWindow.h>
#include <vtkActor2DCollection.h>
//#define SATURATION_START 1.0
//#define SATURATION_END 0.4
-#define HUE_START 1.0
-#define HUE_END 0.0
+#define HUE_START 0.7
+#define HUE_END 0.0
#define SATURATION_START 1.0
#define SATURATION_END 1.0
HYDROGUI_VTKPrsDisplayer::HYDROGUI_VTKPrsDisplayer( HYDROGUI_Module* theModule )
: HYDROGUI_AbstractDisplayer( theModule ), myDriver( NULL )
{
- // The invalid value is used to identify the case when the table range is not initialized yet.
- double anInvalidValue = HYDROGUI_VTKPrs::InvalidZValue();
- vtkLookupTable* aTable = vtkLookupTable::New();
- aTable->SetHueRange( HUE_START, HUE_END );
- aTable->SetSaturationRange( SATURATION_START, SATURATION_END );
- aTable->SetTableRange( anInvalidValue, anInvalidValue );
- aTable->SetValueRange( 1.0, 1.0 );
- aTable->SetAlphaRange( 1.0, 1.0 );
- aTable->SetNumberOfColors( NB_COLORS );
- myScalarBar->SetLookupTable( aTable );
}
HYDROGUI_VTKPrsDisplayer::~HYDROGUI_VTKPrsDisplayer()
}
}
+void HYDROGUI_VTKPrsDisplayer::DeleteScalarBar( const int theViewerId )
+{
+ SVTK_Viewer* aViewer = module()->getVTKViewer( theViewerId );
+ if( aViewer )
+ {
+ if ( myScalarBars.contains( (size_t)aViewer ) )
+ {
+ SUIT_ViewManager* aViewMgr = dynamic_cast<SUIT_ViewManager*>( aViewer->getViewManager() );
+ if ( aViewMgr && aViewMgr->getViewsCount() > 0 )
+ {
+ SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>( aViewMgr->getActiveView() );
+ if ( aView )
+ {
+ vtkScalarBarActor* aScalarBar = myScalarBars[ (size_t)aViewer ];
+ if ( aView->getRenderer()->HasViewProp( aScalarBar ) )
+ {
+ aView->getRenderer()->RemoveActor2D( aScalarBar );
+ }
+ }
+ }
+ myScalarBars.remove( (size_t)aViewer );
+ }
+ }
+}
+
void HYDROGUI_VTKPrsDisplayer::Erase( const HYDROData_SequenceOfObjects& theObjs,
const int theViewerId )
{
SVTK_Viewer* aViewer = module()->getVTKViewer( theViewerId );
if( aViewer )
{
- // Invalidate global Z range
- double anInvalidRange[2] = { HYDROGUI_VTKPrs::InvalidZValue(), HYDROGUI_VTKPrs::InvalidZValue() };
- SetZRange( anInvalidRange );
// Hide colors legend bar
SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(
aViewer->getViewManager()->getActiveView() );
+ vtkScalarBarActor* aScalarBar = 0;
if ( aView )
{
- if ( aView->getRenderer()->HasViewProp( myScalarBar.GetPointer() ) )
+ if ( !myScalarBars.contains( (size_t)aViewer ) )
{
- aView->getRenderer()->RemoveActor2D( myScalarBar.GetPointer() );
+ createScalarBar( (size_t)aViewer );
+ }
+ aScalarBar = myScalarBars[ (size_t)aViewer ];
+
+ if ( aView->getRenderer()->HasViewProp( aScalarBar ) )
+ {
+ aView->getRenderer()->RemoveActor2D( aScalarBar );
}
}
+ // Invalidate global Z range
+ double anInvalidRange[2] = { HYDROGUI_VTKPrs::InvalidZValue(), HYDROGUI_VTKPrs::InvalidZValue() };
+ SetZRange( (size_t)aViewer, anInvalidRange );
int anInvalidZ = HYDROGUI_VTKPrs::InvalidZValue();
bool isChanged = false;
bool anIsInserted = ( aPrs != 0 );
if( anIsVisible && ( !aPrs || aPrs->getIsToUpdate() || theIsForced ) )
{
- if( HYDROGUI_VTKPrsDriver* aDriver = getDriver( anObj ) )
+ if( HYDROGUI_VTKPrsDriver* aDriver = getDriver( (size_t)aViewer, anObj ) )
{
if( aDriver->Update( anObj, aPrs ) && aPrs && !anIsInserted )
{
{
// Extend the global Z range if necessary
- double* aGlobalRange = GetZRange();
+ double* aGlobalRange = GetZRange( (size_t)aViewer );
double* aRange = aPrs->getInternalZRange();
bool anIsUpdate = false;
if ( aRange[0] < aGlobalRange[0] || ValuesEquals( aGlobalRange[0], anInvalidZ ) )
if ( anIsUpdate )
{
- module()->updateVTKZRange( aGlobalRange );
+ module()->updateVTKZRange( (size_t)aViewer, aGlobalRange );
}
aViewer->Display( aPrs );
}
}
- if ( isChanged )
+ if ( aView )
{
- // Show colors legend bar
- if ( aView )
+ if ( isChanged && aScalarBar )
{
- aView->getRenderer()->AddActor2D( myScalarBar.GetPointer() );
+ // Show colors legend bar
+ aView->getRenderer()->AddActor2D( aScalarBar );
}
- }
- if ( theDoFitAll )
- {
- // Repaint is done inside OnFitAll()
- aViewer->getViewManager()->getActiveView()->onAccelAction( SUIT_Accel::ZoomFit );
- }
- else if ( isChanged )
- {
- aViewer->Repaint();
+ // Refresh the view
+ if ( theDoFitAll )
+ {
+ // Repaint is done inside OnFitAll()
+ aView->onAccelAction( SUIT_Accel::ZoomFit );
+ }
+ else if ( isChanged )
+ {
+ aView->Repaint();
+ }
}
}
}
}
}
-HYDROGUI_VTKPrsDriver* HYDROGUI_VTKPrsDisplayer::getDriver( const Handle(HYDROData_Entity)& theObj )
+HYDROGUI_VTKPrsDriver* HYDROGUI_VTKPrsDisplayer::getDriver( const int theViewId, const Handle(HYDROData_Entity)& theObj )
{
HYDROGUI_VTKPrsDriver* aDriver = NULL;
ObjectKind aKind = theObj->GetKind();
{
if ( !myDriver )
{
- myDriver = new HYDROGUI_VTKPrsBathymetryDriver( myScalarBar.GetPointer() );
+ myDriver = new HYDROGUI_VTKPrsBathymetryDriver( myScalarBars[ theViewId ] );
}
aDriver = myDriver;
}
return SVTK_Viewer::Type();
}
-void HYDROGUI_VTKPrsDisplayer::SetZRange( double theRange[] )
+void HYDROGUI_VTKPrsDisplayer::SetZRange( const int theViewId, double theRange[] )
+{
+ myScalarBars[ theViewId ]->GetLookupTable()->SetRange( theRange );
+}
+
+double* HYDROGUI_VTKPrsDisplayer::GetZRange( const int theViewId ) const
{
- myScalarBar->GetLookupTable()->SetRange( theRange );
+ return myScalarBars[ theViewId ]->GetLookupTable()->GetRange();
}
-double* HYDROGUI_VTKPrsDisplayer::GetZRange() const
+void HYDROGUI_VTKPrsDisplayer::createScalarBar( const int theViewId )
{
- return myScalarBar->GetLookupTable()->GetRange();
-}
\ No newline at end of file
+ if ( !myScalarBars.contains( theViewId ) )
+ {
+ // The invalid value is used to identify the case when the table range is not initialized yet.
+ double anInvalidValue = HYDROGUI_VTKPrs::InvalidZValue();
+ vtkLookupTable* aTable = vtkLookupTable::New();
+ aTable->SetHueRange( HUE_START, HUE_END );
+ aTable->SetSaturationRange( SATURATION_START, SATURATION_END );
+ aTable->SetTableRange( anInvalidValue, anInvalidValue );
+ aTable->SetValueRange( 1.0, 1.0 );
+ aTable->SetAlphaRange( 1.0, 1.0 );
+ aTable->SetNumberOfColors( NB_COLORS );
+ aTable->Build();
+ vtkSmartPointer<vtkScalarBarActor> aScalarBar = vtkScalarBarActor::New();
+ aScalarBar->SetLookupTable( aTable );
+ aScalarBar->SetNumberOfLabels( NB_COLORS * 0.75 );
+ aScalarBar->SetWidth( aScalarBar->GetWidth() / 1.5 );
+ aScalarBar->SetTextureGridWidth( aScalarBar->GetTextureGridWidth() * 4. );
+ aTable->Delete();
+ myScalarBars.insert( theViewId, aScalarBar );
+ }
+}