X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=appli%2FImageMPR%2FImageMPR.cxx;h=5951d1fd1872acffdd35b4278d5275b93f6b93c5;hb=b07ef139fe5264b87e1f95dc43671ef5705eb3f7;hp=24cfd389fe26e4882db063a79f1c76ded0e89b39;hpb=ecd4c9efbb1db3f9210699f281694dc7c32ac9de;p=cpPlugins.git diff --git a/appli/ImageMPR/ImageMPR.cxx b/appli/ImageMPR/ImageMPR.cxx index 24cfd38..5951d1f 100644 --- a/appli/ImageMPR/ImageMPR.cxx +++ b/appli/ImageMPR/ImageMPR.cxx @@ -1,8 +1,6 @@ #include "ImageMPR.h" #include "ui_ImageMPR.h" -#include - #include #include @@ -59,7 +57,7 @@ ImageMPR::ImageMPR( QWidget* parent ) // Start: load all disponible plugins this->_LoadPlugins( std::string( PLUGIN_PREFIX ) + - std::string( "cpPlugins." ) + + std::string( "cpPluginsIO." ) + std::string( PLUGIN_EXT ) ); } @@ -86,17 +84,12 @@ _LoadPlugins( const std::string& filename ) this->m_ImageWriterClass = ""; this->m_MeshReaderClass = ""; this->m_MeshWriterClass = ""; - this->m_ImageToImageFilters.clear( ); - this->m_ImageToMeshFilters.clear( ); + this->m_UI->MenuImageToImage->clear( ); + this->m_UI->MenuImageToMesh->clear( ); - this->m_Plugins.UnloadAll( ); if( !( this->m_Plugins.Load( filename ) ) ) - { - this->m_Plugins.UnloadAll( ); return( false ); - } // fi - typedef TPluginsInterface::TClasses _TClasses; _TClasses::const_iterator cIt = this->m_Plugins.GetClasses( ).begin( ); for( ; cIt != this->m_Plugins.GetClasses( ).end( ); ++cIt ) @@ -115,7 +108,6 @@ _LoadPlugins( const std::string& filename ) this->m_MeshWriterClass = name; else if( category == "ImageToImageFilter" ) { - this->m_ImageToImageFilters.insert( name ); QAction* action = this->m_UI->MenuImageToImage->addAction( QString( name.c_str( ) ) ); QObject::connect( @@ -125,7 +117,6 @@ _LoadPlugins( const std::string& filename ) } else if( category == "ImageToMeshFilter" ) { - this->m_ImageToMeshFilters.insert( name ); QAction* action = this->m_UI->MenuImageToMesh->addAction( QString( name.c_str( ) ) ); QObject::connect( @@ -142,6 +133,50 @@ _LoadPlugins( const std::string& filename ) return( true ); } +// ------------------------------------------------------------------------- +std::string ImageMPR:: +_LoadImage( TPluginImage::Pointer& image, const QStringList& names ) +{ + // Block application + QApplication::setOverrideCursor( Qt::WaitCursor ); + this->setEnabled( false ); + + std::string ret = ""; + image = NULL; + + // Get a reader from loaded plugins + TPluginFilter::Pointer reader = + this->m_Plugins.CreateProcessObject( this->m_ImageReaderClass ); + if( reader.IsNotNull( ) ) + { + // Configure reader + TParameters params = reader->GetDefaultParameters( ); + QStringList::const_iterator qIt = names.begin( ); + for( ; qIt != names.end( ); ++qIt ) + params.AddValueToStringList( "FileNames", qIt->toStdString( ) ); + params.SetValueAsBool( "VectorType", false ); + reader->SetParameters( params ); + + // Execute and get error message, if any + ret = reader->Update( ); + + // Assign fresh image, if any + if( ret == "" ) + { + image = reader->GetOutput< TPluginImage >( 0 ); + reader->DisconnectOutputs( ); + + } // fi + } + else + ret = "No suitable reader object found in loaded plugins."; + + // Finish reading + QApplication::restoreOverrideCursor( ); + this->setEnabled( true ); + return( ret ); +} + // ------------------------------------------------------------------------- void ImageMPR:: _triggered_actionOpenPlugins( ) @@ -179,49 +214,25 @@ _triggered_actionOpenInputImage( ) if( !( dialog.exec( ) ) ) return; - this->m_InputImage = NULL; - - // Get a reader from plugins - TPluginFilter::Pointer reader = - this->m_Plugins.CreateProcessObject( this->m_ImageReaderClass ); - - // Configure reader - TParameters reader_params = reader->GetDefaultParameters( ); - QStringList q_fnames = dialog.selectedFiles( ); - QStringList::const_iterator qIt = q_fnames.begin( ); - for( ; qIt != q_fnames.end( ); ++qIt ) - reader_params.AddValueToStringList( "FileNames", qIt->toStdString( ) ); - reader->SetParameters( reader_params ); - - // Execute and get error message, if any - QApplication::setOverrideCursor( Qt::WaitCursor ); - this->setEnabled( false ); - std::string err = reader->Update( ); - QApplication::restoreOverrideCursor( ); - this->setEnabled( true ); - - // Assign fresh image, if any + // Read image + std::string err = + this->_LoadImage( this->m_InputImage, dialog.selectedFiles( ) ); if( err == "" ) { - this->m_InputImage = reader->GetOutput< TPluginImage >( 0 ); - reader->DisconnectOutputs( ); - if( this->m_InputImage.IsNotNull( ) ) + vtkImageData* vtk_id = this->m_InputImage->GetVTKImageData( ); + if( vtk_id != NULL ) { - vtkImageData* vtk_id = this->m_InputImage->GetVTKImageData( ); - if( vtk_id != NULL ) - { - this->m_MPRObjects->SetImage( vtk_id ); - this->m_MPRObjects->ResetCameras( ); - this->m_MPRObjects->RenderAll( ); - } - else - QMessageBox::critical( - this, - tr( "Error message" ), - tr( "Read image does not have a valid VTK converter." ) - ); - - } // fi + this->m_MPRObjects->SetImage( vtk_id ); + this->m_MPRObjects->ActivateInteractors( ); + this->m_MPRObjects->ResetCameras( ); + this->m_MPRObjects->RenderAll( ); + } + else + QMessageBox::critical( + this, + tr( "Error message" ), + tr( "Read image does not have a valid VTK converter." ) + ); } else QMessageBox::critical( @@ -235,6 +246,17 @@ _triggered_actionOpenInputImage( ) void ImageMPR:: _triggered_actionOpenSegmentation( ) { + if( this->m_InputImage.IsNull( ) ) + { + QMessageBox::critical( + this, + tr( "Error message" ), + tr( "Before reading a segmentation, first load a raw image." ) + ); + return; + + } // fi + // Show dialog and check if it was accepted QFileDialog dialog( this ); dialog.setFileMode( QFileDialog::ExistingFiles ); @@ -246,51 +268,23 @@ _triggered_actionOpenSegmentation( ) if( !( dialog.exec( ) ) ) return; - this->m_InputImage = NULL; - - // Get a reader from plugins - TPluginFilter::Pointer reader = - this->m_Plugins.CreateProcessObject( this->m_ImageReaderClass ); - - // Configure reader - TParameters reader_params = reader->GetDefaultParameters( ); - QStringList q_fnames = dialog.selectedFiles( ); - QStringList::const_iterator qIt = q_fnames.begin( ); - for( ; qIt != q_fnames.end( ); ++qIt ) - reader_params.AddValueToStringList( "FileNames", qIt->toStdString( ) ); - reader->SetParameters( reader_params ); - - // Execute and get error message, if any - QApplication::setOverrideCursor( Qt::WaitCursor ); - this->setEnabled( false ); - std::string err = reader->Update( ); - QApplication::restoreOverrideCursor( ); - this->setEnabled( true ); - - // Assign fresh image, if any + // Read image + std::string err = + this->_LoadImage( this->m_InputSegmentation, dialog.selectedFiles( ) ); if( err == "" ) { - this->m_InputSegmentation = reader->GetOutput< TPluginImage >( 0 ); - reader->DisconnectOutputs( ); - if( this->m_InputSegmentation.IsNotNull( ) ) + vtkImageData* vtk_id = this->m_InputSegmentation->GetVTKImageData( ); + if( vtk_id != NULL ) { - vtkImageData* vtk_id = this->m_InputSegmentation->GetVTKImageData( ); - if( vtk_id != NULL ) - { - /* - this->m_MPRObjects->SetImage( vtk_id ); - this->m_MPRObjects->ResetCameras( ); - this->m_MPRObjects->RenderAll( ); - */ - } - else - QMessageBox::critical( - this, - tr( "Error message" ), - tr( "Read image does not have a valid VTK converter." ) - ); - - } // fi + this->m_MPRObjects->AddAuxiliaryImage( vtk_id ); + this->m_MPRObjects->RenderAll( ); + } + else + QMessageBox::critical( + this, + tr( "Error message" ), + tr( "Read image does not have a valid VTK converter." ) + ); } else QMessageBox::critical(