X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=appli%2FImageMPR%2FImageMPR.cxx;h=6c7e11918031325cbc9fbc1e3975495227129caf;hb=d6f15d4cb764982e2b09060a9c0f38636891590c;hp=cc9a01569b7efcaa2d8d926401e628752d4d3314;hpb=8e5fd31fd4d280781d8bc27a799361bf9c30b1d4;p=cpPlugins.git diff --git a/appli/ImageMPR/ImageMPR.cxx b/appli/ImageMPR/ImageMPR.cxx index cc9a015..6c7e119 100644 --- a/appli/ImageMPR/ImageMPR.cxx +++ b/appli/ImageMPR/ImageMPR.cxx @@ -19,6 +19,7 @@ ImageMPR( QWidget* parent ) { this->m_UI->setupUi( this ); this->m_Plugins->SetWidget( this ); + this->m_Plugins->SetApplication( this ); // Connect actions ImageMPR_ConnectAction( OpenImage ); @@ -33,12 +34,16 @@ ImageMPR( QWidget* parent ) ImageMPR_ConnectAction( LoadPlugins ); ImageMPR_ConnectAction( ShowPlugins ); + // Associate model with view + for( unsigned int i = 0; i < 4; ++i ) + this->m_Plugins->AddInteractor( this->m_UI->MPR->GetInteractor( i ) ); + // Try to load default plugins #ifdef WIN32 - this->m_Plugins->LoadPlugins("cpPluginsIO.dll"); - this->m_Plugins->LoadPlugins("cpPluginsBasicFilters.dll"); + this->m_Plugins->LoadPlugins( "cpPluginsIO.dll" ); + this->m_Plugins->LoadPlugins( "cpPluginsBasicFilters.dll" ); #else - this->m_Plugins->LoadPluginsConfigurationFile("Plugins.cfg"); + this->m_Plugins->LoadPluginsConfigurationFile( "Plugins.cfg" ); #endif this->m_Plugins->AssociatePluginsToMenu( this->m_UI->MenuFilters, this, SLOT( _execPlugin( ) ) @@ -55,22 +60,80 @@ ImageMPR:: // ------------------------------------------------------------------------- void ImageMPR:: -_aOpenImage( ) +UpdateActualFilter( ) { - // Clear all, since we are loading the main image - if( this->m_Objects.size( ) > 0 ) + if( !( this->m_Plugins->HasActiveFilter( ) ) ) + return; + + std::vector< std::string > outputs; + std::string err = this->m_Plugins->UpdateActiveFilter( outputs ); + if( err == "" ) { - this->m_UI->MPR->ClearAll( ); - this->m_Objects.clear( ); + for( auto oIt = outputs.begin( ); oIt != outputs.end( ); ++oIt ) + { + TPlugins::TImage* image = this->m_Plugins->GetImage( *oIt ); + if( image != NULL ) + { + vtkImageData* vimage = image->GetVTK< vtkImageData >( ); + if( vimage != NULL ) + { + this->m_UI->MPR->AddImage( + vimage, *oIt, this->m_Plugins->GetParent( *oIt ) + ); + this->m_UI->MPR->ShowData( *oIt ); + + } // fi + continue; + + } // fi + + TPlugins::TMesh* mesh = this->m_Plugins->GetMesh( *oIt ); + if( mesh != NULL ) + { + this->m_Plugins->BlockWidget( ); + this->m_UI->MPR->AddMesh( + mesh->GetVTK< vtkPolyData >( ), + *oIt, + this->m_Plugins->GetParent( *oIt ) + ); + this->m_UI->MPR->ShowData( *oIt ); + this->m_Plugins->UnblockWidget( ); + + } // fi + + } // rof + } + else + { + QMessageBox::critical( + this, + tr( "Error executing filter" ), + tr( ( std::string( "Error caught: " ) + err ).c_str( ) ) + ); + return; } // fi +} - // Read and show image, if possible - TPlugins::TImage::Pointer image; - if( this->m_Plugins->ReadImage( image, true ) ) +// ------------------------------------------------------------------------- +void ImageMPR:: +_aOpenImage( ) +{ + std::string name = this->m_Plugins->ReadImage( "" ); + if( name != "" ) { + // Since we are opening an image, clear view + this->m_UI->MPR->DeleteAllData( ); + + // Prepare visualization + TPlugins::TImage* image = this->m_Plugins->GetImage( name ); vtkImageData* vimage = image->GetVTK< vtkImageData >( ); - if( vimage == NULL ) + if( vimage != NULL ) + { + this->m_UI->MPR->AddImage( vimage, name ); + this->m_UI->MPR->ShowData( name ); + } + else QMessageBox::critical( this, QMessageBox::tr( "Error showing image." ), @@ -78,12 +141,6 @@ _aOpenImage( ) "Image was read, but no valid VTK conversion was found." ) ); - else - this->m_UI->MPR->ShowImage( vimage, image->GetName( ) ); - - // Keep a track on a local data tree - this->m_Objects[ image->GetName( ) ] = - TTreeNode( "", image.GetPointer( ) ); } // fi } @@ -92,20 +149,21 @@ _aOpenImage( ) void ImageMPR:: _aOpenDICOMSeries( ) { - // Clear all, since we are loading the main image - if( this->m_Objects.size( ) > 0 ) + std::string name = this->m_Plugins->ReadDicomSeries( "" ); + if( name != "" ) { - this->m_UI->MPR->ClearAll( ); - this->m_Objects.clear( ); - - } // fi + // Since we are opening an image, clear view + this->m_UI->MPR->DeleteAllData( ); - // Read and show image, if possible - TPlugins::TImage::Pointer image; - if( this->m_Plugins->ReadDicomSeries( image ) ) - { + // Prepare visualization + TPlugins::TImage* image = this->m_Plugins->GetImage( name ); vtkImageData* vimage = image->GetVTK< vtkImageData >( ); - if( vimage == NULL ) + if( vimage != NULL ) + { + this->m_UI->MPR->AddImage( vimage, name ); + this->m_UI->MPR->ShowData( name ); + } + else QMessageBox::critical( this, QMessageBox::tr( "Error showing image." ), @@ -113,12 +171,6 @@ _aOpenDICOMSeries( ) "Image was read, but no valid VTK conversion was found." ) ); - else - this->m_UI->MPR->ShowImage( vimage, image->GetName( ) ); - - // Keep a track on a local data tree - this->m_Objects[ image->GetName( ) ] = - TTreeNode( "", image.GetPointer( ) ); } // fi } @@ -144,12 +196,7 @@ void ImageMPR:: _aSaveImage( ) { std::string data_name = this->m_UI->MPR->GetSelectedData( ); - TPlugins::TImage* image = dynamic_cast< TPlugins::TImage* >( - this->m_Objects[ data_name ].second.GetPointer( ) - ); - if( image == NULL ) - return; - this->m_Plugins->WriteImage( image, true ); + this->m_Plugins->WriteImage( data_name ); } // ------------------------------------------------------------------------- @@ -162,13 +209,6 @@ _aSaveSegmentation( ) void ImageMPR:: _aSavePolyData( ) { - std::string data_name = this->m_UI->MPR->GetSelectedData( ); - TPlugins::TMesh* mesh = dynamic_cast< TPlugins::TMesh* >( - this->m_Objects[ data_name ].second.GetPointer( ) - ); - if( mesh == NULL ) - return; - this->m_Plugins->WriteMesh( mesh, true ); } // ------------------------------------------------------------------------- @@ -203,7 +243,7 @@ _aShowPlugins( ) void ImageMPR:: _execPlugin( ) { - // Get filter name + // Get filter's name and category QAction* action = dynamic_cast< QAction* >( this->sender( ) ); if( action == NULL ) return; @@ -213,46 +253,19 @@ _execPlugin( ) std::string filter_cate = menu->title( ).toStdString( ); std::string filter_name = action->text( ).toStdString( ); - // Create filter - TPlugins::TProcessObject::Pointer filter; - if( !( this->m_Plugins->CreateFilter( filter, filter_name ) ) ) - { - QMessageBox::critical( - this, - tr( "Error creating filter" ), - tr( ( - std::string( "No valid filter \"" ) + - filter_name + - std::string( "\"defined." ) - ).c_str( ) ) - ); + // Activate filter + if( !( this->m_Plugins->ActivateFilter( filter_name ) ) ) return; - } // fi - - // Configure filter - if( !( filter->ExecConfigurationDialog( this ) ) ) - return; - - // Assign inputs - std::string data_name = this->m_UI->MPR->GetSelectedData( ); - std::vector< std::string > inputs_names = filter->GetInputsNames( ); - if( inputs_names.size( ) == 1 ) + // Associate inputs + std::vector< std::string > inputs = + this->m_Plugins->GetActiveFilterInputsNames( ); + if( inputs.size( ) == 1 ) { - TTree::iterator iIt = this->m_Objects.find( data_name ); - if( iIt == this->m_Objects.end( ) ) - { - QMessageBox::critical( - this, - tr( "Error configuring filter" ), - tr( "No valid input found. Please select a valid input." ) - ); - return; - - } //fi - filter->SetInput( inputs_names[ 0 ], iIt->second.second ); + std::string data_name = this->m_UI->MPR->GetSelectedData( ); + this->m_Plugins->ConnectInputInActiveFilter( data_name, inputs[ 0 ] ); } - else if( inputs_names.size( ) > 1 ) + else if( inputs.size( ) > 1 ) { QMessageBox::critical( this, @@ -263,71 +276,31 @@ _execPlugin( ) } // fi - // Execute filter - this->_Block( ); - std::string filter_err = filter->Update( ); - this->_Unblock( ); - if( filter_err != "" ) - { - QMessageBox::critical( - this, - tr( "Error executing" ), - tr( filter_err.c_str( ) ) + // Associate outputs + std::vector< std::string > outputs = + this->m_Plugins->GetActiveFilterOutputsNames( ); + for( auto oIt = outputs.begin( ); oIt != outputs.end( ); ++oIt ) + this->m_Plugins->SetOutputNameInActiveFilter( + filter_name + "_" + *oIt, *oIt ); + + // Configure filter + TPlugins::TProcessObject::DialogResult dlg_res = + this->m_Plugins->ConfigureActiveFilter( ); + if( dlg_res == TPlugins::TProcessObject::DialogResult_Cancel ) + { + this->m_Plugins->DeactivateFilter( ); return; } // fi - // Get outputs - std::vector< std::string > outputs_names = filter->GetOutputsNames( ); - for( - auto oIt = outputs_names.begin( ); - oIt != outputs_names.end( ); - ++oIt - ) + // Execute filter and associate outputs + if( dlg_res == TPlugins::TProcessObject::DialogResult_NoModal ) { - std::string out_name = filter_name + "_" + *oIt; - - TPlugins::TImage* image = filter->GetOutput< TPlugins::TImage >( *oIt ); - if( image != NULL ) - { - if( filter_cate == "ImageToBinaryImageFilter" ) - { - this->m_UI->MPR->ShowImage( - image->GetVTK< vtkImageData >( ), - out_name, - data_name, 1, 0, 0 - ); - } - else if( filter_cate == "ImageToImageFilter" ) - { - } // fi + this->UpdateActualFilter( ); + this->m_Plugins->DeactivateFilter( ); - // Keep a track on a local data tree and go to next output - this->m_Objects[ out_name ] = TTreeNode( data_name, image ); - continue; - - } // fi - - TPlugins::TMesh* mesh = filter->GetOutput< TPlugins::TMesh >( *oIt ); - if( mesh != NULL ) - { - // Show mesh - this->_Block( ); - this->m_UI->MPR->ShowMesh( - mesh->GetVTK< vtkPolyData >( ), - out_name, - data_name - ); - this->_Unblock( ); - - // Keep a track on a local data tree and go to next output - this->m_Objects[ out_name ] = TTreeNode( data_name, mesh ); - continue; - - } // fi - - } // rof + } // fi } // -------------------------------------------------------------------------