]> 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 ada90eaa9ac06e67c5694d300146987a99c7a394..133060315c0ef51e7334e63ae97aa6b8ed23625d 100644 (file)
@@ -1,6 +1,8 @@
 #include "ImageMPR.h"
 #include "ui_ImageMPR.h"
 
+#include <QMessageBox>
+
 // -------------------------------------------------------------------------
 #define ImageMPR_ConnectAction( ACTION )                \
   QObject::connect(                                     \
@@ -13,12 +15,15 @@ ImageMPR::
 ImageMPR( QWidget* parent )
   : QMainWindow( parent ),
     m_UI( new Ui::ImageMPR ),
-    m_ImageLoaded( 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 );
@@ -30,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( ) )
     );
 }
@@ -41,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( );
+  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( );
-  this->m_ImageLoaded = this->m_UI->MPR->LoadImage( );
+  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( );
+  */
 }
 
 // -------------------------------------------------------------------------
@@ -70,6 +115,8 @@ _aOpenPolyData( )
 void ImageMPR::
 _aSaveImage( )
 {
+  if( this->m_MainImage.IsNotNull( ) )
+    this->m_Plugins->WriteImage( this->m_MainImage, true );
 }
 
 // -------------------------------------------------------------------------
@@ -100,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( ) )
     );
 }
@@ -120,9 +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( );
-  this->m_UI->MPR->ExecuteFilter( name, 0 );
+  std::string err = "";
 
+  TPlugins::TProcessObject::Pointer filter;
+  if( this->m_Plugins->CreateFilter( filter, name ) )
+  {
+    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
+    QMessageBox::critical(
+      this,
+      tr( "Error creating filter" ),
+      tr( "No valid filter defined." )
+      );
+
+  /*
+    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 =
@@ -165,6 +257,48 @@ _execPlugin( )
   */
 }
 
+// -------------------------------------------------------------------------
+/* TODO
+   void ImageMPR::
+   _CursorCommand( double* pos, int axis, void* data )
+   {
+   Self* app = reinterpret_cast< Self* >( data );
+   if( app == NULL )
+   return;
+   if( !( app->m_Flooding ) )
+   return;
+
+   cpPlugins::Interface::ProcessObject::Pointer filter =
+   app->m_UI->MPR->CreateFilter(
+   "cpPlugins::BasicFilters::FloodFillImageFilter"
+   );
+   if( filter.IsNull( ) )
+   return;
+
+   cpPlugins::Interface::Parameters* params = filter->GetParameters( );
+   params->SetPoint( "Seed", 3, pos );
+   params->SetReal( "Window", app->m_UI->MPR->GetWindow( ) );
+   params->SetReal( "Level", app->m_UI->MPR->GetLevel( ) );
+   params->SetUint( "InsideValue", 1 );
+   params->SetUint( "OutsideValue", 0 );
+   filter->SetInput( "Input", app->m_UI->MPR->GetImage( app->m_ImageLoaded ) );
+   app->m_UI->MPR->Block( );
+   std::string err = filter->Update( );
+   cpPlugins::Interface::BaseMPRWindow::TImage::Pointer image = filter->GetOutput< cpPlugins::Interface::BaseMPRWindow::TImage >( "Output" );
+   filter->DisconnectOutputs( );
+   app->m_UI->MPR->AddImage( "Segmentation", image );
+   app->m_UI->MPR->Unblock( );
+
+   std::cout
+   << "CursorCommand ==> "
+   << pos[ 0 ] << " "
+   << pos[ 1 ] << " "
+   << pos[ 2 ] << " : "
+   << axis << " "
+   << data << std::endl;
+   }
+*/
+
 /*
 #include "MementoState.h"