]> Creatis software - cpMesh.git/blobdiff - appli/InteractiveDeformableMeshSegmentation/MainWnd.cxx
New plugin added
[cpMesh.git] / appli / InteractiveDeformableMeshSegmentation / MainWnd.cxx
index bbb9080259e440d90b8cb61e27c95472e76b0bc4..f6d38fafec60d25916e5e45c72b3264471bc4f08 100644 (file)
@@ -28,7 +28,9 @@ MainWnd::MainWnd( QWidget* parent )
   : QMainWindow( parent ),
     m_UI( new Ui::MainWnd ),
     m_InputImage( NULL ),
-    m_SegmentedImage( NULL )
+    m_SegmentedImage( NULL ),
+    m_ActivePlugin( NULL ),
+    m_ActiveParameters( NULL )
 {
   this->m_UI->setupUi( this );
 
@@ -37,88 +39,59 @@ MainWnd::MainWnd( QWidget* parent )
   this->m_PluginsConfigurationFile = "idms.plugins";
   this->_LoadApplicationPreferences( );
 
-  // Create and associate renderers
-  this->m_3DRenderer = vtkSmartPointer< vtkRenderer >::New( );
-  this->m_XPlaneRenderer = vtkSmartPointer< vtkRenderer >::New( );
-  this->m_YPlaneRenderer = vtkSmartPointer< vtkRenderer >::New( );
-  this->m_ZPlaneRenderer = vtkSmartPointer< vtkRenderer >::New( );
-  this->m_AuxRenderer = vtkSmartPointer< vtkRenderer >::New( );
-  this->m_3DRenderer->SetBackground( 0.2, 0.2, 0.2 );
-  this->m_XPlaneRenderer->SetBackground( 0.1, 0.3, 0.8 );
-  this->m_YPlaneRenderer->SetBackground( 0.1, 0.3, 0.8 );
-  this->m_ZPlaneRenderer->SetBackground( 0.1, 0.3, 0.8 );
-  this->m_AuxRenderer->SetBackground( 0.1, 0.3, 0.8 );
-  this->m_UI->m_3DVTK->GetRenderWindow( )->
-    AddRenderer( this->m_3DRenderer );
-  this->m_UI->m_XPlaneVTK->GetRenderWindow( )->
-    AddRenderer( this->m_XPlaneRenderer );
-  this->m_UI->m_YPlaneVTK->GetRenderWindow( )->
-    AddRenderer( this->m_YPlaneRenderer );
-  this->m_UI->m_ZPlaneVTK->GetRenderWindow( )->
-    AddRenderer( this->m_ZPlaneRenderer );
-  this->m_UI->m_AuxVTK->GetRenderWindow( )->
-    AddRenderer( this->m_AuxRenderer );
-
-  // Configure MPR actors
-  this->m_ImageActors = vtkSmartPointer< idms::VolumeActors >::New( );
-
-  // Interaction styles
-  this->m_XStyle = vtkSmartPointer< idms::InteractorStyleImage >::New( );
-  this->m_YStyle = vtkSmartPointer< idms::InteractorStyleImage >::New( );
-  this->m_ZStyle = vtkSmartPointer< idms::InteractorStyleImage >::New( );
-  this->m_XStyle->Configure( this->m_ImageActors, 0 );
-  this->m_YStyle->Configure( this->m_ImageActors, 1 );
-  this->m_ZStyle->Configure( this->m_ImageActors, 2 );
-  this->m_UI->m_XPlaneVTK->GetInteractor( )->
-    SetInteractorStyle( this->m_XStyle );
-  this->m_UI->m_YPlaneVTK->GetInteractor( )->
-    SetInteractorStyle( this->m_YStyle );
-  this->m_UI->m_ZPlaneVTK->GetInteractor( )->
-    SetInteractorStyle( this->m_ZStyle );
+  // Create MPR objects
+  this->m_MPR = new TMPR(
+    this->m_UI->m_XPlaneVTK->GetRenderWindow( ),
+    this->m_UI->m_YPlaneVTK->GetRenderWindow( ),
+    this->m_UI->m_ZPlaneVTK->GetRenderWindow( ),
+    this->m_UI->m_3DVTK->GetRenderWindow( )
+    );
 
   // Orientation marks
-  vtkSmartPointer< vtkAnnotatedCubeActor > oCube =
-    vtkSmartPointer< vtkAnnotatedCubeActor >::New( );
-  oCube->GetCubeProperty( )->SetColor( 0.9, 0.7, 0.2 );
-  oCube->GetTextEdgesProperty( )->SetLineWidth( 1 );
-  oCube->GetTextEdgesProperty( )->SetDiffuse( 0 );
-  oCube->GetTextEdgesProperty( )->SetAmbient( 1 );
-  oCube->GetTextEdgesProperty( )->SetColor( 0.18, 0.28, 0.23 );
-  oCube->GetXPlusFaceProperty( )->SetColor( 1, 0, 0 );
-  oCube->GetXPlusFaceProperty( )->SetInterpolationToFlat( );
-  oCube->GetXMinusFaceProperty( )->SetColor( 1, 0, 0 );
-  oCube->GetXMinusFaceProperty( )->SetInterpolationToFlat( );
-  oCube->GetYPlusFaceProperty( )->SetColor( 0, 1, 0 );
-  oCube->GetYPlusFaceProperty( )->SetInterpolationToFlat( );
-  oCube->GetYMinusFaceProperty( )->SetColor( 0, 1, 0 );
-  oCube->GetYMinusFaceProperty( )->SetInterpolationToFlat( );
-  oCube->GetZPlusFaceProperty( )->SetColor( 0, 0, 1 );
-  oCube->GetZPlusFaceProperty( )->SetInterpolationToFlat( );
-  oCube->GetZMinusFaceProperty( )->SetColor( 0, 0, 1 );
-  oCube->GetZMinusFaceProperty( )->SetInterpolationToFlat( );
-
-  vtkSmartPointer< vtkAxesActor > oAxes =
-    vtkSmartPointer< vtkAxesActor >::New( );
-  oAxes->AxisLabelsOff( );
-  oAxes->SetShaftTypeToCylinder( );
-  oAxes->SetTotalLength( 2.5, 2.5, 2.5 );
-
-  vtkSmartPointer< vtkPropAssembly > oActors =
-    vtkSmartPointer< vtkPropAssembly >::New( );
-  oActors->AddPart( oCube );
-  oActors->AddPart( oAxes );
-
-  this->m_3DOrientationWidget =
-    vtkSmartPointer< vtkOrientationMarkerWidget >::New( );
-  this->m_3DOrientationWidget->SetOutlineColor( 0.93, 0.57, 0.13 );
-  this->m_3DOrientationWidget->SetOrientationMarker( oActors );
-  this->m_3DOrientationWidget->SetViewport( 0.0, 0.0, 0.2, 0.2 );
-
-  // Add actors, widgets, stuff, ...
-  this->m_3DOrientationWidget->
-    SetInteractor( this->m_UI->m_3DVTK->GetInteractor( ) );
-  this->m_3DOrientationWidget->SetEnabled( 1 );
-  this->m_3DOrientationWidget->InteractiveOff( );
+  /* TODO
+     vtkSmartPointer< vtkAnnotatedCubeActor > oCube =
+     vtkSmartPointer< vtkAnnotatedCubeActor >::New( );
+     oCube->GetCubeProperty( )->SetColor( 0.9, 0.7, 0.2 );
+     oCube->GetTextEdgesProperty( )->SetLineWidth( 1 );
+     oCube->GetTextEdgesProperty( )->SetDiffuse( 0 );
+     oCube->GetTextEdgesProperty( )->SetAmbient( 1 );
+     oCube->GetTextEdgesProperty( )->SetColor( 0.18, 0.28, 0.23 );
+     oCube->GetXPlusFaceProperty( )->SetColor( 1, 0, 0 );
+     oCube->GetXPlusFaceProperty( )->SetInterpolationToFlat( );
+     oCube->GetXMinusFaceProperty( )->SetColor( 1, 0, 0 );
+     oCube->GetXMinusFaceProperty( )->SetInterpolationToFlat( );
+     oCube->GetYPlusFaceProperty( )->SetColor( 0, 1, 0 );
+     oCube->GetYPlusFaceProperty( )->SetInterpolationToFlat( );
+     oCube->GetYMinusFaceProperty( )->SetColor( 0, 1, 0 );
+     oCube->GetYMinusFaceProperty( )->SetInterpolationToFlat( );
+     oCube->GetZPlusFaceProperty( )->SetColor( 0, 0, 1 );
+     oCube->GetZPlusFaceProperty( )->SetInterpolationToFlat( );
+     oCube->GetZMinusFaceProperty( )->SetColor( 0, 0, 1 );
+     oCube->GetZMinusFaceProperty( )->SetInterpolationToFlat( );
+
+     vtkSmartPointer< vtkAxesActor > oAxes =
+     vtkSmartPointer< vtkAxesActor >::New( );
+     oAxes->AxisLabelsOff( );
+     oAxes->SetShaftTypeToCylinder( );
+     oAxes->SetTotalLength( 2.5, 2.5, 2.5 );
+
+     vtkSmartPointer< vtkPropAssembly > oActors =
+     vtkSmartPointer< vtkPropAssembly >::New( );
+     oActors->AddPart( oCube );
+     oActors->AddPart( oAxes );
+
+     this->m_3DOrientationWidget =
+     vtkSmartPointer< vtkOrientationMarkerWidget >::New( );
+     this->m_3DOrientationWidget->SetOutlineColor( 0.93, 0.57, 0.13 );
+     this->m_3DOrientationWidget->SetOrientationMarker( oActors );
+     this->m_3DOrientationWidget->SetViewport( 0.0, 0.0, 0.2, 0.2 );
+
+     // Add actors, widgets, stuff, ...
+     this->m_3DOrientationWidget->
+     SetInteractor( this->m_UI->m_3DVTK->GetInteractor( ) );
+     this->m_3DOrientationWidget->SetEnabled( 1 );
+     this->m_3DOrientationWidget->InteractiveOff( );
+  */
 
   // Qt signals <-> slots
   IDMS_QT_ACTION( ReloadPlugins );
@@ -150,6 +123,14 @@ MainWnd::
 
   // Delete objects
   delete this->m_UI;
+  delete this->m_MPR;
+  if( this->m_ActiveParameters != NULL )
+  {
+    this->m_ActiveParameters->close( );
+    delete this->m_ActiveParameters;
+
+  } // fi
+  if( this->m_ActivePlugin != NULL ) delete this->m_ActivePlugin;
   if( this->m_InputImage != NULL ) delete this->m_InputImage;
   if( this->m_SegmentedImage != NULL ) delete this->m_SegmentedImage;
 }
