From: Leonardo Florez-Valencia Date: Thu, 26 Nov 2015 15:19:42 +0000 (-0500) Subject: Segmentated image write: Ok X-Git-Tag: v0.1~290 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=51f6a14e2d16bd79de3cf82693275a0abaaf9007;p=cpPlugins.git Segmentated image write: Ok --- diff --git a/appli/ImageMPR/ImageMPR.cxx b/appli/ImageMPR/ImageMPR.cxx index 424020e..ea198ac 100644 --- a/appli/ImageMPR/ImageMPR.cxx +++ b/appli/ImageMPR/ImageMPR.cxx @@ -27,7 +27,6 @@ ImageMPR( QWidget* parent ) ImageMPR_ConnectAction( OpenSegmentation ); ImageMPR_ConnectAction( OpenPolyData ); ImageMPR_ConnectAction( SaveImage ); - ImageMPR_ConnectAction( SaveSegmentation ); ImageMPR_ConnectAction( SavePolyData ); ImageMPR_ConnectAction( Undo ); ImageMPR_ConnectAction( Redo ); @@ -141,10 +140,25 @@ void ImageMPR::_aOpenDICOMSeries( ) { ImageMPR_ReadImage( DicomSeries ) } void ImageMPR:: _aOpenSegmentation( ) { - /* - if( this->m_ImageLoaded != "" ) - this->m_ImageLoaded = this->m_UI->MPR->LoadImage( ); - */ + try + { + std::string parent = this->m_UI->MPR->GetMainImage( ); + std::string name = this->m_Plugins.ReadImage( parent ); + if( name == "" ) + return; + TImage* image = this->m_Plugins.GetData< TImage >( name ); + this->m_UI->MPR->AddData( image, name, parent ); + this->m_UI->MPR->ShowData( name ); + } + catch( std::exception& err ) + { + QMessageBox::critical( + this, + QMessageBox::tr( "Error reading image." ), + QMessageBox::tr( err.what( ) ) + ); + + } // yrt } // ------------------------------------------------------------------------- @@ -157,16 +171,7 @@ _aOpenPolyData( ) void ImageMPR:: _aSaveImage( ) { - /* - std::string data_name = this->m_UI->MPR->GetSelectedData( ); - this->m_Plugins->WriteImage( data_name ); - */ -} - -// ------------------------------------------------------------------------- -void ImageMPR:: -_aSaveSegmentation( ) -{ + this->m_Plugins.WriteDataObject( this->m_UI->MPR->GetSelectedData( ) ); } // ------------------------------------------------------------------------- @@ -250,595 +255,4 @@ _execPlugin( ) } // fi } -// ------------------------------------------------------------------------- -/* 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" - -#include -#include -#include - -#include -#include - -#ifdef _WIN32 -# define PLUGIN_PREFIX "" -# define PLUGIN_EXT "dll" -# define PLUGIN_REGEX "Plugins file (*.dll);;All files (*)" -#else -# define PLUGIN_PREFIX "lib" -# define PLUGIN_EXT "so" -# define PLUGIN_REGEX "Plugins file (*.so);;All files (*)" -#endif // _WIN32 - -// ------------------------------------------------------------------------- -ImageMPR::ImageMPR( QWidget* parent ) - : QMainWindow( parent ), - m_UI( new Ui::ImageMPR ), - m_ImageReaderClass( "" ), - m_ImageWriterClass( "" ), - m_MeshReaderClass( "" ), - m_MeshWriterClass( "" ), - m_MeshCutterClass( "" ), - m_Image( NULL ), - m_state(0), - m_max_state(0) -{ - this->m_UI->setupUi( this ); - - // Create and associate renderers - this->m_MPRObjects = vtkSmartPointer< TMPRObjects >::New( ); - this->m_MPRObjects->SetRenderWindows( - this->m_UI->m_XPlaneVTK->GetRenderWindow( ), - this->m_UI->m_YPlaneVTK->GetRenderWindow( ), - this->m_UI->m_ZPlaneVTK->GetRenderWindow( ), - this->m_UI->m_3DVTK->GetRenderWindow( ) - ); - - // signals <-> slots - QObject::connect( - this->m_UI->actionOpenPlugins, SIGNAL( triggered( ) ), - this, SLOT( _triggered_actionOpenPlugins( ) ) - ); - QObject::connect( - this->m_UI->actionOpenInputImage, SIGNAL( triggered( ) ), - this, SLOT( _triggered_actionOpenInputImage( ) ) - ); - QObject::connect( - this->m_UI->actionOpenSegmentation, SIGNAL( triggered( ) ), - this, SLOT( _triggered_actionOpenSegmentation( ) ) - ); - QObject::connect( - 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( - std::string( PLUGIN_PREFIX ) + - std::string( "cpPluginsIO." ) + - std::string( PLUGIN_EXT ) - ); - this->_LoadPlugins( - std::string( PLUGIN_PREFIX ) + - std::string( "cpPluginsBasicFilters." ) + - std::string( PLUGIN_EXT ) - ); -} - -// ------------------------------------------------------------------------- -ImageMPR:: -~ImageMPR( ) -{ - // Close all connections - this->m_Plugins.UnloadAll( ); - - // Delete objects - delete this->m_UI; -} - -// ------------------------------------------------------------------------- -bool ImageMPR:: -_LoadPlugins( const std::string& filename ) -{ - QApplication::setOverrideCursor( Qt::WaitCursor ); - this->setEnabled( false ); - - this->m_ImageReaderClass = ""; - this->m_ImageWriterClass = ""; - this->m_MeshReaderClass = ""; - this->m_MeshWriterClass = ""; - this->m_MeshCutterClass = ""; - this->m_UI->MenuImageToImage->clear( ); - this->m_UI->MenuImageToMesh->clear( ); - - if( !( this->m_Plugins.Load( filename ) ) ) - return( false ); - - typedef TPluginsInterface::TClasses _TClasses; - _TClasses::const_iterator cIt = this->m_Plugins.GetClasses( ).begin( ); - for( ; cIt != this->m_Plugins.GetClasses( ).end( ); ++cIt ) - { - TPluginFilter::Pointer o = - this->m_Plugins.CreateProcessObject( cIt->first ); - std::string name = o->GetClassName( ); - std::string category = o->GetClassCategory( ); - if( category == "ImageReader" ) - this->m_ImageReaderClass = name; - else if( category == "ImageWriter" ) - this->m_ImageWriterClass = name; - else if( category == "MeshReader" ) - this->m_MeshReaderClass = name; - else if( category == "MeshWriter" ) - this->m_MeshWriterClass = name; - else if( category == "MeshToMeshFilter" ) - { - if( name.find_last_of( "Cutter" ) != std::string::npos ) - this->m_MeshCutterClass = name; - } - else if( category == "ImageToImageFilter" ) - { - QAction* action = - this->m_UI->MenuImageToImage->addAction( QString( name.c_str( ) ) ); - QObject::connect( - action, SIGNAL( triggered( ) ), - this, SLOT( _triggered_actionImageToImage( ) ) - ); - } - else if( category == "ImageToMeshFilter" ) - { - QAction* action = - this->m_UI->MenuImageToMesh->addAction( QString( name.c_str( ) ) ); - QObject::connect( - action, SIGNAL( triggered( ) ), - this, SLOT( _triggered_actionImageToMesh( ) ) - ); - - } // fi - - } // rof - QApplication::restoreOverrideCursor( ); - this->setEnabled( true ); - - return( true ); -} - -// ------------------------------------------------------------------------- -std::string ImageMPR:: -_LoadImage( TPluginImage::Pointer& image ) -{ - std::string ret = ""; - image = NULL; - - // Get a reader from loaded plugins - TPluginFilter::Pointer reader = - this->m_Plugins.CreateProcessObject( this->m_ImageReaderClass ); - if( reader.IsNotNull( ) ) - { - if( reader->ExecConfigurationDialog( this ) ) - { - // Block application - QApplication::setOverrideCursor( Qt::WaitCursor ); - this->setEnabled( false ); - - // 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 - - // Unblock application - QApplication::restoreOverrideCursor( ); - this->setEnabled( true ); - - } // fi - } - else - ret = "No suitable reader object found in loaded plugins."; - - return( ret ); -} - -// ------------------------------------------------------------------------- -std::string ImageMPR:: -_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 ) - { - this->m_MPRObjects->Get3DRenderer( )->AddActor( vtk_actor ); - this->m_MPRObjects->Render( 4 ); - - } // fi - - TMPRObjects::TMPRActors* mprActors = this->m_MPRObjects->GetMPRActors( ); - - std::string err = ""; - for( unsigned int i = 0; i < 3; ++i ) - { - this->m_Cutters[ i ] = this->m_Plugins.CreateProcessObject( this->m_MeshCutterClass ); - this->m_Planes[ i ] = TPluginImplicitFunction::New( ); - this->m_Planes[ i ]->SetFunction( mprActors->GetSliceActors( i )->GetPlaneFunction( ) ); - this->m_Cutters[ i ]->SetInput( 0, this->m_Mesh ); - this->m_Cutters[ i ]->SetInput( 1, this->m_Planes[ i ] ); - 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 ]->GetVTK< vtkAlgorithm >( ), actor ); - if( i == 0 ) - this->m_MPRObjects->GetXRenderer( )->AddActor( actor ); - else if( i == 1 ) - this->m_MPRObjects->GetYRenderer( )->AddActor( actor ); - else if( i == 2 ) - this->m_MPRObjects->GetZRenderer( )->AddActor( actor ); - - } // fi - err += lerr; - - } // rof - this->m_MPRObjects->RenderAll( ); - return( err ); -} - -// ------------------------------------------------------------------------- -void ImageMPR:: -_triggered_actionOpenPlugins( ) -{ - // Show dialog and check if it was accepted - QFileDialog dialog( this ); - dialog.setFileMode( QFileDialog::ExistingFile ); - dialog.setDirectory( "." ); - dialog.setNameFilter( tr( PLUGIN_REGEX ) ); - dialog.setDefaultSuffix( tr( PLUGIN_EXT ) ); - if( !( dialog.exec( ) ) ) - return; - - std::string fname = dialog.selectedFiles( ).at( 0 ).toStdString( ); - if( !( _LoadPlugins( fname ) ) ) - QMessageBox::critical( - this, - tr( "Ignoring plugin" ), - tr( fname.c_str( ) ) - ); -} - -// ------------------------------------------------------------------------- -void ImageMPR:: -_triggered_actionOpenInputImage( ) -{ - // Read image - std::string err = this->_LoadImage( this->m_Image ); - if( err == "" ) - { - 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( - this, - tr( "Error message" ), - tr( "Read image does not have a valid VTK converter." ) - ); - } - else - QMessageBox::critical( - this, - tr( "Error reading single image" ), - tr( err.c_str( ) ) - ); -} - -// ------------------------------------------------------------------------- -void ImageMPR:: -_triggered_actionOpenSegmentation( ) -{ - if( this->m_Image.IsNull( ) ) - { - QMessageBox::critical( - this, - tr( "Error message" ), - tr( "Before reading a segmentation, first load a raw image." ) - ); - return; - - } // fi - - // Read image - std::string err = this->_LoadImage( this->m_Segmentation ); - if( err == "" ) - { - vtkImageData* vtk_id = this->m_Segmentation->GetVTK< vtkImageData >( ); - if( vtk_id != NULL ) - { - 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( - this, - tr( "Error reading single image" ), - tr( err.c_str( ) ) - ); -} - -// ------------------------------------------------------------------------- -void ImageMPR:: -_triggered_actionOpenInputPolyData( ) -{ - this->m_Mesh = NULL; - - // Get a reader from plugins - TPluginFilter::Pointer reader = - this->m_Plugins.CreateProcessObject( this->m_MeshReaderClass ); - - if( reader.IsNotNull( ) ) - { - // Configure reader - if( reader->ExecConfigurationDialog( this ) ) - { - // 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 mesh, if any - if( err == "" ) - { - this->m_Mesh = reader->GetOutput< TPluginMesh >( 0 ); - reader->DisconnectOutputs( ); - err = this->_ConfigureMeshActors( ); - if( err != "" ) - QMessageBox::critical( - this, - tr( "Error message" ), - tr( err.c_str( ) ) - ); - } - else - QMessageBox::critical( - this, - tr( "Error reading mesh" ), - tr( err.c_str( ) ) - ); - - } // fi - } - else - QMessageBox::critical( - this, - tr( "Error reading single mesh" ), - tr( "No suitable mesh reader found in loaded plugins." ) - ); -} - -// ------------------------------------------------------------------------- -void ImageMPR:: -_triggered_actionImageToImage( ) -{ - if( this->m_Image.IsNull( ) ) - return; - - // Get filter name - QAction* action = dynamic_cast< QAction* >( this->sender( ) ); - if( action == NULL ) - return; - std::string name = action->text( ).toStdString( ); - - // 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( ) ) - ); -} - -// ------------------------------------------------------------------------- -void ImageMPR:: -_triggered_actionImageToMesh( ) -{ - if( this->m_Image.IsNull( ) ) - return; - - // Get filter name - QAction* action = dynamic_cast< QAction* >( this->sender( ) ); - if( action == NULL ) - return; - std::string name = action->text( ).toStdString( ); - - // 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 == "" ) - { - TPluginMesh* result = filter->GetOutput< TPluginMesh >( 0 ); - result->DisconnectPipeline( ); - this->m_Mesh = result; - err = this->_ConfigureMeshActors( ); - if( err != "" ) - QMessageBox::critical( - this, - tr( "Error message" ), - tr( err.c_str( ) ) - ); - } - else - QMessageBox::critical( - this, - tr( "Error executing filter" ), - tr( err.c_str( ) ) - ); -} - -// ------------------------------------------------------------------------- -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$ diff --git a/appli/ImageMPR/ImageMPR.h b/appli/ImageMPR/ImageMPR.h index 1302006..5d2ac72 100644 --- a/appli/ImageMPR/ImageMPR.h +++ b/appli/ImageMPR/ImageMPR.h @@ -24,88 +24,6 @@ namespace Ui class ImageMPR; } -//========================================================================== -// Plugins types -//typedef cpPlugins::Interface::Interface TPluginsInterface; -//typedef cpPlugins::Interface::Object TPluginObject; -//typedef cpPlugins::Interface::DataObject TPluginData; -//typedef cpPlugins::Interface::Image TPluginImage; -//typedef cpPlugins::Interface::ImplicitFunction TPluginImplicitFunction; -//typedef cpPlugins::Interface::Mesh TPluginMesh; -//typedef cpPlugins::Interface::ProcessObject TPluginFilter; -//typedef cpPlugins::Interface::Parameters TParameters; -// -//typedef cpExtensions::Visualization::MPRObjects TMPRObjects; - - - - -//class MementoState -//{ -//private: -// long m_Id; -// -//public: -// -// MementoState() -// { -// m_Id = 0; -// }; -// -// MementoState(long id, TPluginImage* _img) -// { -// char * base = "state"; -// std::ostringstream oss; -// oss << id; -// std::string str = oss.str(); -// auto complement = str.c_str(); -// -// std::string fileName(base); -// fileName.append(complement); -// fileName.append(".mhd"); -// -// std::string fileNameRaw(base); -// fileNameRaw.append(complement); -// fileNameRaw.append(".raw"); -// save(fileName, fileNameRaw, _img); -// } -// -// vtkSmartPointer getMemento(long id) -// { -// char * base = "state"; -// std::ostringstream oss; -// oss << id; -// std::string str = oss.str(); -// auto complement = str.c_str(); -// -// std::string fileName(base); -// fileName.append(complement); -// fileName.append(".mhd"); -// return load(fileName); -// } -// -// void save(const std::string& filename, const std::string& filenameRaw, TPluginImage* img) { -// vtkSmartPointer writer = -// vtkSmartPointer::New(); -// writer->SetInputData(img->GetVTK< vtkImageData >()); -// writer->SetFileName(filename.c_str()); -// writer->SetRAWFileName(filenameRaw.c_str()); -// writer->Write(); -// } -// -// vtkSmartPointer load(const std::string& filename) { -// vtkSmartPointer reader = -// vtkSmartPointer::New(); -// reader->SetFileName(filename.c_str()); -// reader->Update(); -// return reader; -// } -// -//}; - -//========================================================================== - -// ------------------------------------------------------------------------- /** */ class ImageMPR @@ -124,45 +42,14 @@ public: typedef cpPlugins::Interface::Image TImage; typedef cpPlugins::Interface::Mesh TMesh; - // Plugins types - /* - typedef cpPlugins::Interface::Interface TPluginsInterface; - typedef cpPlugins::Interface::Object TPluginObject; - typedef cpPlugins::Interface::Image TPluginImage; - typedef cpPlugins::Interface::ImplicitFunction TPluginImplicitFunction; - typedef cpPlugins::Interface::Mesh TPluginMesh; - typedef cpPlugins::Interface::ProcessObject TPluginFilter; - typedef cpPlugins::Interface::Parameters TParameters; - typedef cpExtensions::Visualization::MPRObjects TMPRObjects; - */ - public: explicit ImageMPR( QWidget* parent = 0 ); virtual ~ImageMPR( ); virtual void UpdateActualFilter( ); - /* TODO - protected: - inline void _Block( ) - { - QApplication::setOverrideCursor( Qt::WaitCursor ); - this->setEnabled( false ); - } - inline void _Unblock( ) - { - QApplication::restoreOverrideCursor( ); - this->setEnabled( true ); - } - */ - protected: void _AssociatePluginsToMenu( ); - /* - bool _LoadPlugins( const std::string& filename ); - std::string _LoadImage( TPluginImage::Pointer& image ); - std::string _ConfigureMeshActors( ); - */ private slots: void _aOpenImage( ); @@ -170,7 +57,6 @@ private slots: void _aOpenSegmentation( ); void _aOpenPolyData( ); void _aSaveImage( ); - void _aSaveSegmentation( ); void _aSavePolyData( ); void _aUndo( ); void _aRedo( ); @@ -184,44 +70,6 @@ private: TPlugins m_Plugins; std::string m_ActiveFilterMainInput; - // Objects - /* - typedef std::pair< std::string, TPlugins::TDataObject::Pointer > TTreeNode; - typedef std::map< std::string, TTreeNode > TTree; - TTree m_Objects; - - // Active filter (for modal configuration) - TPlugins::TProcessObject::Pointer m_ActiveFilter; - */ - - // Plugins objects - /* - TPluginsInterface m_Plugins; - - // Needed object from plugins - std::string m_ImageReaderClass; - std::string m_ImageWriterClass; - std::string m_MeshReaderClass; - std::string m_MeshWriterClass; - std::string m_MeshCutterClass; - - // Real data - TPluginImage::Pointer m_Image; - TPluginImage::Pointer m_Segmentation; - TPluginMesh::Pointer m_Mesh; - - // Cutters - TPluginFilter::Pointer m_Cutters[ 3 ]; - TPluginImplicitFunction::Pointer m_Planes[ 3 ]; - - // Visualization stuff - vtkSmartPointer< TMPRObjects > m_MPRObjects; - - // Memento stuff - unsigned long m_state; - unsigned long m_max_state; - */ - /* TODO vtkSmartPointer< vtkOrientationMarkerWidget > m_3DOrientationWidget; */ diff --git a/appli/ImageMPR/ImageMPR.ui b/appli/ImageMPR/ImageMPR.ui index 26dfe1e..8a6c81c 100644 --- a/appli/ImageMPR/ImageMPR.ui +++ b/appli/ImageMPR/ImageMPR.ui @@ -6,14 +6,14 @@ 0 0 - 718 - 706 + 1024 + 768 - 718 - 706 + 1024 + 768 @@ -38,8 +38,8 @@ 0 0 - 718 - 27 + 1024 + 25 @@ -52,7 +52,6 @@ - @@ -161,14 +160,6 @@ Ctrl+Shift+I - - - Save segmentation - - - Ctrl+Shift+S - - Save polydata diff --git a/lib/cpPlugins/Interface/BaseMPRWidget.cxx b/lib/cpPlugins/Interface/BaseMPRWidget.cxx index d96ae32..052e374 100644 --- a/lib/cpPlugins/Interface/BaseMPRWidget.cxx +++ b/lib/cpPlugins/Interface/BaseMPRWidget.cxx @@ -95,6 +95,13 @@ AddData( return( false ); } +// ------------------------------------------------------------------------- +const std::string& cpPlugins::Interface::BaseMPRWidget:: +GetMainImage( ) const +{ + return( this->m_MainImage ); +} + // ------------------------------------------------------------------------- bool cpPlugins::Interface::BaseMPRWidget:: SetMainImage( const std::string& name ) diff --git a/lib/cpPlugins/Interface/BaseMPRWidget.h b/lib/cpPlugins/Interface/BaseMPRWidget.h index 40819a3..6ae116c 100644 --- a/lib/cpPlugins/Interface/BaseMPRWidget.h +++ b/lib/cpPlugins/Interface/BaseMPRWidget.h @@ -70,6 +70,7 @@ namespace cpPlugins DataObject* data, const std::string& name, const std::string& parent ); + const std::string& GetMainImage( ) const; bool SetMainImage( const std::string& name ); void DeleteData( const std::string& name ); void DeleteAllData( ); diff --git a/lib/cpPlugins/Plugins/BasicFilters/MacheteFilter.cxx b/lib/cpPlugins/Plugins/BasicFilters/MacheteFilter.cxx index f25c6dd..f07b60e 100644 --- a/lib/cpPlugins/Plugins/BasicFilters/MacheteFilter.cxx +++ b/lib/cpPlugins/Plugins/BasicFilters/MacheteFilter.cxx @@ -27,7 +27,7 @@ cpPlugins::BasicFilters::MacheteFilter_Dialog:: MacheteFilter_Dialog( QWidget* parent, MacheteFilter* filter, Qt::WindowFlags f ) - : QDialog( parent, f ), + : QDialog( parent, f | Qt::WindowStaysOnTopHint ), m_Filter( filter ) { this->m_Title = new QLabel( this ); @@ -90,8 +90,12 @@ accept( ) void cpPlugins::BasicFilters::MacheteFilter_Dialog:: reject( ) { - std::cout << "reject" << std::endl; + auto plugins = this->m_Filter->GetPlugins( ); + if( plugins != NULL ) + plugins->DeactivateFilter( ); + this->Superclass::reject( ); } + #endif // cpPlugins_Interface_QT4 // ------------------------------------------------------------------------- diff --git a/lib/cpPlugins/Plugins/BasicFilters/MacheteFilter.h b/lib/cpPlugins/Plugins/BasicFilters/MacheteFilter.h index ff781f1..ecd2ce6 100644 --- a/lib/cpPlugins/Plugins/BasicFilters/MacheteFilter.h +++ b/lib/cpPlugins/Plugins/BasicFilters/MacheteFilter.h @@ -38,6 +38,9 @@ namespace cpPlugins { Q_OBJECT; + public: + typedef QDialog Superclass; + public: MacheteFilter_Dialog( QWidget* parent, MacheteFilter* filter, Qt::WindowFlags f = 0 @@ -45,8 +48,8 @@ namespace cpPlugins virtual ~MacheteFilter_Dialog( ); public slots: - void accept( ); - void reject( ); + virtual void accept( ); + virtual void reject( ); protected: MacheteFilter* m_Filter;