]> Creatis software - cpPlugins.git/blobdiff - appli/ImageMPR/ImageMPR.cxx
widget sphere update: works with mouse but is still buggy with key board
[cpPlugins.git] / appli / ImageMPR / ImageMPR.cxx
index ca29aaacf20080d69902a447d4f814567f3dad30..133060315c0ef51e7334e63ae97aa6b8ed23625d 100644 (file)
@@ -1,6 +1,8 @@
 #include "ImageMPR.h"
 #include "ui_ImageMPR.h"
 
+#include <QMessageBox>
+
 // -------------------------------------------------------------------------
 #define ImageMPR_ConnectAction( ACTION )                \
   QObject::connect(                                     \
@@ -13,13 +15,15 @@ ImageMPR::
 ImageMPR( QWidget* parent )
   : QMainWindow( parent ),
     m_UI( new Ui::ImageMPR ),
-    m_ImageLoaded( "" ),
-    m_Flooding( false )
+    m_Plugins( new TPlugins ),
+    m_MainImage( NULL )
 {
   this->m_UI->setupUi( this );
+  this->m_Plugins->SetWidget( this );
 
   // Connect actions
   ImageMPR_ConnectAction( OpenImage );
+  ImageMPR_ConnectAction( OpenDICOMSeries );
   ImageMPR_ConnectAction( OpenSegmentation );
   ImageMPR_ConnectAction( OpenPolyData );
   ImageMPR_ConnectAction( SaveImage );
@@ -31,8 +35,8 @@ ImageMPR( QWidget* parent )
   ImageMPR_ConnectAction( ShowPlugins );
 
   // Try to load default plugins
-  this->m_UI->MPR->LoadPlugins( );
-  this->m_UI->MPR->AssociatePluginsToMenu(
+  this->m_Plugins->LoadPluginsConfigurationFile( "Plugins.cfg" );
+  this->m_Plugins->AssociatePluginsToMenu(
     this->m_UI->MenuFilters, this, SLOT( _execPlugin( ) )
     );
 }
@@ -42,23 +46,63 @@ ImageMPR::
 ~ImageMPR( )
 {
   delete this->m_UI;
+  delete this->m_Plugins;
 }
 
 // -------------------------------------------------------------------------
 void ImageMPR::
 _aOpenImage( )
 {
-  if( this->m_ImageLoaded != "" )
+  if( this->m_MainImage.IsNotNull( ) )
     this->m_UI->MPR->ClearAll( );
-  this->m_ImageLoaded = this->m_UI->MPR->LoadImage( );
+  if( this->m_Plugins->ReadImage( this->m_MainImage, true ) )
+  {
+    vtkImageData* vimage = this->m_MainImage->GetVTK< vtkImageData >( );
+    if( vimage == NULL )
+      QMessageBox::critical(
+        this,
+        QMessageBox::tr( "Error showing image." ),
+        QMessageBox::tr(
+          "Image was read, but no valid VTK conversion was found."
+          )
+        );
+    else
+      this->m_UI->MPR->ShowImage( vimage );
+
+  } // fi
+}
+
+// -------------------------------------------------------------------------
+void ImageMPR::
+_aOpenDICOMSeries( )
+{
+  if( this->m_MainImage.IsNotNull( ) )
+    this->m_UI->MPR->ClearAll( );
+  if( this->m_Plugins->ReadDicomSeries( this->m_MainImage ) )
+  {
+    vtkImageData* vimage = this->m_MainImage->GetVTK< vtkImageData >( );
+    if( vimage == NULL )
+      QMessageBox::critical(
+        this,
+        QMessageBox::tr( "Error showing image." ),
+        QMessageBox::tr(
+          "Image was read, but no valid VTK conversion was found."
+          )
+        );
+    else
+      this->m_UI->MPR->ShowImage( vimage );
+
+  } // fi
 }
 
 // -------------------------------------------------------------------------
 void ImageMPR::
 _aOpenSegmentation( )
 {
-  if( this->m_ImageLoaded != "" )
+  /*
+    if( this->m_ImageLoaded != "" )
     this->m_ImageLoaded = this->m_UI->MPR->LoadImage( );
+  */
 }
 
 // -------------------------------------------------------------------------
@@ -71,6 +115,8 @@ _aOpenPolyData( )
 void ImageMPR::
 _aSaveImage( )
 {
+  if( this->m_MainImage.IsNotNull( ) )
+    this->m_Plugins->WriteImage( this->m_MainImage, true );
 }
 
 // -------------------------------------------------------------------------
@@ -101,8 +147,8 @@ _aRedo( )
 void ImageMPR::
 _aLoadPlugins( )
 {
-  this->m_UI->MPR->DialogLoadPlugins( );
-  this->m_UI->MPR->AssociatePluginsToMenu(
+  this->m_Plugins->DialogLoadPlugins( );
+  this->m_Plugins->AssociatePluginsToMenu(
     this->m_UI->MenuFilters, this, SLOT( _execPlugin( ) )
     );
 }
@@ -121,21 +167,54 @@ _execPlugin( )
   QAction* action = dynamic_cast< QAction* >( this->sender( ) );
   if( action == NULL )
     return;
+  QMenu* menu = dynamic_cast< QMenu* >( action->parentWidget( ) );
+  if( menu == NULL )
+    return;
+  std::string cate = menu->title( ).toStdString( );
   std::string name = action->text( ).toStdString( );
+  std::string err = "";
 
-  if( name == "cpPlugins::BasicFilters::FloodFillImageFilter" )
+  TPlugins::TProcessObject::Pointer filter;
+  if( this->m_Plugins->CreateFilter( filter, name ) )
   {
-    this->m_Flooding = true;
+    if( cate == "ImageToMeshFilter" )
+    {
+      if( filter->ExecConfigurationDialog( this ) )
+      {
+        filter->SetInput( "Input", this->m_MainImage );
+        this->_Block( );
+        err = filter->Update( );
+        this->_Unblock( );
+        TPlugins::TMesh::Pointer mesh =
+          filter->GetOutput< TPlugins::TMesh >( "Input" );
+        mesh->Print( std::cout );
+
+      } // fi
+
+    } // fi
   }
   else
-  {
-    this->m_Flooding = false;
-    this->m_UI->MPR->ExecuteFilter(
-      name, this->m_ImageLoaded, "SegmentedImage"
+    QMessageBox::critical(
+      this,
+      tr( "Error creating filter" ),
+      tr( "No valid filter defined." )
       );
 
-  } // fi
-
+  /*
+    if( name == "cpPlugins::BasicFilters::FloodFillImageFilter" )
+    {
+    this->m_Flooding = true;
+    }
+    else
+    {
+    this->m_Flooding = false;
+    this->m_UI->MPR->ExecuteFilter(
+    name, this->m_ImageLoaded, "SegmentedImage"
+    );
+    
+    } // fi
+  */
+  
   // Configure filter
   /*
     TPluginFilter::Pointer filter =