@@ -193,10 +174,9 @@ _LoadApplicationPreferences( )
 
 // -------------------------------------------------------------------------
 MainWnd::
-TPluginData* MainWnd::
+TPluginImage* MainWnd::
 _LoadImage( const std::string& image_type, const std::string& image_dim )
 {
-/*
   // Show dialog and check if it was accepted
   QFileDialog dialog( this );
   dialog.setFileMode( QFileDialog::ExistingFiles );
@@ -208,11 +188,11 @@ _LoadImage( const std::string& image_type, const std::string& image_dim )
   if( !( dialog.exec( ) ) )
     return( NULL );
 
-  TPluginData* ret = NULL;
+  TPluginImage* ret = NULL;
   unsigned int nFiles = dialog.selectedFiles( ).size( );
   if( nFiles == 1 )
   {
-    if( this->m_ImageReaderClassName == "" )
+    if( this->m_BaseClasses[ "ImageReader" ] == "" )
     {
       QMessageBox::critical(
         this,
@@ -228,7 +208,7 @@ _LoadImage( const std::string& image_type, const std::string& image_dim )
 
     TPlugin* reader =
       dynamic_cast< TPlugin* >(
-      this->m_Plugins.CreateObject( this->m_ImageReaderClassName )
+        this->m_Plugins.CreateObject( this->m_BaseClasses[ "ImageReader" ] )
         );
 
     TParameters reader_params = reader->GetDefaultParameters( );
@@ -241,7 +221,7 @@ _LoadImage( const std::string& image_type, const std::string& image_dim )
 
     if( err == "" )
     {
-      ret = reader->GetOutput( 0 );
+      ret = dynamic_cast< TPluginImage* >( reader->GetOutput( 0 ) );
       reader->DisconnectOutputs( );
     }
     else
@@ -251,27 +231,26 @@ _LoadImage( const std::string& image_type, const std::string& image_dim )
         tr( err.c_str( ) )
         );
     delete reader;
-    return( ret );
   }
   else if( nFiles > 1 )
   {
-    if( this->m_ImageSeriesReaderClassName == "" )
-    {
-      QMessageBox::critical(
-        this,
-        tr( "No plugin to read an image series found!" ),
-        tr( "No plugin to read an image series found!" )
-        );
-      return( ret );
-
-    } // fi
+    /* TODO
+       if( this->m_ImageSeriesReaderClassName == "" )
+       {
+       QMessageBox::critical(
+       this,
+       tr( "No plugin to read an image series found!" ),
+       tr( "No plugin to read an image series found!" )
+       );
+       return( ret );
+
+       } // fi
        std::string fname = dialog.selectedFiles( ).at( 0 ).toStdString( );
        this->m_LastOpenedFile = fname;
-    return( ret );
+    */
 
   } // fi
   return( ret );
