-
- } // fi
-
- // Get outputs
- std::vector< std::string > outputs_names = filter->GetOutputsNames( );
- for(
- auto oIt = outputs_names.begin( );
- oIt != outputs_names.end( );
- ++oIt
- )
- {
- 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
-
- // 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
-}
-
-// -------------------------------------------------------------------------
-/* 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 <vtkProperty.h>
-#include <vtkRenderWindow.h>
-#include <vtkMetaImageReader.h>
-
-#include <QFileDialog>
-#include <QMessageBox>
-
-#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