X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=appli%2FImageMPR%2FImageMPR.cxx;h=133060315c0ef51e7334e63ae97aa6b8ed23625d;hb=f1c75e8efd926172e954cd5e7952622c5788b450;hp=58276cb7433b6b7027347130614d0e8ee7c057d2;hpb=91f750d8a54e87cdd626566aad3d80940ae041fd;p=cpPlugins.git diff --git a/appli/ImageMPR/ImageMPR.cxx b/appli/ImageMPR/ImageMPR.cxx index 58276cb..1330603 100644 --- a/appli/ImageMPR/ImageMPR.cxx +++ b/appli/ImageMPR/ImageMPR.cxx @@ -1,6 +1,8 @@ #include "ImageMPR.h" #include "ui_ImageMPR.h" +#include + // ------------------------------------------------------------------------- #define ImageMPR_ConnectAction( ACTION ) \ QObject::connect( \ @@ -13,16 +15,15 @@ ImageMPR:: ImageMPR( QWidget* parent ) : QMainWindow( parent ), m_UI( new Ui::ImageMPR ), - m_ImageLoaded( "" ), - m_Flooding( false ) + m_Plugins( new TPlugins ), + m_MainImage( NULL ) { this->m_UI->setupUi( this ); - - // Associate callbacks - this->m_UI->MPR->AddCursorCommand( Self::_CursorCommand, this ); + this->m_Plugins->SetWidget( this ); // Connect actions ImageMPR_ConnectAction( OpenImage ); + ImageMPR_ConnectAction( OpenDICOMSeries ); ImageMPR_ConnectAction( OpenSegmentation ); ImageMPR_ConnectAction( OpenPolyData ); ImageMPR_ConnectAction( SaveImage ); @@ -34,8 +35,8 @@ ImageMPR( QWidget* parent ) ImageMPR_ConnectAction( ShowPlugins ); // Try to load default plugins - this->m_UI->MPR->LoadPlugins( ); - this->m_UI->MPR->AssociatePluginsToMenu( + this->m_Plugins->LoadPluginsConfigurationFile( "Plugins.cfg" ); + this->m_Plugins->AssociatePluginsToMenu( this->m_UI->MenuFilters, this, SLOT( _execPlugin( ) ) ); } @@ -45,23 +46,63 @@ ImageMPR:: ~ImageMPR( ) { delete this->m_UI; + delete this->m_Plugins; } // ------------------------------------------------------------------------- void ImageMPR:: _aOpenImage( ) { - if( this->m_ImageLoaded != "" ) + if( this->m_MainImage.IsNotNull( ) ) this->m_UI->MPR->ClearAll( ); - this->m_ImageLoaded = this->m_UI->MPR->LoadImage( ); + if( this->m_Plugins->ReadImage( this->m_MainImage, true ) ) + { + vtkImageData* vimage = this->m_MainImage->GetVTK< vtkImageData >( ); + if( vimage == NULL ) + QMessageBox::critical( + this, + QMessageBox::tr( "Error showing image." ), + QMessageBox::tr( + "Image was read, but no valid VTK conversion was found." + ) + ); + else + this->m_UI->MPR->ShowImage( vimage ); + + } // fi +} + +// ------------------------------------------------------------------------- +void ImageMPR:: +_aOpenDICOMSeries( ) +{ + if( this->m_MainImage.IsNotNull( ) ) + this->m_UI->MPR->ClearAll( ); + if( this->m_Plugins->ReadDicomSeries( this->m_MainImage ) ) + { + vtkImageData* vimage = this->m_MainImage->GetVTK< vtkImageData >( ); + if( vimage == NULL ) + QMessageBox::critical( + this, + QMessageBox::tr( "Error showing image." ), + QMessageBox::tr( + "Image was read, but no valid VTK conversion was found." + ) + ); + else + this->m_UI->MPR->ShowImage( vimage ); + + } // fi } // ------------------------------------------------------------------------- void ImageMPR:: _aOpenSegmentation( ) { - if( this->m_ImageLoaded != "" ) + /* + if( this->m_ImageLoaded != "" ) this->m_ImageLoaded = this->m_UI->MPR->LoadImage( ); + */ } // ------------------------------------------------------------------------- @@ -74,6 +115,8 @@ _aOpenPolyData( ) void ImageMPR:: _aSaveImage( ) { + if( this->m_MainImage.IsNotNull( ) ) + this->m_Plugins->WriteImage( this->m_MainImage, true ); } // ------------------------------------------------------------------------- @@ -104,8 +147,8 @@ _aRedo( ) void ImageMPR:: _aLoadPlugins( ) { - this->m_UI->MPR->DialogLoadPlugins( ); - this->m_UI->MPR->AssociatePluginsToMenu( + this->m_Plugins->DialogLoadPlugins( ); + this->m_Plugins->AssociatePluginsToMenu( this->m_UI->MenuFilters, this, SLOT( _execPlugin( ) ) ); } @@ -124,21 +167,54 @@ _execPlugin( ) QAction* action = dynamic_cast< QAction* >( this->sender( ) ); if( action == NULL ) return; + QMenu* menu = dynamic_cast< QMenu* >( action->parentWidget( ) ); + if( menu == NULL ) + return; + std::string cate = menu->title( ).toStdString( ); std::string name = action->text( ).toStdString( ); + std::string err = ""; - if( name == "cpPlugins::BasicFilters::FloodFillImageFilter" ) + TPlugins::TProcessObject::Pointer filter; + if( this->m_Plugins->CreateFilter( filter, name ) ) { - this->m_Flooding = true; + if( cate == "ImageToMeshFilter" ) + { + if( filter->ExecConfigurationDialog( this ) ) + { + filter->SetInput( "Input", this->m_MainImage ); + this->_Block( ); + err = filter->Update( ); + this->_Unblock( ); + TPlugins::TMesh::Pointer mesh = + filter->GetOutput< TPlugins::TMesh >( "Input" ); + mesh->Print( std::cout ); + + } // fi + + } // fi } else - { - this->m_Flooding = false; - this->m_UI->MPR->ExecuteFilter( - name, this->m_ImageLoaded, "SegmentedImage" + QMessageBox::critical( + this, + tr( "Error creating filter" ), + tr( "No valid filter defined." ) ); - } // fi - + /* + if( name == "cpPlugins::BasicFilters::FloodFillImageFilter" ) + { + this->m_Flooding = true; + } + else + { + this->m_Flooding = false; + this->m_UI->MPR->ExecuteFilter( + name, this->m_ImageLoaded, "SegmentedImage" + ); + + } // fi + */ + // Configure filter /* TPluginFilter::Pointer filter = @@ -182,48 +258,46 @@ _execPlugin( ) } // ------------------------------------------------------------------------- -void ImageMPR:: -_CursorCommand( double* pos, int axis, void* data ) -{ - Self* app = reinterpret_cast< Self* >( data ); - if( app == NULL ) - return; - if( !( app->m_Flooding ) ) - return; - - cpPlugins::Interface::ProcessObject::Pointer filter = - app->m_UI->MPR->CreateFilter( - "cpPlugins::BasicFilters::FloodFillImageFilter" - ); - if( filter.IsNull( ) ) - return; - - cpPlugins::Interface::Parameters* params = filter->GetParameters( ); - params->SetPoint( "Seed", 3, pos ); - params->SetReal( "Window", app->m_UI->MPR->GetWindow( ) ); - params->SetReal( "Level", app->m_UI->MPR->GetLevel( ) ); - params->SetUint( "InsideValue", 1 ); - params->SetUint( "OutsideValue", 0 ); - filter->SetInput( "Input", app->m_UI->MPR->GetImage( app->m_ImageLoaded ) ); - app->m_UI->MPR->Block( ); - std::string err = filter->Update( ); - cpPlugins::Interface::BaseMPRWindow::TImage::Pointer image = filter->GetOutput< cpPlugins::Interface::BaseMPRWindow::TImage >( "Output" ); - filter->DisconnectOutputs( ); - app->m_UI->MPR->AddImage( "Segmentation", image ); - app->m_UI->MPR->Unblock( ); - - - - /* TODO - std::cout - << "CursorCommand ==> " - << pos[ 0 ] << " " - << pos[ 1 ] << " " - << pos[ 2 ] << " : " - << axis << " " - << data << std::endl; - */ -} +/* TODO + void ImageMPR:: + _CursorCommand( double* pos, int axis, void* data ) + { + Self* app = reinterpret_cast< Self* >( data ); + if( app == NULL ) + return; + if( !( app->m_Flooding ) ) + return; + + cpPlugins::Interface::ProcessObject::Pointer filter = + app->m_UI->MPR->CreateFilter( + "cpPlugins::BasicFilters::FloodFillImageFilter" + ); + if( filter.IsNull( ) ) + return; + + cpPlugins::Interface::Parameters* params = filter->GetParameters( ); + params->SetPoint( "Seed", 3, pos ); + params->SetReal( "Window", app->m_UI->MPR->GetWindow( ) ); + params->SetReal( "Level", app->m_UI->MPR->GetLevel( ) ); + params->SetUint( "InsideValue", 1 ); + params->SetUint( "OutsideValue", 0 ); + filter->SetInput( "Input", app->m_UI->MPR->GetImage( app->m_ImageLoaded ) ); + app->m_UI->MPR->Block( ); + std::string err = filter->Update( ); + cpPlugins::Interface::BaseMPRWindow::TImage::Pointer image = filter->GetOutput< cpPlugins::Interface::BaseMPRWindow::TImage >( "Output" ); + filter->DisconnectOutputs( ); + app->m_UI->MPR->AddImage( "Segmentation", image ); + app->m_UI->MPR->Unblock( ); + + std::cout + << "CursorCommand ==> " + << pos[ 0 ] << " " + << pos[ 1 ] << " " + << pos[ 2 ] << " : " + << axis << " " + << data << std::endl; + } +*/ /* #include "MementoState.h"