X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=appli%2FImageMPR%2FImageMPR.cxx;h=ada90eaa9ac06e67c5694d300146987a99c7a394;hb=8db7a40f2ef8530457959a51a4d2a7f012d0b7a3;hp=7fffc2732df90c2864acef0691e53db90bc2e463;hpb=4f6c47b5d9994cd1bbb601bfe8bc087a0a619e72;p=cpPlugins.git diff --git a/appli/ImageMPR/ImageMPR.cxx b/appli/ImageMPR/ImageMPR.cxx index 7fffc27..ada90ea 100644 --- a/appli/ImageMPR/ImageMPR.cxx +++ b/appli/ImageMPR/ImageMPR.cxx @@ -1,8 +1,176 @@ #include "ImageMPR.h" #include "ui_ImageMPR.h" +// ------------------------------------------------------------------------- +#define ImageMPR_ConnectAction( ACTION ) \ + QObject::connect( \ + this->m_UI->a##ACTION, SIGNAL( triggered( ) ), \ + this, SLOT( _a##ACTION( ) ) \ + ) + +// ------------------------------------------------------------------------- +ImageMPR:: +ImageMPR( QWidget* parent ) + : QMainWindow( parent ), + m_UI( new Ui::ImageMPR ), + m_ImageLoaded( false ) +{ + this->m_UI->setupUi( this ); + + // Connect actions + ImageMPR_ConnectAction( OpenImage ); + ImageMPR_ConnectAction( OpenSegmentation ); + ImageMPR_ConnectAction( OpenPolyData ); + ImageMPR_ConnectAction( SaveImage ); + ImageMPR_ConnectAction( SaveSegmentation ); + ImageMPR_ConnectAction( SavePolyData ); + ImageMPR_ConnectAction( Undo ); + ImageMPR_ConnectAction( Redo ); + ImageMPR_ConnectAction( LoadPlugins ); + ImageMPR_ConnectAction( ShowPlugins ); + + // Try to load default plugins + this->m_UI->MPR->LoadPlugins( ); + this->m_UI->MPR->AssociatePluginsToMenu( + this->m_UI->MenuFilters, this, SLOT( _execPlugin( ) ) + ); +} + +// ------------------------------------------------------------------------- +ImageMPR:: +~ImageMPR( ) +{ + delete this->m_UI; +} + +// ------------------------------------------------------------------------- +void ImageMPR:: +_aOpenImage( ) +{ + if( this->m_ImageLoaded ) + this->m_UI->MPR->ClearAll( ); + this->m_ImageLoaded = this->m_UI->MPR->LoadImage( ); +} + +// ------------------------------------------------------------------------- +void ImageMPR:: +_aOpenSegmentation( ) +{ + if( this->m_ImageLoaded ) + this->m_ImageLoaded = this->m_UI->MPR->LoadImage( ); +} + +// ------------------------------------------------------------------------- +void ImageMPR:: +_aOpenPolyData( ) +{ +} + +// ------------------------------------------------------------------------- +void ImageMPR:: +_aSaveImage( ) +{ +} + +// ------------------------------------------------------------------------- +void ImageMPR:: +_aSaveSegmentation( ) +{ +} + +// ------------------------------------------------------------------------- +void ImageMPR:: +_aSavePolyData( ) +{ +} + +// ------------------------------------------------------------------------- +void ImageMPR:: +_aUndo( ) +{ +} + +// ------------------------------------------------------------------------- +void ImageMPR:: +_aRedo( ) +{ +} + +// ------------------------------------------------------------------------- +void ImageMPR:: +_aLoadPlugins( ) +{ + this->m_UI->MPR->DialogLoadPlugins( ); + this->m_UI->MPR->AssociatePluginsToMenu( + this->m_UI->MenuFilters, this, SLOT( _execPlugin( ) ) + ); +} + +// ------------------------------------------------------------------------- +void ImageMPR:: +_aShowPlugins( ) +{ +} + +// ------------------------------------------------------------------------- +void ImageMPR:: +_execPlugin( ) +{ + // Get filter name + QAction* action = dynamic_cast< QAction* >( this->sender( ) ); + if( action == NULL ) + return; + std::string name = action->text( ).toStdString( ); + this->m_UI->MPR->ExecuteFilter( name, 0 ); + + // Configure filter + /* + TPluginFilter::Pointer filter = + this->m_Plugins.CreateProcessObject( name ); + bool dlg_ok = filter->ExecConfigurationDialog( NULL ); + if( !dlg_ok ) + return; + + // Execute filter + QApplication::setOverrideCursor( Qt::WaitCursor ); + this->setEnabled( false ); + filter->SetInput( 0, this->m_Image ); + std::string err = filter->Update( ); + QApplication::restoreOverrideCursor( ); + this->setEnabled( true ); + + // Update image + if( err == "" ) + { + TPluginImage* result = filter->GetOutput< TPluginImage >( 0 ); + result->DisconnectPipeline( ); + this->m_Image = result; + if( this->m_Image.IsNotNull( ) ) + this->m_MPRObjects->SetImage( + this->m_Image->GetVTK< vtkImageData >( ) + ); + MementoState(this->m_state, this->m_Image); + this->m_state++; + if (this->m_state > this->m_max_state) + { + this->m_max_state = this->m_state; + } + } + else + QMessageBox::critical( + this, + tr( "Error executing filter" ), + tr( err.c_str( ) ) + ); + */ +} + +/* +#include "MementoState.h" + #include #include +#include #include #include @@ -26,7 +194,9 @@ ImageMPR::ImageMPR( QWidget* parent ) m_MeshReaderClass( "" ), m_MeshWriterClass( "" ), m_MeshCutterClass( "" ), - m_Image( NULL ) + m_Image( NULL ), + m_state(0), + m_max_state(0) { this->m_UI->setupUi( this ); @@ -56,6 +226,14 @@ ImageMPR::ImageMPR( QWidget* parent ) this->m_UI->actionOpenInputPolyData, SIGNAL( triggered( ) ), this, SLOT( _triggered_actionOpenInputPolyData( ) ) ); + QObject::connect( + this->m_UI->actionUndo, SIGNAL(triggered()), + this, SLOT(_triggered_actionUndo()) + ); + QObject::connect( + this->m_UI->actionRedo, SIGNAL(triggered()), + this, SLOT(_triggered_actionRedo()) + ); // Start: load all disponible plugins this->_LoadPlugins( @@ -194,7 +372,8 @@ _ConfigureMeshActors( ) { if( this->m_Mesh.IsNull( ) ) return( "Valid mesh not found." ); - + + this->m_Mesh->CreateVTKActor( ); vtkActor* vtk_actor = this->m_Mesh->GetVTKActor( ); if( vtk_actor != NULL ) { @@ -216,8 +395,9 @@ _ConfigureMeshActors( ) std::string lerr = this->m_Cutters[ i ]->Update( ); if( lerr == "" ) { + this->m_Cutters[ i ]->GetOutput< TPluginMesh >( 0 )->CreateVTKActor( ); vtkActor* actor = this->m_Cutters[ i ]->GetOutput< TPluginMesh >( 0 )->GetVTKActor( ); - mprActors->GetSliceActors( i )->AddActor( this->m_Cutters[ i ]->GetVTKAlgorithm( ), actor ); + mprActors->GetSliceActors( i )->AddActor( this->m_Cutters[ i ]->GetVTK< vtkAlgorithm >( ), actor ); if( i == 0 ) this->m_MPRObjects->GetXRenderer( )->AddActor( actor ); else if( i == 1 ) @@ -263,13 +443,16 @@ _triggered_actionOpenInputImage( ) std::string err = this->_LoadImage( this->m_Image ); if( err == "" ) { - vtkImageData* vtk_id = this->m_Image->GetVTKImageData( ); + vtkImageData* vtk_id = this->m_Image->GetVTK< vtkImageData >( ); if( vtk_id != NULL ) { this->m_MPRObjects->SetImage( vtk_id ); this->m_MPRObjects->ActivateInteractors( ); this->m_MPRObjects->ResetCameras( ); this->m_MPRObjects->RenderAll( ); + + MementoState(m_state, this->m_Image); + this->m_state++; } else QMessageBox::critical( @@ -305,7 +488,7 @@ _triggered_actionOpenSegmentation( ) std::string err = this->_LoadImage( this->m_Segmentation ); if( err == "" ) { - vtkImageData* vtk_id = this->m_Segmentation->GetVTKImageData( ); + vtkImageData* vtk_id = this->m_Segmentation->GetVTK< vtkImageData >( ); if( vtk_id != NULL ) { this->m_MPRObjects->AddAuxiliaryImage( vtk_id ); @@ -413,7 +596,18 @@ _triggered_actionImageToImage( ) result->DisconnectPipeline( ); this->m_Image = result; if( this->m_Image.IsNotNull( ) ) - this->m_MPRObjects->SetImage( this->m_Image->GetVTKImageData( ) ); + this->m_MPRObjects->SetImage( + this->m_Image->GetVTK< vtkImageData >( ) + + ); + + + MementoState(this->m_state, this->m_Image); + this->m_state++; + if (this->m_state > this->m_max_state) + { + this->m_max_state = this->m_state; + } } else QMessageBox::critical( @@ -473,4 +667,51 @@ _triggered_actionImageToMesh( ) ); } +// ------------------------------------------------------------------------- +void ImageMPR:: +_triggered_actionUndo() +{ + MementoState memento = MementoState(); + + if (this->m_state>1) + { + this->m_state--; + this->m_MPRObjects->SetImage( + memento.getMemento(this->m_state)->GetOutput() + ); + } else + { + QMessageBox::warning( + this, + tr("message"), + tr("No history to undo") + ); + } + +} + +// ------------------------------------------------------------------------- +void ImageMPR:: +_triggered_actionRedo() +{ + MementoState memento = MementoState(); + if (this->m_state + 1 <= m_max_state) + { + this->m_state++; + this->m_MPRObjects->SetImage( + memento.getMemento(this->m_state)->GetOutput() + ); + } else + { + QMessageBox::warning( + this, + tr("message"), + tr("No history to redo") + ); + } + +} + +*/ + // eof - $RCSfile$