#include #include #include #include #include #include #include #include // ------------------------------------------------------------------------- PipelineEditor:: 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->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 ) ) ); this->connect( this->m_UI->actionPrintExecutionInformation, SIGNAL( triggered( bool ) ), this, SLOT( _slotPrintExecutionInformation( bool ) ) ); // Load command-line given workspace (if any) if( argc > 1 ) this->_loadWorkspace( argv[ 1 ] ); } // ------------------------------------------------------------------------- PipelineEditor:: ~PipelineEditor( ) { delete this->m_UI; } // ------------------------------------------------------------------------- void PipelineEditor:: _slotView( const std::string& name, bool show ) { typedef cpExtensions::QT::ActorsWidgetInterface _TViewer; // Get filter parameters std::vector< std::string > tokens = cpPlugins::OS::String::Tokenize( name, "@" ); if( tokens.size( ) != 2 ) return; auto filter_name = tokens[ 1 ]; auto output_name = tokens[ 0 ]; // Process data if( show ) { try { auto ws = this->workspace( ); 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 ) && viewer != NULL ) { 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 if( image != 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 ) { this->m_Blocker.block( ); auto mpr = dynamic_cast< cpExtensions::QT::SimpleMPRWidget* >( viewer ); if( mpr != NULL ) mpr->Add( mesh, name ); this->m_Blocker.unblock( ); } // fi } catch( std::exception& err ) { QMessageBox::critical( NULL, QMessageBox::tr( "Error showing data" ), QMessageBox::tr( err.what( ) ) ); } // yrt } // fi } // ------------------------------------------------------------------------- void PipelineEditor:: _slotPrintExecutionInformation( bool show ) { if( this->m_Workspace.IsNotNull( ) ) this->m_Workspace->SetPrintExecution( show ); } // ------------------------------------------------------------------------- #include cpBaseQtApplication_Main( PipelineEditor ); cpBaseQtApplication_MainComplement; // eof - $RCSfile$