X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpPlugins%2FPlugins%2FBasicFilters%2FMacheteFilter.cxx;h=8116e211ff32895d1e5f6cf2a860de75381fede9;hb=83e946f1e96c001dde06a2785473d08468e28b2e;hp=3eb60061e0f18d4ba7e0e8dcb19fc2e143361dd2;hpb=003b7bc4f88cbe4aa6cc27fcd16b8cda94eba9be;p=cpPlugins.git diff --git a/lib/cpPlugins/Plugins/BasicFilters/MacheteFilter.cxx b/lib/cpPlugins/Plugins/BasicFilters/MacheteFilter.cxx index 3eb6006..8116e21 100644 --- a/lib/cpPlugins/Plugins/BasicFilters/MacheteFilter.cxx +++ b/lib/cpPlugins/Plugins/BasicFilters/MacheteFilter.cxx @@ -1,25 +1,110 @@ #include "MacheteFilter.h" +#include +#include + #include #include #include #include +#include +#include #include #include -#include #include #include #include #include +#ifdef cpPlugins_Interface_QT4 +#include + +// ------------------------------------------------------------------------- +cpPlugins::BasicFilters::MacheteFilter_Dialog:: +MacheteFilter_Dialog( + QWidget* parent, MacheteFilter* filter, Qt::WindowFlags f + ) + : QDialog( parent, f | Qt::WindowStaysOnTopHint ), + m_Filter( filter ) +{ + this->m_Title = new QLabel( this ); + this->m_Title->setText( "Execute machete filter" ); + + this->m_MainLayout = new QGridLayout( this ); + this->m_ToolsLayout = new QVBoxLayout( ); + this->m_ToolsLayout->addWidget( this->m_Title ); + this->m_MainLayout->addLayout( this->m_ToolsLayout, 0, 0, 1, 1 ); + + // Add buttons + QDialogButtonBox* bb = new QDialogButtonBox( + QDialogButtonBox::Cancel | QDialogButtonBox::Ok + ); + QObject::connect( bb, SIGNAL( accepted( ) ), this, SLOT( accept( ) ) ); + QObject::connect( bb, SIGNAL( rejected( ) ), this, SLOT( reject( ) ) ); + this->m_ToolsLayout->addWidget( bb ); +} + +// ------------------------------------------------------------------------- +cpPlugins::BasicFilters::MacheteFilter_Dialog:: +~MacheteFilter_Dialog( ) +{ + delete this->m_Title; + delete this->m_ToolsLayout; + delete this->m_MainLayout; +} + +// ------------------------------------------------------------------------- +void cpPlugins::BasicFilters::MacheteFilter_Dialog:: +accept( ) +{ + // Get interactive widget + if( this->m_Filter == NULL ) + return; + vtkPlaneWidget* wdg = this->m_Filter->m_PlaneWidget; + if( wdg == NULL ) + return; + + // Get/Set plane parameters + double center[ 3 ], normal[ 3 ]; + wdg->GetCenter( center ); + wdg->GetNormal( normal ); + + this->m_Filter->GetParameters( )->SetPoint( "PlaneCenter", 3, center ); + this->m_Filter->GetParameters( )->SetVector( "PlaneNormal", 3, normal ); + + // Update filter + auto plugins = this->m_Filter->GetPlugins( ); + if( plugins != NULL ) + { + auto app = plugins->GetApplication( ); + if( app != NULL ) + app->UpdateActualFilter( ); + + } // fi +} + +// ------------------------------------------------------------------------- +void cpPlugins::BasicFilters::MacheteFilter_Dialog:: +reject( ) +{ + auto plugins = this->m_Filter->GetPlugins( ); + if( plugins != NULL ) + plugins->DeactivateFilter( ); + this->Superclass::reject( ); +} + +#endif // cpPlugins_Interface_QT4 + // ------------------------------------------------------------------------- cpPlugins::BasicFilters::MacheteFilter:: DialogResult cpPlugins::BasicFilters::MacheteFilter:: ExecConfigurationDialog( QWidget* parent ) { +#ifdef cpPlugins_Interface_QT4 + typedef cpExtensions::Interaction::ImageInteractorStyle _TImageStyle; // Choose a valid 3D interactor @@ -91,7 +176,13 @@ ExecConfigurationDialog( QWidget* parent ) this->m_PlaneWidget->PlaceWidget( ); this->m_PlaneWidget->On( ); + this->m_Dialog = new MacheteFilter_Dialog( NULL, this ); + this->m_Dialog->show( ); + return( Self::DialogResult_Modal ); +#else // cpPlugins_Interface_QT4 + return( Self::DialogResult_Cancel ); +#endif // cpPlugins_Interface_QT4 } // ------------------------------------------------------------------------- @@ -101,17 +192,11 @@ MacheteFilter( ) m_PlaneWidget( NULL ) { this->_AddInput( "Input" ); - this->_MakeOutput< cpPlugins::Interface::DataObject >( "Output" ); + this->_MakeOutput< cpPlugins::Interface::DataObject >( "PositiveOutput" ); + this->_MakeOutput< cpPlugins::Interface::DataObject >( "NegativeOutput" ); - itk::Point< double, 3 > center; - itk::Vector< double, 3 > normal; - - center.Fill( double( 0 ) ); - normal.Fill( double( 0 ) ); - normal[ 0 ] = double( 1 ); - - this->m_Parameters->ConfigureAsPoint( "PlaneCenter", 3, center ); - this->m_Parameters->ConfigureAsVector( "PlaneNormal", 3, normal ); + this->m_Parameters->ConfigureAsPoint( "PlaneCenter" ); + this->m_Parameters->ConfigureAsVector( "PlaneNormal" ); } // ------------------------------------------------------------------------- @@ -156,32 +241,69 @@ _FromMesh( cpPlugins::Interface::Mesh* mesh ) return( "" ); } -#include - // ------------------------------------------------------------------------- template< class I > std::string cpPlugins::BasicFilters::MacheteFilter:: _RealImage( itk::DataObject* dobj ) { - typedef typename I::PixelType _TPixel; - typedef itk::PlaneSpatialObject< I::ImageDimension > _TPlane; - typedef itk::SpatialObjectToImageFilter< _TPlane, I > _TMaskFilter; + typedef + cpExtensions::DataStructures:: + InfinitePlaneSpatialObject< I::ImageDimension > _TPlane; + typedef + cpExtensions::Algorithms:: + SpatialObjectMaskImageFilter< I, I > _TFilter; + typedef cpPlugins::Interface::DataObject _TObj; + typedef cpPlugins::Interface::Image _TImage; + typedef typename _TPlane::PointType _TPoint; + typedef typename _TPlane::VectorType _TVector; + typedef typename I::PixelType _TPixel; I* image = dynamic_cast< I* >( dobj ); - typename _TMaskFilter::Pointer mask = _TMaskFilter::New( ); - mask->SetDirection( image->GetDirection( ) ); - mask->SetOrigin( image->GetOrigin( ) ); - mask->SetSize( image->GetRequestedRegion( ).GetSize( ) ); - mask->SetSpacing( image->GetSpacing( ) ); - mask->SetInsideValue( _TPixel( 1 ) ); - mask->SetOutsideValue( _TPixel( 0 ) ); - - typename itk::ImageFileWriter< I >::Pointer w = - itk::ImageFileWriter< I >::New( ); - w->SetInput( mask->GetOutput( ) ); - w->SetFileName( "mask.mhd" ); - w->Update( ); + _TPoint c = this->m_Parameters->GetPoint< _TPoint >( + "PlaneCenter", I::ImageDimension + ); + _TVector n = this->m_Parameters->GetVector< _TVector >( + "PlaneNormal", I::ImageDimension + ); + + typename _TPlane::Pointer plane = _TPlane::New( ); + plane->SetCenter( c ); + plane->SetNormal( n ); + + // Configure filter + _TFilter* filter = this->_CreateITK< _TFilter >( ); + filter->SetInput( image ); + filter->SetSpatialObject( plane ); + filter->SetOutsideValue( _TPixel( 0 ) ); + filter->Update( ); + + // Get output names + auto pos_name = this->GetOutput< _TObj >( "PositiveOutput" )->GetName( ); + auto neg_name = this->GetOutput< _TObj >( "NegativeOutput" )->GetName( ); + + // Connect outputs (and correct their types and names) + _TImage* pos_out = this->GetOutput< _TImage >( "PositiveOutput" ); + if( pos_out == NULL ) + { + this->_MakeOutput< _TImage >( "PositiveOutput" ); + pos_out = this->GetOutput< _TImage >( "PositiveOutput" ); + pos_out->SetName( pos_name ); + + } // fi + _TImage* neg_out = this->GetOutput< _TImage >( "NegativeOutput" ); + if( neg_out == NULL ) + { + this->_MakeOutput< _TImage >( "NegativeOutput" ); + neg_out = this->GetOutput< _TImage >( "NegativeOutput" ); + neg_out->SetName( neg_name ); + + } // fi + + // Assign outputs + pos_out->SetITK< I >( filter->GetPositiveOutput( ) ); + neg_out->SetITK< I >( filter->GetNegativeOutput( ) ); + return( "" ); } // eof - $RCSfile$