#include "ImageMPR.h" #include "ui_ImageMPR.h" #include #include #include /* #include #include #include #include #include #include #include #include // ------------------------------------------------------------------------- #define IDMS_QT_ACTION( name ) \ QObject::connect( \ this->m_UI->action##name, SIGNAL( triggered( ) ), \ this, SLOT( _triggered_action##name( ) ) \ ) */ // ------------------------------------------------------------------------- ImageMPR::ImageMPR( QWidget* parent ) : QMainWindow( parent ), m_UI( new Ui::ImageMPR ), m_InputImage( NULL ) { this->m_UI->setupUi( this ); // Create and associate renderers this->m_3DRenderer = vtkSmartPointer< vtkRenderer >::New( ); this->m_XPlaneRenderer = vtkSmartPointer< vtkRenderer >::New( ); this->m_YPlaneRenderer = vtkSmartPointer< vtkRenderer >::New( ); this->m_ZPlaneRenderer = vtkSmartPointer< vtkRenderer >::New( ); this->m_3DRenderer->SetBackground( 0.2, 0.2, 0.2 ); this->m_XPlaneRenderer->SetBackground( 0.1, 0.3, 0.8 ); this->m_YPlaneRenderer->SetBackground( 0.1, 0.3, 0.8 ); this->m_ZPlaneRenderer->SetBackground( 0.1, 0.3, 0.8 ); this->m_UI->m_3DVTK->GetRenderWindow( )-> AddRenderer( this->m_3DRenderer ); this->m_UI->m_XPlaneVTK->GetRenderWindow( )-> AddRenderer( this->m_XPlaneRenderer ); this->m_UI->m_YPlaneVTK->GetRenderWindow( )-> AddRenderer( this->m_YPlaneRenderer ); this->m_UI->m_ZPlaneVTK->GetRenderWindow( )-> AddRenderer( this->m_ZPlaneRenderer ); // Configure MPR actors this->m_MPRActors = vtkSmartPointer< TMPRActors >::New( ); // Prepare interaction this->m_XStyle = vtkSmartPointer< TStyle >::New( ); this->m_YStyle = vtkSmartPointer< TStyle >::New( ); this->m_ZStyle = vtkSmartPointer< TStyle >::New( ); this->m_XStyle-> Configure( this->m_MPRActors->GetSliceActors( 0 ), this->m_MPRActors ); this->m_YStyle-> Configure( this->m_MPRActors->GetSliceActors( 1 ), this->m_MPRActors ); this->m_ZStyle-> Configure( this->m_MPRActors->GetSliceActors( 2 ), this->m_MPRActors ); this->m_XStyle-> SetInteractor( this->m_UI->m_XPlaneVTK->GetInteractor( ), 0 ); this->m_YStyle-> SetInteractor( this->m_UI->m_YPlaneVTK->GetInteractor( ), 1 ); this->m_ZStyle-> SetInteractor( this->m_UI->m_ZPlaneVTK->GetInteractor( ), 2 ); this->m_XStyle->SetModeToNavigation( ); this->m_YStyle->SetModeToNavigation( ); this->m_ZStyle->SetModeToNavigation( ); QObject::connect( this->m_UI->actionOpenPlugins, SIGNAL( triggered( ) ), this, SLOT( _triggered_actionOpenPlugins( ) ) ); QObject::connect( this->m_UI->actionOpenInputImage, SIGNAL( triggered( ) ), this, SLOT( _triggered_actionOpenInputImage( ) ) ); // Start: load all disponible plugins this->_triggered_actionOpenPlugins( ); } // ------------------------------------------------------------------------- ImageMPR:: ~ImageMPR( ) { // Close all connections this->m_Plugins.UnloadAll( ); // Delete objects delete this->m_UI; if( this->m_InputImage != NULL ) delete this->m_InputImage; } // ------------------------------------------------------------------------- void ImageMPR:: _triggered_actionOpenPlugins( ) { // Show dialog and check if it was accepted QFileDialog dialog( this ); dialog.setFileMode( QFileDialog::ExistingFile ); dialog.setDirectory( "." ); dialog.setNameFilter( tr( "Plugins file (*.so);;All files (*)" ) ); dialog.setDefaultSuffix( tr( "so" ) ); if( !( dialog.exec( ) ) ) return; std::string fname = dialog.selectedFiles( ).at( 0 ).toStdString( ); this->m_Plugins.UnloadAll( ); if( !( this->m_Plugins.Load( fname ) ) ) { QMessageBox::critical( this, tr( "Ignoring plugin" ), tr( fname.c_str( ) ) ); this->m_Plugins.UnloadAll( ); return; } // fi this->m_BaseClasses[ "ImageReader" ] = "cpPlugins::Plugins::ImageReader"; this->m_BaseClasses[ "ImageSeriesReader" ] = "cpPlugins::Plugins::ImageSeriesReader"; } // ------------------------------------------------------------------------- void ImageMPR:: _triggered_actionOpenInputImage( ) { // Show dialog and check if it was accepted QFileDialog dialog( this ); dialog.setFileMode( QFileDialog::ExistingFiles ); dialog.setDirectory( tr( "." ) ); dialog.setNameFilter( tr( "Medical image files (*.mhd *.bin *.dcm);;All files (*)" ) ); dialog.setDefaultSuffix( tr( "mhd" ) ); if( !( dialog.exec( ) ) ) return; if( this->m_InputImage != NULL ) delete this->m_InputImage; this->m_InputImage = NULL; unsigned int nFiles = dialog.selectedFiles( ).size( ); if( nFiles == 1 ) { std::string fname = dialog.selectedFiles( ).at( 0 ).toStdString( ); TPlugin* reader = dynamic_cast< TPlugin* >( this->m_Plugins.CreateObject( this->m_BaseClasses[ "ImageReader" ] ) ); TParameters reader_params = reader->GetDefaultParameters( ); reader_params[ "FileName" ].second = fname; reader_params[ "PixelType" ].second = "short"; reader_params[ "ImageDimension" ].second = "3"; reader_params[ "IsColorImage" ].second = "0"; reader->SetParameters( reader_params ); std::string err = reader->Update( ); if( err == "" ) { this->m_InputImage = dynamic_cast< TPluginImage* >( reader->GetOutput( 0 ) ); reader->DisconnectOutputs( ); } else QMessageBox::critical( this, tr( "Error reading single image" ), tr( err.c_str( ) ) ); delete reader; } else if( nFiles > 1 ) { /* TODO if( this->m_ImageSeriesReaderClassName == "" ) { QMessageBox::critical( this, tr( "No plugin to read an image series found!" ), tr( "No plugin to read an image series found!" ) ); return( ret ); } // fi std::string fname = dialog.selectedFiles( ).at( 0 ).toStdString( ); this->m_LastOpenedFile = fname; return( ret ); */ } // fi if( this->m_InputImage != NULL ) { this->m_MPRActors->SetInputData( this->m_InputImage->GetVTKImageData( ) ); this->m_MPRActors->PushDataInto( this->m_XPlaneRenderer, this->m_YPlaneRenderer, this->m_ZPlaneRenderer, this->m_3DRenderer ); // Reset all cameras this->m_3DRenderer->ResetCamera( ); this->m_XPlaneRenderer->ResetCamera( ); this->m_YPlaneRenderer->ResetCamera( ); this->m_ZPlaneRenderer->ResetCamera( ); // Ok, start! this->m_UI->m_3DVTK->GetRenderWindow( )->Render( ); this->m_UI->m_XPlaneVTK->GetRenderWindow( )->Render( ); this->m_UI->m_YPlaneVTK->GetRenderWindow( )->Render( ); this->m_UI->m_ZPlaneVTK->GetRenderWindow( )->Render( ); } // fi } // eof - $RCSfile$