-*/
 }
 
 // -------------------------------------------------------------------------
@@ -287,27 +266,22 @@ _UpdateEnabledFlags( )
   this->m_UI->m_ZPlaneVTK->setEnabled( img );
   this->m_UI->m_AuxVTK->setEnabled( img );
 
-  /* TODO
-     bool seg = this->m_Segmentation.IsNotNull( );
-     this->m_UI->menuFilterSegmentedImage->setEnabled( seg );
-     this->m_UI->menuExtractMesh->setEnabled( seg );
-     this->m_UI->actionOpenMesh->setEnabled( seg );
-
-     this->m_UI->actionNavigation->setEnabled( img && seg );
-     this->m_UI->actionSegmentationInteractiveDeformation->
-     setEnabled( img && seg );
-  */
+  bool seg = ( this->m_SegmentedImage != NULL );
+  this->m_UI->menuFilterSegmentedImage->setEnabled( seg );
+  this->m_UI->menuExtractMesh->setEnabled( seg );
+  this->m_UI->menuProcessMesh->setEnabled( seg );
+  this->m_UI->actionOpenMesh->setEnabled( seg );
+
+  this->m_UI->actionNavigation->setEnabled( img && seg );
+  this->m_UI->actionSegmentationInteractiveDeformation->
+    setEnabled( img && seg );
 }
 
 // -------------------------------------------------------------------------
 void MainWnd::
 _triggered_actionReloadPlugins( )
 {
-  if( this->_LoadPlugins( ) )
-  {
-    this->_UpdateEnabledFlags( );
-  }
-  else
+  if( !( this->_LoadPlugins( ) ) )
   {
     QMessageBox::critical(
       this,
@@ -315,126 +289,8 @@ _triggered_actionReloadPlugins( )
       tr( "Could not load plugins from given file." )
       );
 
-  } // fi
-  /*
-    this->m_Plugins.UnloadAll( );
-
-    this->m_ImageReaderClassName = "";
-    this->m_ImageSeriesReaderClassName = "";
-    this->m_ImageWriterClassName = "";
-
-    std::ifstream in( this->m_PluginsConfigurationFile.c_str( ) );
-    if( in )
-    {
-    std::string plugin;
-    std::getline( in, plugin );
-    while( !( in.eof( ) ) )
-    {
-    if( this->m_Plugins.Load( plugin ) )
-    {
-    TPluginsInterface::TClassesIterator cIt =
-    this->m_Plugins.GetClasses( ).begin( );
-    TPluginsInterface::TClassesIterator end_cIt =
-    this->m_Plugins.GetClasses( ).end( );
-    for( ; cIt != end_cIt; ++cIt )
-    {
-    std::string c_name = cIt->first;
-    c_name = c_name.substr( c_name.find_last_of( ":" ) + 1 );
-    if( c_name == "ImageReader" )
-    {
-            this->m_ImageReaderClassName = cIt->first;
-          }
-          else if( c_name == "ImageSeriesReader" )
-          {
-            this->m_ImageSeriesReaderClassName = cIt->first;
-          }
-          else if( c_name == "ImageWriter" )
-          {
-            this->m_ImageWriterClassName = cIt->first;
-          }
-          else
-          {
-          } // fi
-          
-        } // rof
-
-           TFilterPlugins::TClassesIterator cIt =
-           this->m_Plugins.BeginClasses( );
-           for( ; cIt != this->m_Plugins.EndClasses( ); ++cIt )
-           {
-           TFilterObject* filter =
-           this->m_Plugins.CreateObject( cIt->first );
-           if( filter == NULL )
-           continue;
-           std::string cat = filter->GetCategory( );
-           std::string catType = cat.substr( cat.find_last_of( ":" ) );
-           if( catType == ":BinaryImageToBinaryImageFilter" )
-           {
-           QAction* action = this->m_UI->menuFilterSegmentedImage->
-           addAction( QString( cIt->first.c_str( ) ) );
-           QObject::connect(
-           action, SIGNAL( triggered( ) ),
-           this, SLOT( triggered_aFilterSegmentedImage( ) )
-           );
-           }
-           else if( catType == ":ImageToMeshFilter" )
-           {
-           QAction* action = this->m_UI->menuExtractMesh->
-           addAction( QString( cIt->first.c_str( ) ) );
-           QObject::connect(
-           action, SIGNAL( triggered( ) ),
-           this, SLOT( triggered_aSegmentedImageToMesh( ) )
-           );
-
-           } // fi
-           delete filter;
-           } // rof
-      }
-      else
-      {
-        QMessageBox::warning(
-          this,
-          tr( "Ignoring plugin" ),
-          tr( plugin.c_str( ) )
-          );
-
-      } // fi
-      std::getline( in, plugin );
-
-    } // elihw
-  }
-  else
-  {
-    QMessageBox::critical(
-      this,
-      tr( "No plugins file loaded!" ),
-      tr( this->m_PluginsConfigurationFile.c_str( ) )
-      );
-
-  } // fi
-  in.close( );
-
-  if( this->m_ImageReaderClassName == "" )
-  {
-    QMessageBox::critical(
-      this,
-      tr( "No ImageReader found in plugins!" ),
-      tr( this->m_PluginsConfigurationFile.c_str( ) )
-      );
-
-  } // fi
-
-  if( this->m_ImageWriterClassName == "" )
-  {
-    QMessageBox::critical(
-      this,
-      tr( "No ImageWriter found in plugins!" ),
-      tr( this->m_PluginsConfigurationFile.c_str( ) )
-      );
-
   } // fi
   this->_UpdateEnabledFlags( );
-  */
 }
 
 // -------------------------------------------------------------------------
