#include <cpPlugins/Interface/Plugins.h>
+#include <stdexcept>
+
+#include <cpPlugins/Interface/Image.h>
+#include <cpPlugins/Interface/Mesh.h>
+
#ifdef cpPlugins_Interface_QT4
-/*
- #include <QApplication>
- #include <QFileDialog>
- #include <QMenu>
- #include <QMessageBox>
- #include <QWidget>
-*/
+#include <QApplication>
+#include <QFileDialog>
+#include <QMessageBox>
+#include <QWidget>
#ifdef _WIN32
# define PLUGIN_PREFIX ""
Plugins( )
: m_Widget( NULL ),
m_Application( NULL ),
- m_Interface( NULL ),
m_LastLoadedPlugin( "" ),
m_ActiveFilter( NULL )
{
- this->m_Interface = new TInterface( );
}
// -------------------------------------------------------------------------
cpPlugins::Interface::Plugins::
~Plugins( )
{
- if( this->m_Interface != NULL )
- delete this->m_Interface;
}
// -------------------------------------------------------------------------
}
// -------------------------------------------------------------------------
+cpPlugins::Interface::
BaseApplication* cpPlugins::Interface::Plugins::
GetApplication( )
{
}
// -------------------------------------------------------------------------
-const BaseApplication* cpPlugins::Interface::Plugins::
+const cpPlugins::Interface::
+BaseApplication* cpPlugins::Interface::Plugins::
GetApplication( ) const
{
return( this->m_Application );
// -------------------------------------------------------------------------
bool cpPlugins::Interface::Plugins::
-LoadPlugins( )
+LoadPluginsPath( const std::string& path )
{
- // TODO: what to do here?
+ this->BlockWidget( );
+
+ // Load all plugins from given folder
+ std::list< std::string > files =
+ this->m_Interface.LoadFromFolder( path );
+
+ // Update a simple track
+ bool ret = false;
+ if( files.size( ) > 0 )
+ {
+ for( auto fIt = files.begin( ); fIt != files.end( ); ++fIt )
+ {
+ this->m_LoadedPlugins.insert( *fIt );
+ this->m_LastLoadedPlugin = *fIt;
+ ret = true;
+
+ } // rof
+ this->_UpdateLoadedPluginsInformation( );
+
+ } // fi
+
+ this->UnblockWidget( );
+ return( ret );
}
// -------------------------------------------------------------------------
if( this->m_LoadedPlugins.find( fname ) == this->m_LoadedPlugins.end( ) )
{
// Was it succesfully loaded?
- ret = this->m_Interface->Load( fname );
+ ret = this->m_Interface.Load( fname );
// Update a simple track
if( ret )
return( this->m_LoadedPlugins );
}
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::Plugins::
+GetLoadedCategories( TStringContainer& categories ) const
+{
+ categories.clear( );
+ auto fIt = this->m_LoadedFilters.begin( );
+ for( ; fIt != this->m_LoadedFilters.end( ); ++fIt )
+ categories.insert( fIt->first );
+}
+
// -------------------------------------------------------------------------
void cpPlugins::Interface::Plugins::
GetLoadedFilters( TStringContainer& filters ) const
// -------------------------------------------------------------------------
const cpPlugins::Interface::Plugins::
TStringContainer& cpPlugins::Interface::Plugins::
-GetLoadedFilters( const std::string& plugin ) const
+GetLoadedFilters( const std::string& category ) const
{
static const TStringContainer EMPTY;
- auto pIt = this->m_LoadedFilters.find( plugin );
+ auto pIt = this->m_LoadedFilters.find( category );
if( pIt != this->m_LoadedFilters.end( ) )
return( pIt->second );
else
const std::vector< std::string >& fnames, const std::string& parent
)
{
- // Activate reader
- auto fIt = this->m_IOFilters.find( "ImageReader" );
- if( fIt == this->m_IOFilters.end( ) )
- return( "" );
- this->m_ActiveFilter = fIt->second;
+ // Load source
+ this->_ActivateIOFilter( "ImageReader" );
// Configure reader
TParameters* params = this->GetActiveFilterParameters( );
params->AddToStringList( "FileNames", *nIt );
// Execute filter
- std::string err = this->UpdateActiveFilter( );
- if( err == "" )
- {
-#error GET OBJECT NAME
- }
- else
- {
-#error THROW ERROR
- } // fi
+ return( this->_ReadData( parent ) );
}
// -------------------------------------------------------------------------
std::string cpPlugins::Interface::Plugins::
ReadImage( const std::string& parent )
{
+ // Load source
+ this->_ActivateIOFilter( "ImageReader" );
+
+ // Try to configure source
+ if( this->ConfigureActiveFilter( ) == TProcessObject::DialogResult_Cancel )
+ {
+ this->DeactivateFilter( );
+ return( "" );
+
+ } // fi
+
+ // Execute filter
+ return( this->_ReadData( parent ) );
}
// -------------------------------------------------------------------------
std::string cpPlugins::Interface::Plugins::
ReadDicomSeries( const std::string& parent )
{
+ // Load source
+ this->_ActivateIOFilter( "DicomSeriesReader" );
+
+ // Try to configure source
+ if( this->ConfigureActiveFilter( ) == TProcessObject::DialogResult_Cancel )
+ {
+ this->DeactivateFilter( );
+ return( "" );
+
+ } // fi
+
+ // Execute filter
+ return( this->_ReadData( parent ) );
}
// -------------------------------------------------------------------------
std::string cpPlugins::Interface::Plugins::
-ReadMesh(
- const std::string& fname, const std::string& parent
- )
+ReadMesh( const std::string& fname, const std::string& parent )
{
+ // Load source
+ this->_ActivateIOFilter( "MeshReader" );
+
+ // Configure reader
+ TParameters* params = this->GetActiveFilterParameters( );
+ params->SetString( "FileName", fname );
+
+ // Execute filter
+ return( this->_ReadData( parent ) );
}
// -------------------------------------------------------------------------
std::string cpPlugins::Interface::Plugins::
ReadMesh( const std::string& parent )
{
+ // Load source
+ this->_ActivateIOFilter( "MeshReader" );
+
+ // Try to configure source
+ if( this->ConfigureActiveFilter( ) == TProcessObject::DialogResult_Cancel )
+ {
+ this->DeactivateFilter( );
+ return( "" );
+
+ } // fi
+
+ // Execute filter
+ return( this->_ReadData( parent ) );
}
// -------------------------------------------------------------------------
-std::string cpPlugins::Interface::Plugins::
-WriteDataObject(
- const std::string& fname, const std::string& name
- )
+bool cpPlugins::Interface::Plugins::
+WriteDataObject( const std::string& fname, const std::string& name )
{
+ typedef cpPlugins::Interface::Image _TImage;
+ typedef cpPlugins::Interface::Mesh _TMesh;
+
+ // Activate sink
+ TDataObject* obj = this->GetData< TDataObject >( name );
+ if( dynamic_cast< cpPlugins::Interface::Image* >( obj ) != NULL )
+ this->_ActivateIOFilter( "ImageWriter" );
+ else if( dynamic_cast< cpPlugins::Interface::Mesh* >( obj ) != NULL )
+ this->_ActivateIOFilter( "MeshWriter" );
+ else
+ {
+ this->DeactivateFilter( );
+ return( false );
+
+ } // fi
+
+ // Configure writer
+ TParameters* params = this->GetActiveFilterParameters( );
+ params->SetString( "FileName", fname );
+
+ // Execute filter
+ return( this->_WriteData( name ) );
}
// -------------------------------------------------------------------------
-std::string cpPlugins::Interface::Plugins::
+bool cpPlugins::Interface::Plugins::
WriteDataObject( const std::string& name )
{
+ typedef cpPlugins::Interface::Image _TImage;
+ typedef cpPlugins::Interface::Mesh _TMesh;
+
+ // Activate sink
+ TDataObject* obj = this->GetData< TDataObject >( name );
+ if( dynamic_cast< cpPlugins::Interface::Image* >( obj ) != NULL )
+ this->_ActivateIOFilter( "ImageWriter" );
+ else if( dynamic_cast< cpPlugins::Interface::Mesh* >( obj ) != NULL )
+ this->_ActivateIOFilter( "MeshWriter" );
+ else
+ {
+ this->DeactivateFilter( );
+ return( false );
+
+ } // fi
+
+ // Try to configure source
+ if( this->ConfigureActiveFilter( ) == TProcessObject::DialogResult_Cancel )
+ {
+ this->DeactivateFilter( );
+ return( false );
+
+ } // fi
+
+ // Execute filter
+ return( this->_WriteData( name ) );
}
// -------------------------------------------------------------------------
void cpPlugins::Interface::Plugins::
ClearDataObjects( )
{
+ this->m_DataObjects.clear( );
}
// -------------------------------------------------------------------------
void cpPlugins::Interface::Plugins::
DeleteDataObject( const std::string& name )
{
+ // Find and delete object
+ auto oIt = this->m_DataObjects.find( name );
+ if( oIt == this->m_DataObjects.end( ) )
+ return;
+ this->m_DataObjects.erase( oIt );
+
+ // Delete children
+ TStringContainer children;
+ this->GetChildren( children, name );
+ auto cIt = children.begin( );
+ for( ; cIt != children.end( ); ++cIt )
+ this->DeleteDataObject( *cIt );
}
// -------------------------------------------------------------------------
void cpPlugins::Interface::Plugins::
GetDataObjects( TStringContainer& names )
{
+ names.clear( );
+ auto oIt = this->m_DataObjects.begin( );
+ for( ; oIt != this->m_DataObjects.end( ); ++oIt )
+ names.insert( oIt->first );
}
// -------------------------------------------------------------------------
std::string cpPlugins::Interface::Plugins::
GetParent( const std::string& name ) const
{
+ // Find and delete object
+ auto oIt = this->m_DataObjects.find( name );
+ if( oIt != this->m_DataObjects.end( ) )
+ return( oIt->second.first );
+ else
+ return( "" );
}
// -------------------------------------------------------------------------
void cpPlugins::Interface::Plugins::
-GetChildren(
- TStringContainer& names, const std::string& name
- ) const
+GetChildren( TStringContainer& names, const std::string& name ) const
{
+ names.clear( );
+ auto oIt = this->m_DataObjects.begin( );
+ for( ; oIt != this->m_DataObjects.end( ); ++oIt )
+ if( oIt->second.first == name )
+ names.insert( oIt->first );
}
// -------------------------------------------------------------------------
void cpPlugins::Interface::Plugins::
GetRoots( TStringContainer& names ) const
{
+ this->GetChildren( names, "" );
}
// -------------------------------------------------------------------------
bool cpPlugins::Interface::Plugins::
ActivateFilter( const std::string& name )
{
+ this->m_ActiveFilter = this->m_Interface.CreateObject( name );
+ if( this->m_ActiveFilter.IsNotNull( ) )
+ {
+ this->m_ActiveFilter->SetPlugins( this );
+ auto iIt = this->m_Interactors.begin( );
+ for( ; iIt != this->m_Interactors.end( ); ++iIt )
+ this->m_ActiveFilter->AddInteractor( *iIt );
+ return( true );
+ }
+ else
+ return( false );
}
// -------------------------------------------------------------------------
void cpPlugins::Interface::Plugins::
DeactivateFilter( )
{
+ this->m_ActiveFilter = NULL;
}
// -------------------------------------------------------------------------
bool cpPlugins::Interface::Plugins::
HasActiveFilter( ) const
{
+ return( this->m_ActiveFilter.IsNotNull( ) );
}
// -------------------------------------------------------------------------
bool cpPlugins::Interface::Plugins::
IsActiveFilterInteractive( ) const
{
+ if( this->m_ActiveFilter.IsNotNull( ) )
+ return( this->m_ActiveFilter->GetInteractive( ) );
+ else
+ return( false );
}
// -------------------------------------------------------------------------
void cpPlugins::Interface::Plugins::
GetActiveFilterInputsNames( TStringContainer& names ) const
{
+ if( this->m_ActiveFilter.IsNotNull( ) )
+ this->m_ActiveFilter->GetInputsNames( names );
}
// -------------------------------------------------------------------------
void cpPlugins::Interface::Plugins::
GetActiveFilterOutputsNames( TStringContainer& names ) const
{
+ if( this->m_ActiveFilter.IsNotNull( ) )
+ this->m_ActiveFilter->GetOutputsNames( names );
}
// -------------------------------------------------------------------------
const std::string& object_name, const std::string& input_name
)
{
+ if( this->m_ActiveFilter.IsNotNull( ) )
+ {
+ TDataObject* dobj = this->GetData< TDataObject >( object_name );
+ if( dobj != NULL )
+ {
+ this->m_ActiveFilter->SetInput( input_name, dobj );
+ return( true );
+
+ } // fi
+
+ } // fi
+ return( false );
}
// -------------------------------------------------------------------------
const std::string& new_object_name, const std::string& output_name
)
{
+ if( this->m_ActiveFilter.IsNotNull( ) )
+ return(
+ this->m_ActiveFilter->SetOutputObjectName(
+ new_object_name, output_name
+ )
+ );
+ else
+ return( false );
}
// -------------------------------------------------------------------------
+cpPlugins::Interface::Plugins::
TParameters* cpPlugins::Interface::Plugins::
GetActiveFilterParameters( )
{
+ if( this->m_ActiveFilter.IsNotNull( ) )
+ return( this->m_ActiveFilter->GetParameters( ) );
+ else
+ return( NULL );
}
// -------------------------------------------------------------------------
-const TParameters* cpPlugins::Interface::Plugins::
+const cpPlugins::Interface::Plugins::
+TParameters* cpPlugins::Interface::Plugins::
GetActiveFilterParameters( ) const
{
+ if( this->m_ActiveFilter.IsNotNull( ) )
+ return( this->m_ActiveFilter->GetParameters( ) );
+ else
+ return( NULL );
}
// -------------------------------------------------------------------------
+cpPlugins::Interface::Plugins::
TProcessObject::DialogResult cpPlugins::Interface::Plugins::
ConfigureActiveFilter( )
{
+ if( this->m_ActiveFilter.IsNotNull( ) )
+ return( this->m_ActiveFilter->ExecConfigurationDialog( this->m_Widget ) );
+ else
+ return( TProcessObject::DialogResult_Cancel );
}
// -------------------------------------------------------------------------
-std::string cpPlugins::Interface::Plugins::
-UpdateActiveFilter( )
+bool cpPlugins::Interface::Plugins::
+UpdateActiveFilter( TStringContainer& outputs, const std::string& parent )
{
+ if( this->m_ActiveFilter.IsNull( ) )
+ return( false );
+
+ // Execute filter
+ this->BlockWidget( );
+ std::string err = this->m_ActiveFilter->Update( );
+ this->UnblockWidget( );
+
+ // Associate outputs
+ outputs.clear( );
+ if( err == "" )
+ {
+ std::set< std::string > names;
+ this->m_ActiveFilter->GetOutputsNames( names );
+ for( auto oIt = names.begin( ); oIt != names.end( ); ++oIt )
+ {
+ TDataObject* dobj =
+ this->m_ActiveFilter->GetOutput< TDataObject >( *oIt );
+ this->_InsertNewData( dobj, parent );
+ outputs.insert( dobj->GetName( ) );
+
+ } // rof
+ this->m_ActiveFilter->DisconnectOutputs( );
+ return( true );
+ }
+ else
+ {
+#ifdef cpPlugins_Interface_QT4
+ if( this->m_Widget != NULL )
+ QMessageBox::critical(
+ this->m_Widget,
+ QMessageBox::tr( "Error reading image." ),
+ QMessageBox::tr( err.c_str( ) )
+ );
+ else
+ throw std::runtime_error(
+ std::string( "Error reading image: " ) + err
+ );
+#else // cpPlugins_Interface_QT4
+ throw std::runtime_error(
+ std::string( "Error reading image: " ) + err
+ );
+#endif // cpPlugins_Interface_QT4
+ return( false );
+
+ } // fi
}
// -------------------------------------------------------------------------
void cpPlugins::Interface::Plugins::
_UpdateLoadedPluginsInformation( )
{
+ this->m_LoadedFilters.clear( );
+ const TInterface::TClasses& cls = this->m_Interface.GetClasses( );
+ for( auto i = cls.begin( ); i != cls.end( ); ++i )
+ {
+ TProcessObject::Pointer o = this->m_Interface.CreateObject( i->first );
+ std::string name = o->GetClassName( );
+ std::string category = o->GetClassCategory( );
+
+ if(
+ category == "ImageReader" ||
+ category == "ImageWriter" ||
+ category == "MeshReader" ||
+ category == "MeshWriter" ||
+ category == "DicomSeriesReader"
+ )
+ this->m_IOFilters[ category ] = o;
+ this->m_LoadedFilters[ category ].insert( name );
+
+ } // rof
}
// -------------------------------------------------------------------------
bool cpPlugins::Interface::Plugins::
-_InsertNewData( TDataObject* dobj, const std::string& parent )
+_ActivateIOFilter( const std::string& filter )
{
+ // Activate reader
+ auto fIt = this->m_IOFilters.find( filter );
+ if( fIt != this->m_IOFilters.end( ) )
+ {
+ this->m_ActiveFilter = fIt->second;
+ return( true );
+ }
+ else
+ return( false );
}
-/*
- protected:
- // MVC objects
- QWidget* m_Widget;
- BaseApplication* m_Application;
-
- // Plugins interface
- TInterface m_Interface;
- TStringContainer m_LoadedPlugins;
- std::string m_LastLoadedPlugin;
-
- // Loaded filters
- std::map< std::string, TProcessObject::Pointer > m_IOFilters;
- TProcessObject::Pointer m_ActiveFilter;
- std::map< std::string, std::string > m_ActiveFilterOutputs;
- std::map< std::string, TStringContainer > m_LoadedFilters;
-
- // Loaded data objects
- typedef std::pair< std::string, TDataObject::Pointer > _TTreeNode;
- std::map< std::string, _TTreeNode > m_DataObjects;
-
- // Associated interactors
- std::set< vtkRenderWindowInteractor* > m_Interactors;
- };
-
- } // ecapseman
-
- } // ecapseman
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+// -------------------------------------------------------------------------
+std::string cpPlugins::Interface::Plugins::
+_ReadData( const std::string& parent )
+{
+ if( !( this->HasActiveFilter( ) ) )
+ return( "" );
+ TStringContainer outputs;
+ if( this->UpdateActiveFilter( outputs, parent ) )
+ return( *( outputs.begin( ) ) );
+ else
+ return( "" );
+}
+// ------------------------------------------------------------------------
+bool cpPlugins::Interface::Plugins::
+_WriteData( const std::string& name )
+{
+ if( !( this->HasActiveFilter( ) ) )
+ return( false );
+ TStringContainer inputs;
+ this->GetActiveFilterInputsNames( inputs );
+ bool r = true;
+ for( auto iIt = inputs.begin( ); iIt != inputs.end( ); ++iIt )
+ r &= this->ConnectInputInActiveFilter( name, *iIt );
+ if( r )
+ {
+ TStringContainer outputs;
+ return( this->UpdateActiveFilter( outputs, "" ) );
+ }
+ else
+ return( false );
+}
+// -------------------------------------------------------------------------
+bool cpPlugins::Interface::Plugins::
+_InsertNewData( TDataObject* dobj, const std::string& parent )
+{
+ if( parent != "" )
+ {
+ auto oIt = this->m_DataObjects.find( parent );
+ if( oIt == this->m_DataObjects.end( ) )
+ return( false );
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#include <cpPlugins/Interface/Config.h>
-
-#include <fstream>
-#include <sstream>
-
-#ifdef cpPlugins_Interface_QT4
-
-#include <QApplication>
-#include <QFileDialog>
-#include <QMenu>
-#include <QMessageBox>
-#include <QWidget>
-
-#ifdef _WIN32
-# define PLUGIN_PREFIX ""
-# define PLUGIN_EXT "dll"
-# define PLUGIN_REGEX "Plugins file (*.dll);;All files (*)"
-#else // Linux
-# define PLUGIN_PREFIX "lib"
-# define PLUGIN_EXT "so"
-# define PLUGIN_REGEX "Plugins file (*.so);;All files (*)"
-#endif // _WIN32
-
-#endif // cpPlugins_Interface_QT4
-
-
-
-
-// -------------------------------------------------------------------------
-void cpPlugins::Interface::Plugins::
-AddInteractor( vtkRenderWindowInteractor* interactor )
-{
- this->m_Interactors.insert( interactor );
-}
-
-// -------------------------------------------------------------------------
-void cpPlugins::Interface::Plugins::
-RemoveInteractor( vtkRenderWindowInteractor* interactor )
-{
- this->m_Interactors.erase( interactor );
-}
-
-// -------------------------------------------------------------------------
-void cpPlugins::Interface::Plugins::
-ClearInteractors( )
-{
- this->m_Interactors.clear( );
-}
-
-// -------------------------------------------------------------------------
-bool cpPlugins::Interface::Plugins::
-HasImageReader( ) const
-{
- return( this->m_ImageReader.IsNotNull( ) );
-}
-
-// -------------------------------------------------------------------------
-bool cpPlugins::Interface::Plugins::
-HasDicomSeriesReader( ) const
-{
- return( this->m_DicomSeriesReader.IsNotNull( ) );
-}
-
-// -------------------------------------------------------------------------
-bool cpPlugins::Interface::Plugins::
-HasMeshReader( ) const
-{
- return( this->m_MeshReader.IsNotNull( ) );
-}
-
-// -------------------------------------------------------------------------
-bool cpPlugins::Interface::Plugins::
-HasImageWriter( ) const
-{
- return( this->m_ImageWriter.IsNotNull( ) );
-}
-
-// -------------------------------------------------------------------------
-bool cpPlugins::Interface::Plugins::
-HasMeshWriter( ) const
-{
- return( this->m_MeshWriter.IsNotNull( ) );
-}
-
-// -------------------------------------------------------------------------
-std::string cpPlugins::Interface::Plugins::
-ReadImage( const std::string& fname, const std::string& parent )
-{
- std::vector< std::string > fnames;
- fnames.push_back( fname );
- return( this->ReadImage( fnames, parent ) );
-}
-
-// -------------------------------------------------------------------------
-std::string cpPlugins::Interface::Plugins::
-ReadImage(
- const std::vector< std::string >& fnames, const std::string& parent
- )
-{
- // Check if object exists
- if( this->m_ImageReader.IsNull( ) )
- return( "" );
-
- // Configure object
- TParameters* params = this->m_ImageReader->GetParameters( );
- params->ClearStringList( "FileNames" );
- auto i = fnames.begin( );
- for( ; i != fnames.end( ); ++i )
- params->AddToStringList( "FileNames", *i );
-
- // Execute filter
- this->BlockWidget( );
- std::string err = this->m_ImageReader->Update( );
- this->UnblockWidget( );
-
- // Get result, if any
- if( err == "" )
- {
- TImage* image = this->m_ImageReader->GetOutput< TImage >( "Output" );
- this->m_ImageReader->DisconnectOutputs( );
-
- // Add newly added data
- if( this->_InsertNewData( image, parent ) )
- return( image->GetName( ) );
- else
- return( "" );
- }
- else
- {
-#ifdef cpPlugins_Interface_QT4
- if( this->m_Widget != NULL )
- QMessageBox::critical(
- this->m_Widget,
- QMessageBox::tr( "Error reading image." ),
- QMessageBox::tr( err.c_str( ) )
- );
-#else // cpPlugins_Interface_QT4
- std::cerr << "Error reading image: " << err << std::endl;
-#endif // cpPlugins_Interface_QT4
- return( "" );
-
- } // fi
-}
-
-// -------------------------------------------------------------------------
-std::string cpPlugins::Interface::Plugins::
-ReadImage( const std::string& parent )
-{
- // Check if object exists
- if( this->m_ImageReader.IsNull( ) )
- return( "" );
-
- // Configure object
- TProcessObject::DialogResult dret =
- this->m_ImageReader->ExecConfigurationDialog( this->m_Widget );
- if( dret == TProcessObject::DialogResult_Cancel )
- return( "" );
-
- // Execute filter
- this->BlockWidget( );
- std::string err = this->m_ImageReader->Update( );
- this->UnblockWidget( );
-
- // Get result, if any
- if( err == "" )
- {
- TImage* image = this->m_ImageReader->GetOutput< TImage >( "Output" );
- this->m_ImageReader->DisconnectOutputs( );
-
- // Add newly added data
- if( this->_InsertNewData( image, parent ) )
- return( image->GetName( ) );
- else
- return( "" );
- }
- else
- {
-#ifdef cpPlugins_Interface_QT4
- if( this->m_Widget != NULL )
- QMessageBox::critical(
- this->m_Widget,
- QMessageBox::tr( "Error reading image." ),
- QMessageBox::tr( err.c_str( ) )
- );
-#else // cpPlugins_Interface_QT4
- std::cerr << "Error reading image: " << err << std::endl;
-#endif // cpPlugins_Interface_QT4
- return( "" );
-
- } // fi
-}
-
-// -------------------------------------------------------------------------
-std::string cpPlugins::Interface::Plugins::
-ReadDicomSeries( const std::string& parent )
-{
- // Check if object exists
- if( this->m_DicomSeriesReader.IsNull( ) )
- return( "" );
-
- // Configure object
- TProcessObject::DialogResult dret =
- this->m_DicomSeriesReader->ExecConfigurationDialog( this->m_Widget );
- if( dret == TProcessObject::DialogResult_Cancel )
- return( "" );
-
- // Execute filter
- this->BlockWidget( );
- std::string err = this->m_DicomSeriesReader->Update( );
- this->UnblockWidget( );
-
- // Get result, if any
- if( err == "" )
- {
- TImage* image =
- this->m_DicomSeriesReader->GetOutput< TImage >( "Output" );
- this->m_DicomSeriesReader->DisconnectOutputs( );
-
- // Add newly added data
- if( this->_InsertNewData( image, parent ) )
- return( image->GetName( ) );
- else
- return( "" );
- }
- else
- {
-#ifdef cpPlugins_Interface_QT4
- if( this->m_Widget != NULL )
- QMessageBox::critical(
- this->m_Widget,
- QMessageBox::tr( "Error reading image." ),
- QMessageBox::tr( err.c_str( ) )
- );
-#else // cpPlugins_Interface_QT4
- std::cerr << "Error reading image: " << err << std::endl;
-#endif // cpPlugins_Interface_QT4
- return( "" );
-
- } // fi
-}
-
-// -------------------------------------------------------------------------
-std::string cpPlugins::Interface::Plugins::
-ReadMesh( const std::string& fname, const std::string& parent )
-{
- // Check if object exists
- if( this->m_MeshReader.IsNull( ) )
- return( "" );
-
- // Configure object
- TParameters* params = this->m_MeshReader->GetParameters( );
- params->SetString( "FileName", fname );
-
- // Execute filter
- this->BlockWidget( );
- std::string err = this->m_MeshReader->Update( );
- this->UnblockWidget( );
-
- // Get result, if any
- if( err == "" )
- {
- TMesh* mesh = this->m_MeshReader->GetOutput< TMesh >( "Output" );
- this->m_MeshReader->DisconnectOutputs( );
-
- // Add newly added data
- if( this->_InsertNewData( mesh, parent ) )
- return( mesh->GetName( ) );
- else
- return( "" );
- }
- else
- {
-#ifdef cpPlugins_Interface_QT4
- if( this->m_Widget != NULL )
- QMessageBox::critical(
- this->m_Widget,
- QMessageBox::tr( "Error reading mesh." ),
- QMessageBox::tr( err.c_str( ) )
- );
-#else // cpPlugins_Interface_QT4
- std::cerr << "Error reading mesh: " << err << std::endl;
-#endif // cpPlugins_Interface_QT4
- return( "" );
-
- } // fi
-}
-
-// -------------------------------------------------------------------------
-std::string cpPlugins::Interface::Plugins::
-ReadMesh( const std::string& parent )
-{
- // Check if object exists
- if( this->m_MeshReader.IsNull( ) )
- return( "" );
-
- // Configure object
- TProcessObject::DialogResult dret =
- this->m_MeshReader->ExecConfigurationDialog( this->m_Widget );
- if( dret == TProcessObject::DialogResult_Cancel )
- return( "" );
-
- // Execute filter
- this->BlockWidget( );
- std::string err = this->m_MeshReader->Update( );
- this->UnblockWidget( );
-
- // Get result, if any
- if( err == "" )
- {
- TMesh* mesh = this->m_MeshReader->GetOutput< TMesh >( "Output" );
- this->m_MeshReader->DisconnectOutputs( );
-
- // Add newly added data
- if( this->_InsertNewData( mesh, parent ) )
- return( mesh->GetName( ) );
- else
- return( "" );
- }
- else
- {
-#ifdef cpPlugins_Interface_QT4
- if( this->m_Widget != NULL )
- QMessageBox::critical(
- this->m_Widget,
- QMessageBox::tr( "Error reading mesh." ),
- QMessageBox::tr( err.c_str( ) )
- );
-#else // cpPlugins_Interface_QT4
- std::cerr << "Error reading mesh: " << err << std::endl;
-#endif // cpPlugins_Interface_QT4
- return( "" );
-
- } // fi
-}
-
-// -------------------------------------------------------------------------
-bool cpPlugins::Interface::Plugins::
-WriteImage( const std::string& fname, const std::string& name )
-{
- // Check if objects exist
- if( this->m_ImageWriter.IsNull( ) )
- return( false );
- TImage* image = this->GetImage( name );
- if( image == NULL )
- return( false );
-
- // Configure writer
- this->m_ImageWriter->GetParameters( )->SetString( "FileName", fname );
- this->m_ImageWriter->SetInput( "Input", image );
-
- // Execute filter
- this->BlockWidget( );
- std::string err = this->m_ImageWriter->Update( );
- this->UnblockWidget( );
-
- // Get result, if any
- if( err != "" )
- {
-#ifdef cpPlugins_Interface_QT4
- if( this->m_Widget != NULL )
- QMessageBox::critical(
- this->m_Widget,
- QMessageBox::tr( "Error reading mesh." ),
- QMessageBox::tr( err.c_str( ) )
- );
-#else // cpPlugins_Interface_QT4
- std::cerr << "Error reading mesh: " << err << std::endl;
-#endif // cpPlugins_Interface_QT4
- return( false );
- }
- else
- return( true );
-}
-
-// -------------------------------------------------------------------------
-bool cpPlugins::Interface::Plugins::
-WriteImage( const std::string& name )
-{
- // Check if objects exist
- if( this->m_ImageWriter.IsNull( ) )
- return( false );
- TImage* image = this->GetImage( name );
- if( image == NULL )
- return( false );
-
- // Configure writer
- TProcessObject::DialogResult dret =
- this->m_ImageWriter->ExecConfigurationDialog( this->m_Widget );
- if( dret == TProcessObject::DialogResult_Cancel )
- return( "" );
- this->m_ImageWriter->SetInput( "Input", image );
-
- // Execute filter
- this->BlockWidget( );
- std::string err = this->m_ImageWriter->Update( );
- this->UnblockWidget( );
-
- // Get result, if any
- if( err != "" )
- {
-#ifdef cpPlugins_Interface_QT4
- if( this->m_Widget != NULL )
- QMessageBox::critical(
- this->m_Widget,
- QMessageBox::tr( "Error reading mesh." ),
- QMessageBox::tr( err.c_str( ) )
- );
-#else // cpPlugins_Interface_QT4
- std::cerr << "Error reading mesh: " << err << std::endl;
-#endif // cpPlugins_Interface_QT4
- return( false );
- }
- else
- return( true );
-}
-
-// -------------------------------------------------------------------------
-bool cpPlugins::Interface::Plugins::
-WriteMesh( const std::string& fname, const std::string& name )
-{
- // Check if objects exist
- if( this->m_MeshWriter.IsNull( ) )
- return( false );
- TMesh* mesh = this->GetMesh( name );
- if( mesh == NULL )
- return( false );
-
- // Configure writer
- this->m_MeshWriter->GetParameters( )->SetString( "FileName", fname );
- this->m_MeshWriter->SetInput( "Input", mesh );
-
- // Execute filter
- this->BlockWidget( );
- std::string err = this->m_MeshWriter->Update( );
- this->UnblockWidget( );
-
- // Get result, if any
- if( err != "" )
- {
-#ifdef cpPlugins_Interface_QT4
- if( this->m_Widget != NULL )
- QMessageBox::critical(
- this->m_Widget,
- QMessageBox::tr( "Error reading mesh." ),
- QMessageBox::tr( err.c_str( ) )
- );
-#else // cpPlugins_Interface_QT4
- std::cerr << "Error reading mesh: " << err << std::endl;
-#endif // cpPlugins_Interface_QT4
- return( false );
- }
- else
- return( true );
-}
-
-// -------------------------------------------------------------------------
-bool cpPlugins::Interface::Plugins::
-WriteMesh( const std::string& name )
-{
- // Check if objects exist
- if( this->m_MeshWriter.IsNull( ) )
- return( false );
- TMesh* mesh = this->GetMesh( name );
- if( mesh == NULL )
- return( false );
-
- // Configure writer
- TProcessObject::DialogResult dret =
- this->m_MeshWriter->ExecConfigurationDialog( this->m_Widget );
- if( dret == TProcessObject::DialogResult_Cancel )
- return( "" );
- this->m_MeshWriter->SetInput( "Input", mesh );
-
- // Execute filter
- this->BlockWidget( );
- std::string err = this->m_MeshWriter->Update( );
- this->UnblockWidget( );
-
- // Get result, if any
- if( err != "" )
- {
-#ifdef cpPlugins_Interface_QT4
- if( this->m_Widget != NULL )
- QMessageBox::critical(
- this->m_Widget,
- QMessageBox::tr( "Error reading mesh." ),
- QMessageBox::tr( err.c_str( ) )
- );
-#else // cpPlugins_Interface_QT4
- std::cerr << "Error reading mesh: " << err << std::endl;
-#endif // cpPlugins_Interface_QT4
- return( false );
- }
- else
- return( true );
-}
-
-// -------------------------------------------------------------------------
-void cpPlugins::Interface::Plugins::
-ClearDataObjects( )
-{
- this->m_Objects.clear( );
-}
-
-// -------------------------------------------------------------------------
-void cpPlugins::Interface::Plugins::
-DeleteDataObject( const std::string& name )
-{
- auto i = this->m_Objects.find( name );
- if( i != this->m_Objects.end( ) )
- {
- this->m_Objects.erase( i );
-
- // Get children
- std::vector< std::string > children;
- for( i = this->m_Objects.begin( ); i != this->m_Objects.end( ); ++i )
- if( i->second.first == name )
- children.push_back( i->first );
-
- // Erase children
- auto c = children.begin( );
- for( ; c != children.end( ); ++c )
- this->DeleteDataObject( *c );
-
- } // fi
-}
-
-// -------------------------------------------------------------------------
-std::string cpPlugins::Interface::Plugins::
-GetParent( const std::string& name ) const
-{
- auto i = this->m_Objects.find( name );
- if( i != this->m_Objects.end( ) )
- return( i->second.first );
- else
- return( "" );
-}
-
-// -------------------------------------------------------------------------
-const cpPlugins::Interface::Plugins::
-TTree& cpPlugins::Interface::Plugins::
-GetDataObjects( ) const
-{
- return( this->m_Objects );
-}
-
-// -------------------------------------------------------------------------
-cpPlugins::Interface::Plugins::
-TDataObject* cpPlugins::Interface::Plugins::
-GetDataObject( const std::string& name )
-{
- auto i = this->m_Objects.find( name );
- if( i != this->m_Objects.end( ) )
- return( dynamic_cast< TDataObject* >( i->second.second.GetPointer( ) ) );
- else
- return( NULL );
-}
-
-// -------------------------------------------------------------------------
-const cpPlugins::Interface::Plugins::
-TDataObject* cpPlugins::Interface::Plugins::
-GetDataObject( const std::string& name ) const
-{
- auto i = this->m_Objects.find( name );
- if( i != this->m_Objects.end( ) )
- return(
- dynamic_cast< const TDataObject* >( i->second.second.GetPointer( ) )
- );
- else
- return( NULL );
-}
-
-// -------------------------------------------------------------------------
-cpPlugins::Interface::Plugins::
-TImage* cpPlugins::Interface::Plugins::
-GetImage( const std::string& name )
-{
- auto i = this->m_Objects.find( name );
- if( i != this->m_Objects.end( ) )
- return( dynamic_cast< TImage* >( i->second.second.GetPointer( ) ) );
- else
- return( NULL );
-}
-
-// -------------------------------------------------------------------------
-const cpPlugins::Interface::Plugins::
-TImage* cpPlugins::Interface::Plugins::
-GetImage( const std::string& name ) const
-{
- auto i = this->m_Objects.find( name );
- if( i != this->m_Objects.end( ) )
- return( dynamic_cast< const TImage* >( i->second.second.GetPointer( ) ) );
- else
- return( NULL );
-}
-
-// -------------------------------------------------------------------------
-cpPlugins::Interface::Plugins::
-TMesh* cpPlugins::Interface::Plugins::
-GetMesh( const std::string& name )
-{
- auto i = this->m_Objects.find( name );
- if( i != this->m_Objects.end( ) )
- return( dynamic_cast< TMesh* >( i->second.second.GetPointer( ) ) );
- else
- return( NULL );
-}
-
-// -------------------------------------------------------------------------
-const cpPlugins::Interface::Plugins::
-TMesh* cpPlugins::Interface::Plugins::
-GetMesh( const std::string& name ) const
-{
- auto i = this->m_Objects.find( name );
- if( i != this->m_Objects.end( ) )
- return( dynamic_cast< const TMesh* >( i->second.second.GetPointer( ) ) );
- else
- return( NULL );
-}
-
-// -------------------------------------------------------------------------
-bool cpPlugins::Interface::Plugins::
-ActivateFilter( const std::string& name )
-{
- this->m_ActiveFilter = this->m_Interface.CreateProcessObject( name );
- if( this->m_ActiveFilter.IsNotNull( ) )
- {
- this->m_ActiveFilter->SetPlugins( this );
- this->m_ActiveFilterOutputs.clear( );
- auto i = this->m_Interactors.begin( );
- for( ; i != this->m_Interactors.end( ); ++i )
- this->m_ActiveFilter->AddInteractor( *i );
- return( true );
- }
- else
- return( false );
-}
-
-// -------------------------------------------------------------------------
-void cpPlugins::Interface::Plugins::
-DeactivateFilter( )
-{
- this->m_ActiveFilter = NULL;
-}
-
-// -------------------------------------------------------------------------
-bool cpPlugins::Interface::Plugins::
-HasActiveFilter( ) const
-{
- return( this->m_ActiveFilter.IsNotNull( ) );
-}
-
-// -------------------------------------------------------------------------
-bool cpPlugins::Interface::Plugins::
-IsActiveFilterInteractive( ) const
-{
- if( this->m_ActiveFilter.IsNotNull( ) )
- return( this->m_ActiveFilter->IsInteractive( ) );
- else
- return( false );
-}
-
-// -------------------------------------------------------------------------
-unsigned int cpPlugins::Interface::Plugins::
-GetNumberOfInputsInActiveFilter( ) const
-{
- if( this->m_ActiveFilter.IsNotNull( ) )
- return( this->m_ActiveFilter->GetNumberOfInputs( ) );
- else
- return( 0 );
-}
-
-// -------------------------------------------------------------------------
-unsigned int cpPlugins::Interface::Plugins::
-GetNumberOfOutputsInActiveFilter( ) const
-{
- if( this->m_ActiveFilter.IsNotNull( ) )
- return( this->m_ActiveFilter->GetNumberOfOutputs( ) );
- else
- return( 0 );
-}
-
-// -------------------------------------------------------------------------
-std::vector< std::string > cpPlugins::Interface::Plugins::
-GetActiveFilterInputsNames( ) const
-{
- if( this->m_ActiveFilter.IsNotNull( ) )
- return( this->m_ActiveFilter->GetInputsNames( ) );
- else
- return( std::vector< std::string >( ) );
-}
-
-// -------------------------------------------------------------------------
-std::vector< std::string > cpPlugins::Interface::Plugins::
-GetActiveFilterOutputsNames( ) const
-{
- if( this->m_ActiveFilter.IsNotNull( ) )
- return( this->m_ActiveFilter->GetOutputsNames( ) );
- else
- return( std::vector< std::string >( ) );
-}
-
-// -------------------------------------------------------------------------
-void cpPlugins::Interface::Plugins::
-ConnectInputInActiveFilter(
- const std::string& object_name, const std::string& input
- )
-{
- if( this->m_ActiveFilter.IsNotNull( ) )
- {
- TDataObject* dobj = this->GetDataObject( object_name );
- if( dobj != NULL )
- this->m_ActiveFilter->SetInput( input, dobj );
-
- } // fi
-}
-
-// -------------------------------------------------------------------------
-void cpPlugins::Interface::Plugins::
-SetOutputNameInActiveFilter(
- const std::string& new_name, const std::string& output
- )
-{
- this->m_ActiveFilterOutputs[ output ] = new_name;
-}
-
-// -------------------------------------------------------------------------
-cpPlugins::Interface::Plugins::
-TParameters* cpPlugins::Interface::Plugins::
-GetActiveFilterParameters( )
-{
- if( this->m_ActiveFilter.IsNotNull( ) )
- return( this->m_ActiveFilter->GetParameters( ) );
- else
- return( NULL );
-}
-
-// -------------------------------------------------------------------------
-const cpPlugins::Interface::Plugins::
-TParameters* cpPlugins::Interface::Plugins::
-GetActiveFilterParameters( ) const
-{
- if( this->m_ActiveFilter.IsNotNull( ) )
- return( this->m_ActiveFilter->GetParameters( ) );
- else
- return( NULL );
-}
-
-// -------------------------------------------------------------------------
-cpPlugins::Interface::Plugins::
-TProcessObject::DialogResult cpPlugins::Interface::Plugins::
-ConfigureActiveFilter( )
-{
- if( this->m_ActiveFilter.IsNotNull( ) )
- return( this->m_ActiveFilter->ExecConfigurationDialog( this->m_Widget ) );
- else
- return( TProcessObject::DialogResult_Cancel );
-}
-
-// -------------------------------------------------------------------------
-std::string cpPlugins::Interface::Plugins::
-UpdateActiveFilter( std::vector< std::string >& outputs )
-{
- // Execute filter
- this->BlockWidget( );
- std::string err = this->m_ActiveFilter->Update( );
- this->UnblockWidget( );
-
- // Associate outputs
- outputs.clear( );
- if( err == "" )
- {
- std::string parent = "";
- if( this->GetNumberOfInputsInActiveFilter( ) > 0 )
- {
- std::string input = this->m_ActiveFilter->GetInputsNames( )[ 0 ];
- parent =
- this->m_ActiveFilter->GetInput< TDataObject >( input )->GetName( );
-
- } // fi
-
- auto i = this->m_ActiveFilterOutputs.begin( );
- for( ; i != this->m_ActiveFilterOutputs.end( ); ++i )
- {
- TDataObject* out =
- this->m_ActiveFilter->GetOutput< TDataObject >( i->first );
- out->SetName( i->second );
- outputs.push_back( out->GetName( ) );
- this->_InsertNewData( out, parent );
-
- } // rof
-
- } // fi
- return( err );
-}
-
-// -------------------------------------------------------------------------
-void cpPlugins::Interface::Plugins::
-_UpdateLoadedPluginsInformation( )
-{
- typedef TInterface::TClasses _C;
-
- this->m_Filters.clear( );
- _C& classes = this->m_Interface.GetClasses( );
- for( _C::const_iterator i = classes.begin( ); i != classes.end( ); ++i )
- {
- TProcessObject::Pointer o =
- this->m_Interface.CreateProcessObject( i->first );
- std::string name = o->GetClassName( );
- std::string category = o->GetClassCategory( );
- if( category == "ImageReader" )
- this->m_ImageReader = o;
- else if( category == "ImageWriter" )
- this->m_ImageWriter = o;
- else if( category == "MeshReader" )
- this->m_MeshReader = o;
- else if( category == "MeshWriter" )
- this->m_MeshWriter = o;
- else if( category == "DicomSeriesReader" )
- this->m_DicomSeriesReader = o;
- else
- this->m_Filters[ category ].insert( name );
-
- } // rof
-}
-
-// -------------------------------------------------------------------------
-bool cpPlugins::Interface::Plugins::
-_InsertNewData( TDataObject* dobj, const std::string& parent )
-{
- std::string name = dobj->GetName( );
- auto i = this->m_Objects.find( name );
- bool ret = true;
- if( i == this->m_Objects.end( ) )
- {
- if( parent != "" )
- {
- auto j = this->m_Objects.find( parent );
- if( j != this->m_Objects.end( ) )
- this->m_Objects[ name ] = TTreeNode( parent, dobj );
- else
- ret = false;
- }
- else
- this->m_Objects[ name ] = TTreeNode( "", dobj );
- }
- else
- i->second.second = dobj;
-
- if( !ret )
- {
-#ifdef cpPlugins_Interface_QT4
- if( this->m_Widget != NULL )
- QMessageBox::critical(
- this->m_Widget,
- QMessageBox::tr( "Error inserting data." ),
- QMessageBox::tr( "Given parent does not exists." )
- );
-#else // cpPlugins_Interface_QT4
- std::cerr
- << "Error inserting data: Given parent does not exists."
- << std::endl;
-#endif // cpPlugins_Interface_QT4
} // fi
- return( ret );
+ this->m_DataObjects[ dobj->GetName( ) ] = _TTreeNode( parent, dobj );
+ return( true );
}
// eof - $RCSfile$