X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=appli%2FPipelineEditor%2FPipelineEditor.cxx;h=f49c2a43ad05d1f542d7da7e357c017944687740;hb=4985f4ba986f600298676866c5099b2f84bee50b;hp=f646520e93159e9af103afc8ee7c2ce8d9dccfbd;hpb=28f9b7dc84eb4b09e985ad7e43a9f0001a6be928;p=cpPlugins.git diff --git a/appli/PipelineEditor/PipelineEditor.cxx b/appli/PipelineEditor/PipelineEditor.cxx index f646520..f49c2a4 100644 --- a/appli/PipelineEditor/PipelineEditor.cxx +++ b/appli/PipelineEditor/PipelineEditor.cxx @@ -1,70 +1,40 @@ -#include "PipelineEditor.h" -#include "ui_PipelineEditor.h" - -#include - -#include -#include +#include +#include +#include +#include +#include +#include #include #include -#include // ------------------------------------------------------------------------- PipelineEditor:: -PipelineEditor( int argc, char* argv[], QApplication* app, QWidget* parent ) - : Superclass( argc, argv, app, parent ), +PipelineEditor( int argc, char* argv[], QWidget* parent ) + : Superclass( argc, argv, parent ), m_UI( new Ui::PipelineEditor ) { // Basic configuration + this->m_BaseWindowTitle = "PipelineEditor - "; this->m_UI->setupUi( this ); - this->_Configure( - this->m_UI->LoadedPlugins, - this->m_UI->Viewer, - this->m_UI->Canvas->editor( ) + this->setCanvas( this->m_UI->Canvas ); + this->setNavigator( this->m_UI->Navigator ); + this->m_UI->Navigator->Update( ); + + // Connect slots <-> signals + cpBaseQtApplication_ConnectAction( actionLoadDirectory, _loadPluginsFromPath ); + cpBaseQtApplication_ConnectAction( actionLoadLibrary, _loadPlugins ); + cpBaseQtApplication_ConnectAction( actionOpenWorkspace, _loadWorkspace ); + cpBaseQtApplication_ConnectAction( actionSaveWorkspace, _saveWorkspace ); + cpBaseQtApplication_ConnectAction( actionSaveWorkspaceAs, _saveWorkspace ); + cpBaseQtApplication_ConnectAction( actionActorsProperties, _actorsProperties ); + this->m_UI->Canvas->connectOutputPortSlot( + this, SLOT( _slotView( const std::string&, bool ) ) ); - // Connect actions to slots - this->connect( - this->m_UI->ButtonLoadPluginsFile, SIGNAL( clicked( ) ), - this, SLOT( _InteractiveLoadPlugins( ) ) - ); - this->connect( - this->m_UI->ButtonLoadPluginsPath, SIGNAL( clicked( ) ), - this, SLOT( _InteractiveLoadPluginsFromPath( ) ) - ); - this->connect( - this->m_UI->ActionOpenWorkspace, SIGNAL( triggered( ) ), - this, SLOT( _InteractiveLoadWorkspace( ) ) - ); - this->connect( - this->m_UI->ActionSaveWorkspace, SIGNAL( triggered( ) ), - this, SLOT( _InteractiveSaveWorkspace( ) ) - ); - this->connect( - this->m_UI->Canvas->editor( ), - SIGNAL( execFilter( const std::string& ) ), - this, - SLOT( _ExecFilter( const std::string& ) ) - ); - this->connect( - this->m_UI->Canvas->editor( ), - SIGNAL( showFilterOutput( const std::string&, const std::string& ) ), - this, - SLOT( _ShowFilterOutput( const std::string&, const std::string& ) ) - ); - this->connect( - this->m_UI->Canvas->editor( ), - SIGNAL( hideFilterOutput( const std::string&, const std::string& ) ), - this, - SLOT( _HideFilterOutput( const std::string&, const std::string& ) ) - ); - this->connect( - this->m_UI->Canvas->editor( ), - SIGNAL( visualPropertiesFilterOutput( const std::string&, const std::string& ) ), - this, - SLOT( _PropertiesFilterOutput( const std::string&, const std::string& ) ) - ); + // Load command-line given workspace (if any) + if( argc > 1 ) + this->_loadWorkspace( argv[ 1 ] ); } // ------------------------------------------------------------------------- @@ -76,90 +46,101 @@ PipelineEditor:: // ------------------------------------------------------------------------- void PipelineEditor:: -_ShowFilterOutput( - const std::string& filter_name, const std::string& output_name - ) +_slotView( const std::string& name, bool show ) { - // Update filter, if needed - this->_ExecFilter( filter_name ); - - // Get output - auto output = this->m_Workspace.GetOutput( filter_name, output_name ); - if( output == NULL ) - { - QMessageBox::critical( - this, - QMessageBox::tr( "Error showing data" ), - QMessageBox::tr( "Unknown port name." ) - ); - return; - - } // fi - - // Create and associate actor - this->_Block( ); - this->m_UI->Viewer->AddActor( output->CreateVTKActor( ) ); - this->_UnBlock( ); -} - -// ------------------------------------------------------------------------- -void PipelineEditor:: -_HideFilterOutput( - const std::string& filter_name, const std::string& output_name - ) -{ - // Get output /* TODO - auto filter = this->m_Workspace.GetFilter( filter_name ); - if( filter != NULL ) + typedef cpExtensions::QT::ActorsWidgetInterface _TViewer; + + // Get filter parameters + std::vector< std::string > tokens; + cpPlugins::Tokenize( tokens, name, "@" ); + if( tokens.size( ) != 2 ) + return; + auto filter_name = tokens[ 1 ]; + auto output_name = tokens[ 0 ]; + + // Process data + if( show ) { - auto output = filter->GetOutputData( output_name ); - if( output != NULL ) + try { - std::string data_name = output_name + "@" + filter_name; - this->m_UI->Viewer->HideData( data_name ); + auto ws = this->workspace( this->m_ActiveWS ); + auto filter = ws->GetFilter( filter_name ); + cpBaseQtApplication_Execute( filter->Update( ) ); + auto image = filter->GetOutputData< vtkImageData >( output_name ); + auto mesh = filter->GetOutputData< vtkPolyData >( output_name ); + _TViewer* viewer = NULL; + if( image != NULL ) + { + int dim = image->GetDataDimension( ); + if( dim == 2 ) + viewer = + this->_configureViewer< cpExtensions::QT::ImageWidget >( + this->m_UI->Viewer + ); + else if( dim == 3 ) + viewer = + this->_configureViewer< cpExtensions::QT::SimpleMPRWidget >( + this->m_UI->Viewer + ); + } + else if( mesh != NULL ) + { + viewer = + this->_configureViewer< cpExtensions::QT::SimpleMPRWidget >( + this->m_UI->Viewer + ); } // fi + if( + dynamic_cast< QWidget* >( viewer ) != + dynamic_cast< QWidget* >( this->m_UI->Viewer ) + ) + { + delete this->m_UI->Viewer; + this->m_UI->Viewer = dynamic_cast< QWidget* >( viewer ); + this->m_UI->MainSplitter->insertWidget( 0, this->m_UI->Viewer ); + this->setViewer( viewer ); } // fi - */ -} - -// ------------------------------------------------------------------------- -void PipelineEditor:: -_PropertiesFilterOutput( - const std::string& filter_name, const std::string& output_name - ) -{ - /* TODO - auto filter = this->m_Workspace.GetFilter( filter_name ); - if( filter != NULL ) - { - auto output = filter->GetOutputData< vtkPolyData >( output_name ); - if( output != NULL ) + if( image != NULL ) { - auto actor = this->m_UI->Viewer->GetActor( output ); - if( actor != NULL ) + this->m_Blocker.block( ); + auto mpr = dynamic_cast< cpExtensions::QT::SimpleMPRWidget* >( viewer ); + auto imv = dynamic_cast< cpExtensions::QT::ImageWidget* >( viewer ); + if( mpr != NULL ) + mpr->SetImage( image, name ); + else if( imv != NULL ) + imv->SetImage( image, name ); + this->m_Blocker.unblock( ); + } + else if( mesh != NULL ) { - cpExtensions::QT::PropertyWidget* wdg = - new cpExtensions::QT::PropertyWidget( NULL ); - wdg->SetProp( actor ); - wdg->SetRenderWindow( - this->m_UI->Viewer->GetInteractor( 3 )->GetRenderWindow( ) - ); - wdg->show( ); + this->m_Blocker.block( ); + auto mpr = dynamic_cast< cpExtensions::QT::SimpleMPRWidget* >( viewer ); + if( mpr != NULL ) + mpr->Add( mesh, name ); + this->m_Blocker.unblock( ); } // fi } - else + catch( std::exception& err ) + { QMessageBox::critical( - this, + NULL, QMessageBox::tr( "Error showing data" ), - QMessageBox::tr( "No known VTK conversion!" ) + QMessageBox::tr( err.what( ) ) ); + } // yrt + } // fi */ } +// ------------------------------------------------------------------------- +#include +cpBaseQtApplication_Main( PipelineEditor ); +cpBaseQtApplication_MainComplement; + // eof - $RCSfile$