#include #ifdef cpExtensions_QT4 #include #include #include #include #include #include #include #include #include #include // ------------------------------------------------------------------------- cpExtensions::QT::RendererWidget:: RendererWidget( QWidget* parent, Qt::WindowFlags f ) : Superclass( parent, f ), Superclass2( ) { this->m_Renderer = vtkSmartPointer< vtkRenderer >::New( ); this->GetRenderWindow( )->AddRenderer( this->m_Renderer ); vtkAxesActor* axes = vtkAxesActor::New( ); axes->AxisLabelsOff( ); this->m_Marker = vtkSmartPointer< vtkOrientationMarkerWidget >::New( ); this->m_Marker->SetOutlineColor( 1, 1, 1 ); this->m_Marker->SetOrientationMarker( axes ); this->m_Marker->SetInteractor( this->GetRenderWindow( )->GetInteractor( ) ); this->m_Marker->EnabledOn( ); this->m_Marker->InteractiveOff( ); axes->Delete( ); this->SetQuadrant( 0 ); } // ------------------------------------------------------------------------- cpExtensions::QT::RendererWidget:: ~RendererWidget( ) { } // ------------------------------------------------------------------------- int cpExtensions::QT::RendererWidget:: GetQuadrant( ) const { return( this->m_Quadrant ); } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: SetQuadrant( int q ) { this->m_Quadrant = ( q - 1 ) % 4; if( this->m_Quadrant == 0 ) this->m_Marker->SetViewport( 0.85, 0.00, 1.00, 0.15 ); else if( this->m_Quadrant == 1 ) this->m_Marker->SetViewport( 0.00, 0.00, 0.15, 0.15 ); else if( this->m_Quadrant == 2 ) this->m_Marker->SetViewport( 0.00, 0.85, 0.15, 1.00 ); else if( this->m_Quadrant == 3 ) this->m_Marker->SetViewport( 0.85, 0.85, 1.00, 1.00 ); } // ------------------------------------------------------------------------- vtkRenderer* cpExtensions::QT::RendererWidget:: GetRenderer( ) { return( this->m_Renderer ); } // ------------------------------------------------------------------------- const vtkRenderer* cpExtensions::QT::RendererWidget:: GetRenderer( ) const { return( this->m_Renderer ); } // ------------------------------------------------------------------------- vtkInteractorStyle* cpExtensions::QT::RendererWidget:: GetStyle( ) { auto iren = this->GetInteractor( ); if( iren != NULL ) return( dynamic_cast< vtkInteractorStyle* >( iren->GetInteractorStyle( ) ) ); else return( NULL ); } // ------------------------------------------------------------------------- const vtkInteractorStyle* cpExtensions::QT::RendererWidget:: GetStyle( ) const { // Ugly, but necessary :-( Self* self = const_cast< Self* >( this ); if( self != NULL ) { auto iren = self->GetInteractor( ); if( iren != NULL ) return( dynamic_cast< const vtkInteractorStyle* >( iren->GetInteractorStyle( ) ) ); else return( NULL ); } else return( NULL ); } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: SetStyle( vtkInteractorStyle* style ) { this->GetInteractor( )->SetInteractorStyle( style ); } // ------------------------------------------------------------------------- vtkCamera* cpExtensions::QT::RendererWidget:: GetActiveCamera( ) { return( this->m_Renderer->GetActiveCamera( ) ); } // ------------------------------------------------------------------------- const vtkCamera* cpExtensions::QT::RendererWidget:: GetActiveCamera( ) const { return( this->m_Renderer->GetActiveCamera( ) ); } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: AddViewProp( vtkProp* prop, const std::string& name ) { if( prop != NULL ) { auto i = this->m_ViewProps.find( name ); if( i == this->m_ViewProps.end( ) ) i = this->m_ViewProps.insert( TPropCollection::value_type( name, TProps( ) ) ).first; i->second.insert( prop ); this->m_Renderer->AddViewProp( prop ); } // fi } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: AddViewProps( vtkPropCollection* props, const std::string& name ) { if( props != NULL ) { auto i = this->m_ViewProps.find( name ); if( i == this->m_ViewProps.end( ) ) i = this->m_ViewProps.insert( TPropCollection::value_type( name, TProps( ) ) ).first; props->InitTraversal( ); while( vtkProp* prop = props->GetNextProp( ) ) { i->second.insert( prop ); this->m_Renderer->AddViewProp( prop ); } // elihw } // fi } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: AddAuxViewProp( vtkProp* prop, const std::string& name ) { if( prop != NULL ) { auto i = this->m_AuxViewProps.find( name ); if( i == this->m_AuxViewProps.end( ) ) i = this->m_AuxViewProps.insert( TPropCollection::value_type( name, TProps( ) ) ).first; i->second.insert( prop ); this->m_Renderer->AddViewProp( prop ); } // fi } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: AddAuxViewProps( vtkPropCollection* props, const std::string& name ) { if( props != NULL ) { auto i = this->m_AuxViewProps.find( name ); if( i == this->m_AuxViewProps.end( ) ) i = this->m_AuxViewProps.insert( TPropCollection::value_type( name, TProps( ) ) ).first; props->InitTraversal( ); while( vtkProp* prop = props->GetNextProp( ) ) { i->second.insert( prop ); this->m_Renderer->AddViewProp( prop ); } // elhiw } // fi } // ------------------------------------------------------------------------- cpExtensions::QT::RendererWidget:: TProps& cpExtensions::QT::RendererWidget:: GetViewProps( const std::string& name ) { static TProps zero; auto i = this->m_ViewProps.find( name ); if( i == this->m_ViewProps.end( ) ) { zero.clear( ); return( zero ); } else return( i->second ); } // ------------------------------------------------------------------------- const cpExtensions::QT::RendererWidget:: TProps& cpExtensions::QT::RendererWidget:: GetViewProps( const std::string& name ) const { static const TProps zero; auto i = this->m_ViewProps.find( name ); if( i == this->m_ViewProps.end( ) ) return( zero ); else return( i->second ); } // ------------------------------------------------------------------------- cpExtensions::QT::RendererWidget:: TProps& cpExtensions::QT::RendererWidget:: GetAuxViewProps( const std::string& name ) { static TProps zero; auto i = this->m_AuxViewProps.find( name ); if( i == this->m_AuxViewProps.end( ) ) { zero.clear( ); return( zero ); } else return( i->second ); } // ------------------------------------------------------------------------- const cpExtensions::QT::RendererWidget:: TProps& cpExtensions::QT::RendererWidget:: GetAuxViewProps( const std::string& name ) const { static const TProps zero; auto i = this->m_AuxViewProps.find( name ); if( i == this->m_AuxViewProps.end( ) ) return( zero ); else return( i->second ); } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: RemoveViewProps( const std::string& name ) { auto i = this->m_ViewProps.find( name ); if( i != this->m_ViewProps.end( ) ) { for( auto p = i->second.begin( ); p != i->second.end( ); ++p ) this->m_Renderer->RemoveViewProp( *p ); this->m_ViewProps.erase( i ); } // fi i = this->m_AuxViewProps.find( name ); if( i != this->m_AuxViewProps.end( ) ) { for( auto p = i->second.begin( ); p != i->second.end( ); ++p ) this->m_Renderer->RemoveViewProp( *p ); this->m_AuxViewProps.erase( i ); } // fi } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: RemoveViewProps( ) { this->m_Renderer->RemoveAllViewProps( ); this->m_ViewProps.clear( ); this->m_AuxViewProps.clear( ); } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: HideViewProps( const std::string& name ) { auto i = this->m_ViewProps.find( name ); if( i != this->m_ViewProps.end( ) ) for( auto p = i->second.begin( ); p != i->second.end( ); ++p ) ( *p )->VisibilityOff( ); i = this->m_AuxViewProps.find( name ); if( i != this->m_AuxViewProps.end( ) ) for( auto p = i->second.begin( ); p != i->second.end( ); ++p ) ( *p )->VisibilityOff( ); } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: ShowViewProps( const std::string& name ) { auto i = this->m_ViewProps.find( name ); if( i != this->m_ViewProps.end( ) ) for( auto p = i->second.begin( ); p != i->second.end( ); ++p ) ( *p )->VisibilityOn( ); i = this->m_AuxViewProps.find( name ); if( i != this->m_AuxViewProps.end( ) ) for( auto p = i->second.begin( ); p != i->second.end( ); ++p ) ( *p )->VisibilityOn( ); } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: ResetCamera( ) { this->m_Renderer->ResetCamera( ); } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: Render( ) { this->GetRenderWindow( )->Render( ); } // ------------------------------------------------------------------------- std::set< std::string > cpExtensions::QT::RendererWidget:: GetActorsNames( ) const { std::set< std::string > names; for( auto p = this->m_ViewProps.begin( ); p != this->m_ViewProps.end( ); ++p ) names.insert( p->first ); return( names ); } // ------------------------------------------------------------------------- bool cpExtensions::QT::RendererWidget:: IsWindowLevelImageActor( const std::string& name ) const { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { auto a = it->second.begin( ); if( a != it->second.end( ) ) return( dynamic_cast< TWLActor* >( a->GetPointer( ) ) != NULL ); else return( false ); } else return( false ); } // ------------------------------------------------------------------------- bool cpExtensions::QT::RendererWidget:: IsLUTImageActor( const std::string& name ) const { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { auto a = it->second.begin( ); if( a != it->second.end( ) ) return( dynamic_cast< TLUTActor* >( a->GetPointer( ) ) != NULL ); else return( false ); } else return( false ); } // ------------------------------------------------------------------------- bool cpExtensions::QT::RendererWidget:: Is3DActor( const std::string& name ) const { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { auto a = it->second.begin( ); if( a != it->second.end( ) ) return( dynamic_cast< vtkActor* >( a->GetPointer( ) ) != NULL ); else return( false ); } else return( false ); } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: GetScalarRange( const std::string& name, double r[ 2 ] ) const { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { auto p = it->second.begin( ); TWLActor* a = NULL; while( a == NULL && p != it->second.end( ) ) { a = dynamic_cast< TWLActor* >( p->GetPointer( ) ); p++; } // elihw if( a != NULL ) a->GetRange( r ); } // fi } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: GetWindowLevel( const std::string& name, double wl[ 2 ] ) const { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { auto p = it->second.begin( ); TWLActor* a = NULL; while( a == NULL && p != it->second.end( ) ) { a = dynamic_cast< TWLActor* >( p->GetPointer( ) ); p++; } // elihw if( a != NULL ) a->GetWindowLevel( wl ); } // fi } // ------------------------------------------------------------------------- double cpExtensions::QT::RendererWidget:: GetWindow( const std::string& name ) const { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { auto p = it->second.begin( ); TWLActor* a = NULL; while( a == NULL && p != it->second.end( ) ) { a = dynamic_cast< TWLActor* >( p->GetPointer( ) ); p++; } // elihw if( a != NULL ) return( a->GetWindow( ) ); else return( 0 ); } else return( 0 ); } // ------------------------------------------------------------------------- double cpExtensions::QT::RendererWidget:: GetLevel( const std::string& name ) const { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { auto p = it->second.begin( ); TWLActor* a = NULL; while( a == NULL && p != it->second.end( ) ) { a = dynamic_cast< TWLActor* >( p->GetPointer( ) ); p++; } // elihw if( a != NULL ) return( a->GetLevel( ) ); else return( 0 ); } else return( 0 ); } // ------------------------------------------------------------------------- char cpExtensions::QT::RendererWidget:: GetImageInterpolation( const std::string& name ) const { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { auto p = it->second.begin( ); TWLActor* a = NULL; while( a == NULL && p != it->second.end( ) ) { a = dynamic_cast< TWLActor* >( p->GetPointer( ) ); p++; } // elihw if( a != NULL ) { int int_type = a->GetProperty( )->GetInterpolationType( ); char ret = 0; switch( int_type ) { case VTK_NEAREST_INTERPOLATION: ret = 'N'; break; case VTK_LINEAR_INTERPOLATION: ret = 'L'; break; case VTK_CUBIC_INTERPOLATION: ret = 'C'; break; default: ret = 0; break; } // hctiws return( ret ); } else return( 0 ); } else return( 0 ); } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: GetColor( const std::string& name, double& r, double& g, double& b ) const { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { auto p = it->second.begin( ); vtkActor* a = NULL; while( a == NULL && p != it->second.end( ) ) { a = dynamic_cast< vtkActor* >( p->GetPointer( ) ); p++; } // elihw if( a != NULL ) return( a->GetProperty( )->GetColor( r, g, b ) ); } // fi } // ------------------------------------------------------------------------- double cpExtensions::QT::RendererWidget:: GetOpacity( const std::string& name ) const { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { auto p = it->second.begin( ); vtkActor* a = NULL; vtkImageSlice* s = NULL; while( a == NULL && s == NULL && p != it->second.end( ) ) { a = dynamic_cast< vtkActor* >( p->GetPointer( ) ); s = dynamic_cast< vtkImageSlice* >( p->GetPointer( ) ); p++; } // elihw if( a != NULL ) return( a->GetProperty( )->GetOpacity( ) ); else if( s != NULL ) return( s->GetProperty( )->GetOpacity( ) ); else return( 0 ); } return( 0 ); } // ------------------------------------------------------------------------- double cpExtensions::QT::RendererWidget:: GetPointSize( const std::string& name ) const { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { auto p = it->second.begin( ); vtkActor* a = NULL; while( a == NULL && p != it->second.end( ) ) { a = dynamic_cast< vtkActor* >( p->GetPointer( ) ); p++; } // elihw if( a != NULL ) return( a->GetProperty( )->GetPointSize( ) ); else return( 0 ); } return( 0 ); } // ------------------------------------------------------------------------- double cpExtensions::QT::RendererWidget:: GetLineWidth( const std::string& name ) const { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { auto p = it->second.begin( ); vtkActor* a = NULL; while( a == NULL && p != it->second.end( ) ) { a = dynamic_cast< vtkActor* >( p->GetPointer( ) ); p++; } // elihw if( a != NULL ) return( a->GetProperty( )->GetLineWidth( ) ); else return( 0 ); } return( 0 ); } // ------------------------------------------------------------------------- int cpExtensions::QT::RendererWidget:: GetRepresentation( const std::string& name ) const { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { auto p = it->second.begin( ); vtkActor* a = NULL; while( a == NULL && p != it->second.end( ) ) { a = dynamic_cast< vtkActor* >( p->GetPointer( ) ); p++; } // elihw if( a != NULL ) return( a->GetProperty( )->GetRepresentation( ) ); else return( -1 ); } return( -1 ); } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: SetScalarRange( const std::string& name, double r[ 2 ] ) { this->SetScalarRange( name, r[ 0 ], r[ 1 ] ); } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: SetScalarRange( const std::string& name, double min, double max ) { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { bool render = false; for( auto p = it->second.begin( ); p != it->second.end( ); ++p ) { TWLActor* a = dynamic_cast< TWLActor* >( p->GetPointer( ) ); if( a != NULL ) { render = true; a->SetRange( min, max ); } // fi } // rof if( render ) this->Render( ); } // fi } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: SetWindowLevel( const std::string& name, double wl[ 2 ] ) { this->SetWindowLevel( name, wl[ 0 ], wl[ 1 ] ); } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: SetWindowLevel( const std::string& name, double w, double l ) { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { bool render = false; for( auto p = it->second.begin( ); p != it->second.end( ); ++p ) { TWLActor* a = dynamic_cast< TWLActor* >( p->GetPointer( ) ); if( a != NULL ) { render = true; a->SetWindowLevel( w, l ); } // fi } // rof if( render ) this->Render( ); } // fi } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: SetWindow( const std::string& name, double w ) { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { bool render = false; for( auto p = it->second.begin( ); p != it->second.end( ); ++p ) { TWLActor* a = dynamic_cast< TWLActor* >( p->GetPointer( ) ); if( a != NULL ) { render = true; a->SetWindow( w ); } // fi } // rof if( render ) this->Render( ); } // fi } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: SetLevel( const std::string& name, double l ) { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { bool render = false; for( auto p = it->second.begin( ); p != it->second.end( ); ++p ) { TWLActor* a = dynamic_cast< TWLActor* >( p->GetPointer( ) ); if( a != NULL ) { render = true; a->SetLevel( l ); } // fi } // rof if( render ) this->Render( ); } // fi } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: SetImageInterpolation( const std::string& name, char i ) { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { bool render = false; for( auto p = it->second.begin( ); p != it->second.end( ); ++p ) { TWLActor* a = dynamic_cast< TWLActor* >( p->GetPointer( ) ); if( a != NULL ) { render = true; int int_type = VTK_NEAREST_INTERPOLATION; switch( i ) { case 'L': int_type = VTK_LINEAR_INTERPOLATION; break; case 'C': int_type = VTK_CUBIC_INTERPOLATION; break; default: int_type = VTK_NEAREST_INTERPOLATION; break; } // hctiws a->GetProperty( )->SetInterpolationType( int_type ); } // fi } // rof if( render ) this->Render( ); } // fi } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: SetColor( const std::string& name, double r, double g, double b ) { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { bool render = false; for( auto p = it->second.begin( ); p != it->second.end( ); ++p ) { vtkActor* a = dynamic_cast< vtkActor* >( p->GetPointer( ) ); if( a != NULL ) { render = true; a->GetProperty( )->SetColor( r, g, b ); } // fi } // rof if( render ) this->Render( ); } // fi } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: SetOpacity( const std::string& name, double o ) { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { bool render = false; for( auto p = it->second.begin( ); p != it->second.end( ); ++p ) { vtkActor* a = dynamic_cast< vtkActor* >( p->GetPointer( ) ); vtkImageSlice* s = dynamic_cast< vtkImageSlice* >( p->GetPointer( ) ); if( a != NULL ) { render = true; a->GetProperty( )->SetOpacity( o ); } else if( s != NULL ) { render = true; s->GetProperty( )->SetOpacity( o ); } // fi } // rof if( render ) this->Render( ); } // fi } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: SetPointSize( const std::string& name, double s ) { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { bool render = false; for( auto p = it->second.begin( ); p != it->second.end( ); ++p ) { vtkActor* a = dynamic_cast< vtkActor* >( p->GetPointer( ) ); if( a != NULL ) { render = true; a->GetProperty( )->SetPointSize( s ); } // fi } // rof if( render ) this->Render( ); } // fi } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: SetLineWidth( const std::string& name, double w ) { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { bool render = false; for( auto p = it->second.begin( ); p != it->second.end( ); ++p ) { vtkActor* a = dynamic_cast< vtkActor* >( p->GetPointer( ) ); if( a != NULL ) { render = true; a->GetProperty( )->SetLineWidth( w ); } // fi } // rof if( render ) this->Render( ); } // fi } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: SetRepresentationToPoints( const std::string& name ) { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { bool render = false; for( auto p = it->second.begin( ); p != it->second.end( ); ++p ) { vtkActor* a = dynamic_cast< vtkActor* >( p->GetPointer( ) ); if( a != NULL ) { render = true; a->GetProperty( )->SetRepresentationToPoints( ); } // fi } // rof if( render ) this->Render( ); } // fi } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: SetRepresentationToSurface( const std::string& name ) { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { bool render = false; for( auto p = it->second.begin( ); p != it->second.end( ); ++p ) { vtkActor* a = dynamic_cast< vtkActor* >( p->GetPointer( ) ); if( a != NULL ) { render = true; a->GetProperty( )->SetRepresentationToSurface( ); } // fi } // rof if( render ) this->Render( ); } // fi } // ------------------------------------------------------------------------- void cpExtensions::QT::RendererWidget:: SetRepresentationToWireframe( const std::string& name ) { auto it = this->m_ViewProps.find( name ); if( it != this->m_ViewProps.end( ) ) { bool render = false; for( auto p = it->second.begin( ); p != it->second.end( ); ++p ) { vtkActor* a = dynamic_cast< vtkActor* >( p->GetPointer( ) ); if( a != NULL ) { render = true; a->GetProperty( )->SetRepresentationToWireframe( ); } // fi } // rof if( render ) this->Render( ); } // fi } #endif // cpExtensions_QT4 // eof - $RCSfile$