@@ -450,40 +306,7 @@ _triggered_actionOpenInputImage( )
       );
   if( this->m_InputImage != NULL )
   {
-    cpPlugins::Interface::Image* img = 
-      dynamic_cast< cpPlugins::Interface::Image* >( this->m_InputImage );
-    this->m_ImageActors->Configure(
-      img->GetVTKImageData( ),
-      this->m_UI->m_XPlaneVTK->GetInteractor( ),
-      this->m_UI->m_YPlaneVTK->GetInteractor( ),
-      this->m_UI->m_ZPlaneVTK->GetInteractor( )
-      );
-    this->m_ImageActors->
-      AddAuxiliaryInteractor( this->m_UI->m_3DVTK->GetInteractor( ) );
-
-    // Associate actors
-    this->m_3DRenderer->AddActor(
-      this->m_ImageActors->GetImageOutlineActor( )
-      );
-    this->m_3DRenderer->AddActor(
-      this->m_ImageActors->GetXBoundsActor( )
-      );
-    this->m_3DRenderer->AddActor(
-      this->m_ImageActors->GetYBoundsActor( )
-      );
-    this->m_3DRenderer->AddActor(
-      this->m_ImageActors->GetZBoundsActor( )
-      );
-
-    // Reset all cameras
-    this->m_3DRenderer->ResetCamera( );
-    this->m_ImageActors->ResetCameras( );
-
-    // Ok, start!
-    this->m_UI->m_3DVTK->GetRenderWindow( )->Render( );
-    this->m_UI->m_XPlaneVTK->GetRenderWindow( )->Render( );
-    this->m_UI->m_YPlaneVTK->GetRenderWindow( )->Render( );
-    this->m_UI->m_ZPlaneVTK->GetRenderWindow( )->Render( );
+    this->m_MPR->SetImage( this->m_InputImage->GetVTKImageData( ) );
 
     // Update activations
     this->_UpdateEnabledFlags( );
@@ -506,9 +329,14 @@ _triggered_actionOpenSegmentedImage( )
       );
   if( this->m_SegmentedImage != NULL )
   {
-    cpPlugins::Interface::Image* img = 
-      dynamic_cast< cpPlugins::Interface::Image* >( this->m_SegmentedImage );
-    this->m_ImageActors->SetSegmentation( img->GetVTKImageData( ) );
+    this->m_MPR->SetSegmentation(
+      this->m_SegmentedImage->GetVTKImageData( )
+      );
+    /* TODO
+       cpPlugins::Interface::Image* img = 
+       dynamic_cast< cpPlugins::Interface::Image* >( this->m_SegmentedImage );
+       this->m_ImageActors->SetSegmentation( img->GetVTKImageData( ) );
+    */
 
     // Ok, start!
     this->m_UI->m_XPlaneVTK->GetRenderWindow( )->Render( );
@@ -688,168 +516,6 @@ _ParametersDialog( TParameters& parameters )
   return( false );
   }
 
