From: Leonardo Florez-Valencia Date: Tue, 22 Sep 2015 08:23:23 +0000 (+0200) Subject: ... X-Git-Tag: v0.1~369 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=132530e0876c10981f096abfea81d92ca840d333;p=cpPlugins.git ... --- diff --git a/appli/CMakeLists.txt b/appli/CMakeLists.txt index 6e05ded..7ca64d4 100644 --- a/appli/CMakeLists.txt +++ b/appli/CMakeLists.txt @@ -1,7 +1,7 @@ IF(BUILD_EXAMPLES) SUBDIRS( examples - #ImageMPR + ImageMPR ) ENDIF(BUILD_EXAMPLES) diff --git a/appli/ImageMPR/CMakeLists.txt b/appli/ImageMPR/CMakeLists.txt index 7d5ad93..a35c436 100644 --- a/appli/ImageMPR/CMakeLists.txt +++ b/appli/ImageMPR/CMakeLists.txt @@ -58,8 +58,8 @@ IF(USE_QT4) TARGET_LINK_LIBRARIES( ${App_NAME} ${QT_LIBRARIES} - cpExtensions - ##vtkGUISupportQt + cpExtensions + cpPlugins_Interface ) ENDIF(USE_QT4) diff --git a/appli/ImageMPR/ImageMPR.cxx b/appli/ImageMPR/ImageMPR.cxx index c4729f6..def9fc4 100644 --- a/appli/ImageMPR/ImageMPR.cxx +++ b/appli/ImageMPR/ImageMPR.cxx @@ -1,13 +1,12 @@ #include "ImageMPR.h" #include "ui_ImageMPR.h" +#include + #include #include -#include -#include #include -#include #include #ifdef _WIN32 @@ -26,8 +25,7 @@ ImageMPR::ImageMPR( QWidget* parent ) m_UI( new Ui::ImageMPR ), m_ImageReaderClass( "" ), m_ImageWriterClass( "" ), - m_InputImage( NULL ), - m_ParametersDlg( NULL ) + m_InputImage( NULL ) { this->m_UI->setupUi( this ); @@ -71,12 +69,6 @@ ImageMPR:: // Delete objects delete this->m_UI; delete this->m_MPR; - if( this->m_ParametersDlg != NULL ) - { - this->m_ParametersDlg->close( ); - delete this->m_ParametersDlg; - - } // fi } // ------------------------------------------------------------------------- @@ -140,159 +132,6 @@ _LoadPlugins( const std::string& filename ) return( true ); } -// ------------------------------------------------------------------------- -bool ImageMPR:: -_ParametersDialog( TPluginFilter* filter ) -{ - if( this->m_ParametersDlg != NULL ) - { - this->m_ParametersDlg->close( ); - delete this->m_ParametersDlg; - - } // fi - this->m_ParametersDlg = new QDialog( NULL ); - this->m_ParametersDlg->setWindowFlags( Qt::FramelessWindowHint ); - this->m_ParametersDlg->setWindowFlags( Qt::WindowTitleHint ); - - QGridLayout* gridLayout = new QGridLayout( this->m_ParametersDlg ); - QVBoxLayout* verticalLayout = new QVBoxLayout( ); - - // Put a title - QLabel* title = new QLabel( this->m_ParametersDlg ); - title->setText( filter->GetClassName( ).c_str( ) ); - verticalLayout->addWidget( title ); - - // Put values - TParameters parameters = filter->GetDefaultParameters( ); - std::vector< std::string > names = parameters.GetParameters( ); - std::vector< std::string >::const_iterator nIt = names.begin( ); - for( ; nIt != names.end( ); ++nIt ) - { - std::string par_name = *nIt; - TParameters::Type par_type = parameters.GetParameterType( par_name ); - - /* TODO - enum Type - { - String = 0, - Bool, - Int, - Uint, - Real, - Index, - Point, - StringList, - BoolList, - IntList, - UintList, - RealList, - IndexList, - PointList, - NoType - }; - */ - QHBoxLayout* horizontalLayout = new QHBoxLayout( ); - QLabel* label = new QLabel( this->m_ParametersDlg ); - label->setText( QString( par_name.c_str( ) ) ); - horizontalLayout->addWidget( label ); - - QWidget* w_input = NULL; - if( par_type == TParameters::Uint ) - { - QSpinBox* v_uint = - new QSpinBox( this->m_ParametersDlg ); - v_uint->setMinimum( -100 ); - v_uint->setMaximum( std::numeric_limits< int >::max( ) ); - v_uint->setValue( parameters.GetValueAsUint( par_name ) ); - v_uint->setObjectName( QString( par_name.c_str( ) ) ); - w_input = v_uint; - } - else if( par_type == TParameters::Int ) - { - QSpinBox* v_int = - new QSpinBox( this->m_ParametersDlg ); - v_int->setMinimum( -std::numeric_limits< int >::max( ) ); - v_int->setMaximum( std::numeric_limits< int >::max( ) ); - v_int->setValue( parameters.GetValueAsInt( par_name ) ); - v_int->setObjectName( QString( par_name.c_str( ) ) ); - w_input = v_int; - } - else if( par_type == TParameters::Real ) - { - QDoubleSpinBox* v_double = - new QDoubleSpinBox( this->m_ParametersDlg ); - v_double->setDecimals( 3 ); - v_double->setMinimum( -( std::numeric_limits< double >::max( ) ) ); - v_double->setMaximum( std::numeric_limits< double >::max( ) ); - v_double->setValue( parameters.GetValueAsReal( par_name ) ); - v_double->setObjectName( QString( par_name.c_str( ) ) ); - w_input = v_double; - - } // fi - - if( w_input != NULL ) - { - horizontalLayout->addWidget( w_input ); - verticalLayout->addLayout( horizontalLayout ); - - } // fi - - } // rof - - // Add buttons - QDialogButtonBox* bb = new QDialogButtonBox( - QDialogButtonBox::Ok | QDialogButtonBox::Cancel - ); - QObject::connect( - bb, SIGNAL( accepted( ) ), this->m_ParametersDlg, SLOT( accept( ) ) - ); - QObject::connect( - bb, SIGNAL( rejected( ) ), this->m_ParametersDlg, SLOT( reject( ) ) - ); - verticalLayout->addWidget( bb ); - gridLayout->addLayout( verticalLayout, 0, 0, 1, 1 ); - - // Execute - QMetaObject::connectSlotsByName( this->m_ParametersDlg ); - if( !( this->m_ParametersDlg->exec( ) ) ) - return( false ); - - // Get values back - nIt = names.begin( ); - for( ; nIt != names.end( ); ++nIt ) - { - std::string par_name = *nIt; - TParameters::Type par_type = parameters.GetParameterType( par_name ); - if( par_type == TParameters::Uint ) - { - QSpinBox* v_uint = - this->m_ParametersDlg->findChild< QSpinBox* >( par_name.c_str( ) ); - if( v_uint != NULL ) - parameters.SetValueAsUint( par_name, v_uint->value( ) ); - } - else if( par_type == TParameters::Int ) - { - QSpinBox* v_int = - this->m_ParametersDlg->findChild< QSpinBox* >( par_name.c_str( ) ); - if( v_int != NULL ) - parameters.SetValueAsInt( par_name, v_int->value( ) ); - } - else if( par_type == TParameters::Real ) - { - QDoubleSpinBox* v_double = - this->m_ParametersDlg->findChild< QDoubleSpinBox* >( - par_name.c_str( ) - ); - if( v_double != NULL ) - parameters.SetValueAsReal( par_name, v_double->value( ) ); - - } // fi - - } // rof - filter->SetParameters( parameters ); - return( true ); -} - // ------------------------------------------------------------------------- void ImageMPR:: _triggered_actionOpenPlugins( ) @@ -437,20 +276,35 @@ _triggered_actionImageToImage( ) // Configure filter TPluginFilter::Pointer filter = this->m_Plugins.CreateProcessObject( name ); - if( !( this->_ParametersDialog( filter ) ) ) + TParameters parameters = filter->GetDefaultParameters( ); + bool dlg_ok = + cpPlugins::Interface::ParametersQtDialog( + parameters, filter->GetClassName( ) + ); + if( !dlg_ok ) return; // Execute filter + filter->SetParameters( parameters ); filter->SetInput( 0, this->m_InputImage ); - filter->Update( ); + std::string err = filter->Update( ); // Update image - TPluginImage* result = - dynamic_cast< TPluginImage* >( filter->GetOutput( 0 ) ); - result->DisconnectPipeline( ); - this->m_InputImage = result; - if( this->m_InputImage.IsNotNull( ) ) - this->m_MPR->SetImage( this->m_InputImage->GetVTKImageData( ) ); + if( err == "" ) + { + TPluginImage* result = + dynamic_cast< TPluginImage* >( filter->GetOutput( 0 ) ); + result->DisconnectPipeline( ); + this->m_InputImage = result; + if( this->m_InputImage.IsNotNull( ) ) + this->m_MPR->SetImage( this->m_InputImage->GetVTKImageData( ) ); + } + else + QMessageBox::critical( + this, + tr( "Error executing filter" ), + tr( err.c_str( ) ) + ); } // ------------------------------------------------------------------------- @@ -465,6 +319,41 @@ _triggered_actionImageToMesh( ) if( action == NULL ) return; std::string name = action->text( ).toStdString( ); + + // Configure filter + TPluginFilter::Pointer filter = + this->m_Plugins.CreateProcessObject( name ); + TParameters parameters = filter->GetDefaultParameters( ); + bool dlg_ok = + cpPlugins::Interface::ParametersQtDialog( + parameters, filter->GetClassName( ) + ); + if( !dlg_ok ) + return; + + // Execute filter + filter->SetParameters( parameters ); + filter->SetInput( 0, this->m_InputImage ); + std::string err = filter->Update( ); + + // Update image + if( err == "" ) + { + /* TODO + TPluginImage* result = + dynamic_cast< TPluginImage* >( filter->GetOutput( 0 ) ); + result->DisconnectPipeline( ); + this->m_InputImage = result; + if( this->m_InputImage.IsNotNull( ) ) + this->m_MPR->SetImage( this->m_InputImage->GetVTKImageData( ) ); + */ + } + else + QMessageBox::critical( + this, + tr( "Error executing filter" ), + tr( err.c_str( ) ) + ); } // eof - $RCSfile$ diff --git a/appli/ImageMPR/ImageMPR.h b/appli/ImageMPR/ImageMPR.h index b0ba3c4..1418bf6 100644 --- a/appli/ImageMPR/ImageMPR.h +++ b/appli/ImageMPR/ImageMPR.h @@ -6,7 +6,6 @@ #include // Qt stuff -#include #include // vtk stuff @@ -52,7 +51,6 @@ public: protected: bool _LoadPlugins( const std::string& filename ); - bool _ParametersDialog( TPluginFilter* filter ); private slots: void _triggered_actionOpenPlugins( ); @@ -84,8 +82,6 @@ private: vtkSmartPointer< vtkPolyDataMapper > m_InputMeshMapper; vtkSmartPointer< vtkActor > m_InputMeshActor; - QDialog* m_ParametersDlg; - /* TODO vtkSmartPointer< vtkOrientationMarkerWidget > m_3DOrientationWidget; */ diff --git a/lib/cpPlugins/Interface/CMakeLists.txt b/lib/cpPlugins/Interface/CMakeLists.txt index f8a6ff7..36dc3f8 100644 --- a/lib/cpPlugins/Interface/CMakeLists.txt +++ b/lib/cpPlugins/Interface/CMakeLists.txt @@ -4,12 +4,64 @@ SET(LIBRARY_NAME cpPlugins_Interface) ## = Source code = ## =============== -FILE(GLOB LIB_HEADERS_H "*.h") -FILE(GLOB LIB_HEADERS_HPP "*.hpp") -FILE(GLOB LIB_HEADERS_HXX "*.hxx") -FILE(GLOB LIB_SOURCES_C "*.c") -FILE(GLOB LIB_SOURCES_CPP "*.cpp") -FILE(GLOB LIB_SOURCES_CXX "*.cxx") +SET( + LIB_HEADERS_H + BaseProcessObjects.h + DataObject.h + Image.h + Interface.h + Macros.h + Mesh.h + Object.h + Parameters.h + ProcessObject.h + ) + +SET( + LIB_HEADERS_HPP + ) + +SET( + LIB_HEADERS_HXX + Image.hxx + Mesh.hxx + Parameters.hxx + ProcessObject.hxx + ) + +SET( + LIB_SOURCES_C + ) +SET( + LIB_SOURCES_CPP + ) + +SET( + LIB_SOURCES_CXX + BaseProcessObjects.cxx + DataObject.cxx + Image.cxx + Instances_itkImage.cxx + Instances_itkMesh.cxx + Interface.cxx + Mesh.cxx + Object.cxx + Parameters.cxx + ProcessObject.cxx + ) + +IF(USE_QT4) + SET( + LIB_HEADERS_H + ${LIB_HEADERS_H} + ParametersQtDialog.h + ) + SET( + LIB_SOURCES_CXX + ${LIB_SOURCES_CXX} + ParametersQtDialog.cxx + ) +ENDIF(USE_QT4) ## ===================== ## = Compilation rules = @@ -32,6 +84,7 @@ GENERATE_EXPORT_HEADER( TARGET_LINK_LIBRARIES( ${LIBRARY_NAME} cpPlugins_Pluma + ${QT_LIBRARIES} ${ITK_LIBRARIES} ${VTK_LIBRARIES} ) diff --git a/lib/cpPlugins/Interface/ParametersQtDialog.cxx b/lib/cpPlugins/Interface/ParametersQtDialog.cxx new file mode 100644 index 0000000..819abd3 --- /dev/null +++ b/lib/cpPlugins/Interface/ParametersQtDialog.cxx @@ -0,0 +1,169 @@ +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +// ------------------------------------------------------------------------- +bool cpPlugins::Interface:: +ParametersQtDialog( + Parameters& parameters, const std::string& title, QWidget* parent + ) +{ + // Create dialog with a simple layout + QDialog* dlg = new QDialog( parent ); + dlg->setWindowFlags( Qt::FramelessWindowHint ); + dlg->setWindowFlags( Qt::WindowTitleHint ); + QGridLayout* gridLayout = new QGridLayout( dlg ); + QVBoxLayout* verticalLayout = new QVBoxLayout( ); + + // Put a title + QLabel* dlg_title = new QLabel( dlg ); + dlg_title->setText( title.c_str( ) ); + verticalLayout->addWidget( dlg_title ); + + // Put values + std::vector< std::string > names = parameters.GetParameters( ); + std::vector< std::string >::const_iterator nIt = names.begin( ); + for( ; nIt != names.end( ); ++nIt ) + { + Parameters::Type pt = parameters.GetParameterType( *nIt ); + + /* TODO + enum Type + { + Bool, + Index, + Point, + StringList, + BoolList, + IntList, + UintList, + RealList, + IndexList, + PointList, + NoType + }; + */ + QWidget* w_input = NULL; + if( pt == Parameters::String ) + { + QLineEdit* v_string = new QLineEdit( dlg ); + v_string->setText( "Enter some text!!!" ); + w_input = v_string; + } + else if( pt == Parameters::Bool ) + { + QCheckBox* v_bool = new QCheckBox( dlg ); + v_bool->setText( "[ON/OFF]" ); + v_bool->setChecked( parameters.GetValueAsBool( *nIt ) ); + w_input = v_bool; + } + else if( pt == Parameters::Uint ) + { + QSpinBox* v_uint = new QSpinBox( dlg ); + v_uint->setMinimum( 0 ); + v_uint->setMaximum( std::numeric_limits< int >::max( ) ); + v_uint->setValue( parameters.GetValueAsUint( *nIt ) ); + w_input = v_uint; + } + else if( pt == Parameters::Int ) + { + QSpinBox* v_int = new QSpinBox( dlg ); + v_int->setMinimum( -std::numeric_limits< int >::max( ) ); + v_int->setMaximum( std::numeric_limits< int >::max( ) ); + v_int->setValue( parameters.GetValueAsInt( *nIt ) ); + w_input = v_int; + } + else if( pt == Parameters::Real ) + { + QDoubleSpinBox* v_double = new QDoubleSpinBox( dlg ); + v_double->setDecimals( 3 ); + v_double->setMinimum( -std::numeric_limits< double >::max( ) ); + v_double->setMaximum( std::numeric_limits< double >::max( ) ); + v_double->setValue( parameters.GetValueAsReal( *nIt ) ); + w_input = v_double; + + } // fi + + // Ok, a representation was created + if( w_input != NULL ) + { + w_input->setObjectName( QString( nIt->c_str( ) ) ); + + QHBoxLayout* horizontalLayout = new QHBoxLayout( ); + QLabel* label = new QLabel( dlg ); + label->setText( QString( nIt->c_str( ) ) ); + horizontalLayout->addWidget( label ); + horizontalLayout->addWidget( w_input ); + verticalLayout->addLayout( horizontalLayout ); + + } // fi + + } // rof + + // Add buttons + QDialogButtonBox* bb = new QDialogButtonBox( + QDialogButtonBox::Ok | QDialogButtonBox::Cancel + ); + QObject::connect( bb, SIGNAL( accepted( ) ), dlg, SLOT( accept( ) ) ); + QObject::connect( bb, SIGNAL( rejected( ) ), dlg, SLOT( reject( ) ) ); + verticalLayout->addWidget( bb ); + gridLayout->addLayout( verticalLayout, 0, 0, 1, 1 ); + + // Execute + QMetaObject::connectSlotsByName( dlg ); + if( !( dlg->exec( ) ) ) + return( false ); + + // Get values back + nIt = names.begin( ); + for( ; nIt != names.end( ); ++nIt ) + { + Parameters::Type pt = parameters.GetParameterType( *nIt ); + if( pt == Parameters::String ) + { + QLineEdit* v_string = dlg->findChild< QLineEdit* >( nIt->c_str( ) ); + if( v_string != NULL ) + parameters.SetValueAsString( *nIt, v_string->text( ).toStdString( ) ); + } + else if( pt == Parameters::Bool ) + { + QCheckBox* v_bool = dlg->findChild< QCheckBox* >( nIt->c_str( ) ); + if( v_bool != NULL ) + parameters.SetValueAsBool( *nIt, v_bool->isChecked( ) ); + } + else if( pt == Parameters::Uint ) + { + QSpinBox* v_uint = dlg->findChild< QSpinBox* >( nIt->c_str( ) ); + if( v_uint != NULL ) + parameters.SetValueAsUint( *nIt, v_uint->value( ) ); + } + else if( pt == Parameters::Int ) + { + QSpinBox* v_int = dlg->findChild< QSpinBox* >( nIt->c_str( ) ); + if( v_int != NULL ) + parameters.SetValueAsInt( *nIt, v_int->value( ) ); + } + else if( pt == Parameters::Real ) + { + QDoubleSpinBox* v_double = + dlg->findChild< QDoubleSpinBox* >( nIt->c_str( ) ); + if( v_double != NULL ) + parameters.SetValueAsReal( *nIt, v_double->value( ) ); + + } // fi + + } // rof + return( true ); +} + +// eof - $RCSfile$ diff --git a/lib/cpPlugins/Interface/ParametersQtDialog.h b/lib/cpPlugins/Interface/ParametersQtDialog.h new file mode 100644 index 0000000..daf2517 --- /dev/null +++ b/lib/cpPlugins/Interface/ParametersQtDialog.h @@ -0,0 +1,25 @@ +#ifndef __CPPLUGINS__INTERFACE__PARAMETERSQTDIALOG__H__ +#define __CPPLUGINS__INTERFACE__PARAMETERSQTDIALOG__H__ + +#include +#include + +class QWidget; + +namespace cpPlugins +{ + namespace Interface + { + bool cpPlugins_Interface_EXPORT ParametersQtDialog( + Parameters& parameters, + const std::string& title, + QWidget* parent = NULL + ); + + } // ecapseman + +} // ecapseman + +#endif // __CPPLUGINS__INTERFACE__PARAMETERSQTDIALOG__H__ + +// eof - $RCSfile$ diff --git a/lib/cpPlugins/Plugins/MarchingCubes.cxx b/lib/cpPlugins/Plugins/MarchingCubes.cxx index 8187b42..ca6e5bf 100644 --- a/lib/cpPlugins/Plugins/MarchingCubes.cxx +++ b/lib/cpPlugins/Plugins/MarchingCubes.cxx @@ -13,6 +13,7 @@ MarchingCubes( ) m_Algorithm( NULL ) { this->m_ClassName = "cpPlugins::MarchingCubes"; + this->m_ClassCategory = "ImageToMeshFilter"; this->SetNumberOfInputs( 1 ); this->SetNumberOfOutputs( 1 );