X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=appli%2FInteractiveDeformableMeshSegmentation%2FMainWnd.cxx;fp=appli%2FInteractiveDeformableMeshSegmentation%2FMainWnd.cxx;h=f6d38fafec60d25916e5e45c72b3264471bc4f08;hb=93ddd2fe04d05b28dff31448032fd3af93ffe750;hp=bbb9080259e440d90b8cb61e27c95472e76b0bc4;hpb=6d6bf5d5e3b9318a507216f2f231c32299d1a941;p=cpMesh.git diff --git a/appli/InteractiveDeformableMeshSegmentation/MainWnd.cxx b/appli/InteractiveDeformableMeshSegmentation/MainWnd.cxx index bbb9080..f6d38fa 100644 --- a/appli/InteractiveDeformableMeshSegmentation/MainWnd.cxx +++ b/appli/InteractiveDeformableMeshSegmentation/MainWnd.cxx @@ -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( )