-  // -------------------------------------------------------------------------
-  template< class I >
-  bool MainWnd::
-  _LoadImage( typename I::Pointer& image )
-  {
-  QStringList qList =
-  QFileDialog::getOpenFileNames(
-  this,
-  tr( "Open an image" ),
-  tr( this->m_LastOpenedFile.c_str( ) ),
-  tr( "Medical image files (*.mhd *.bin *.dcm);;All files (*)" )
-  );
-  if( qList.size( ) == 0 )
-  return( false );
-
-  bool ret = true;
-  QStringList::Iterator fIt = qList.begin( );
-  if( qList.size( ) == 1 )
-  {
-  // Read a single image
-  std::string fn = fIt->toStdString( );
-  this->m_LastOpenedFile = fn;
-
-  typename itk::ImageFileReader< I >::Pointer reader =
-  itk::ImageFileReader< I >::New( );
-  reader->SetFileName( fn );
-  try
-  {
-  reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-  QMessageBox::critical(
-  this,
-  tr( "Error opening single image!" ),
-  tr( err.GetDescription( ) )
-  );
-  ret = false;
-
-  } // yrt
-  image = reader->GetOutput( );
-  image->DisconnectPipeline( );
-  }
-  else if( qList.size( ) > 1 )
-  {
-  typedef std::set< std::string > _TOrderedStringList;
-
-  // Read a slice set
-  _TOrderedStringList filenames;
-  for( ; fIt != qList.end( ); ++fIt )
-  filenames.insert( fIt->toStdString( ) );
-  typename itk::ImageSeriesReader< I >::Pointer reader =
-  itk::ImageSeriesReader< I >::New( );
-  reader->SetImageIO( itk::GDCMImageIO::New( ) );
-  _TOrderedStringList::const_iterator oIt = filenames.begin( );
-  for( ; oIt != filenames.end( ); ++oIt )
-  {
-  reader->AddFileName( *oIt );
-  this->m_LastOpenedFile = *oIt;
-
-  } // rof
-  try
-  {
-  reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-  QMessageBox::critical(
-  this,
-  tr( "Error opening image series!" ),
-  tr( err.GetDescription( ) )
-  );
-  ret = false;
-
-  } // yrt
-  image = reader->GetOutput( );
-  image->DisconnectPipeline( );
-
-  } // fi
-  return( ret );
-  }
-
-// -------------------------------------------------------------------------
-void MainWnd::
-triggered_aReloadPlugins( )
-{
-}
-
-// -------------------------------------------------------------------------
-void MainWnd::
-triggered_aOpenInputImage( )
-{
-  if( this->_LoadImage< TImage >( this->m_Image ) )
-  {
-    // Connect image to VTK
-    this->m_VTKImage = TVTKImage::New( );
-    this->m_VTKImage->SetInput( this->m_Image );
-    this->m_VTKImage->Update( );
-
-    this->m_ImageActors->Configure(
-      this->m_VTKImage->GetOutput( ),
-      this->m_UI->m_XPlaneVTK->GetInteractor( ),
-      this->m_UI->m_YPlaneVTK->GetInteractor( ),
-      this->m_UI->m_ZPlaneVTK->GetInteractor( )
-      );
-    this->m_ImageActors->
-      AddAuxiliaryInteractor( this->m_UI->m_3DVTK->GetInteractor( ) );
-
-    // Associate actors
-    this->m_3DRenderer->AddActor(
-      this->m_ImageActors->GetImageOutlineActor( )
-      );
-    this->m_3DRenderer->AddActor(
-      this->m_ImageActors->GetXBoundsActor( )
-      );
-    this->m_3DRenderer->AddActor(
-      this->m_ImageActors->GetYBoundsActor( )
-      );
-    this->m_3DRenderer->AddActor(
-      this->m_ImageActors->GetZBoundsActor( )
-      );
-
-    // Reset all cameras
-    this->m_3DRenderer->ResetCamera( );
-    this->m_ImageActors->ResetCameras( );
-
-    // Ok, start!
-    this->m_UI->m_3DVTK->GetRenderWindow( )->Render( );
-    this->m_UI->m_XPlaneVTK->GetRenderWindow( )->Render( );
-    this->m_UI->m_YPlaneVTK->GetRenderWindow( )->Render( );
-    this->m_UI->m_ZPlaneVTK->GetRenderWindow( )->Render( );
-    this->_UpdateEnabledFlags( );
-    this->m_UI->aNavigation->setChecked( true );
-    this->triggered_aSwitchMode( );
-
-  } // fi
-}
-
-// -------------------------------------------------------------------------
-void MainWnd::
-triggered_aOpenSegmentedImage( )
-{
-  if( this->_LoadImage< TImage >( this->m_Segmentation ) )
-  {
-    // Connect image to VTK
-    this->m_VTKSegmentation = TVTKImage::New( );
-    this->m_VTKSegmentation->SetInput( this->m_Segmentation );
-    this->m_VTKSegmentation->Update( );
-
-    this->m_ImageActors->SetSegmentation(
-      this->m_VTKSegmentation->GetOutput( )
-      );
-
-    // Ok, start!
-    this->m_UI->m_XPlaneVTK->GetRenderWindow( )->Render( );
-    this->m_UI->m_YPlaneVTK->GetRenderWindow( )->Render( );
-    this->m_UI->m_ZPlaneVTK->GetRenderWindow( )->Render( );
-    this->_UpdateEnabledFlags( );
-
-  } // fi
-}
-
 // -------------------------------------------------------------------------
 void MainWnd::
 triggered_aFilterSegmentedImage( )