2 #include "ui_ImageMPR.h"
4 #include <vtkRenderWindow.h>
14 #include <vtkAnnotatedCubeActor.h>
15 #include <vtkAxesActor.h>
16 #include <vtkPropAssembly.h>
17 #include <vtkProperty.h>
19 #include <cpPlugins/Interface/Image.h>
21 // -------------------------------------------------------------------------
22 #define IDMS_QT_ACTION( name ) \
24 this->m_UI->action##name, SIGNAL( triggered( ) ), \
25 this, SLOT( _triggered_action##name( ) ) \
29 // -------------------------------------------------------------------------
30 ImageMPR::ImageMPR( QWidget* parent )
31 : QMainWindow( parent ),
32 m_UI( new Ui::ImageMPR ),
35 this->m_UI->setupUi( this );
37 // Create and associate renderers
38 this->m_3DRenderer = vtkSmartPointer< vtkRenderer >::New( );
39 this->m_XPlaneRenderer = vtkSmartPointer< vtkRenderer >::New( );
40 this->m_YPlaneRenderer = vtkSmartPointer< vtkRenderer >::New( );
41 this->m_ZPlaneRenderer = vtkSmartPointer< vtkRenderer >::New( );
42 this->m_3DRenderer->SetBackground( 0.2, 0.2, 0.2 );
43 this->m_XPlaneRenderer->SetBackground( 0.1, 0.3, 0.8 );
44 this->m_YPlaneRenderer->SetBackground( 0.1, 0.3, 0.8 );
45 this->m_ZPlaneRenderer->SetBackground( 0.1, 0.3, 0.8 );
46 this->m_UI->m_3DVTK->GetRenderWindow( )->
47 AddRenderer( this->m_3DRenderer );
48 this->m_UI->m_XPlaneVTK->GetRenderWindow( )->
49 AddRenderer( this->m_XPlaneRenderer );
50 this->m_UI->m_YPlaneVTK->GetRenderWindow( )->
51 AddRenderer( this->m_YPlaneRenderer );
52 this->m_UI->m_ZPlaneVTK->GetRenderWindow( )->
53 AddRenderer( this->m_ZPlaneRenderer );
55 // Configure MPR actors
56 this->m_MPRActors = vtkSmartPointer< TMPRActors >::New( );
58 // Prepare interaction
59 this->m_XStyle = vtkSmartPointer< TStyle >::New( );
60 this->m_YStyle = vtkSmartPointer< TStyle >::New( );
61 this->m_ZStyle = vtkSmartPointer< TStyle >::New( );
63 Configure( this->m_MPRActors->GetSliceActors( 0 ), this->m_MPRActors );
65 Configure( this->m_MPRActors->GetSliceActors( 1 ), this->m_MPRActors );
67 Configure( this->m_MPRActors->GetSliceActors( 2 ), this->m_MPRActors );
69 SetInteractor( this->m_UI->m_XPlaneVTK->GetInteractor( ), 0 );
71 SetInteractor( this->m_UI->m_YPlaneVTK->GetInteractor( ), 1 );
73 SetInteractor( this->m_UI->m_ZPlaneVTK->GetInteractor( ), 2 );
74 this->m_XStyle->SetModeToNavigation( );
75 this->m_YStyle->SetModeToNavigation( );
76 this->m_ZStyle->SetModeToNavigation( );
79 this->m_UI->actionOpenPlugins, SIGNAL( triggered( ) ),
80 this, SLOT( _triggered_actionOpenPlugins( ) )
83 this->m_UI->actionOpenInputImage, SIGNAL( triggered( ) ),
84 this, SLOT( _triggered_actionOpenInputImage( ) )
87 // Start: load all disponible plugins
88 this->_triggered_actionOpenPlugins( );
91 // -------------------------------------------------------------------------
95 // Close all connections
96 this->m_Plugins.UnloadAll( );
100 if( this->m_InputImage != NULL ) delete this->m_InputImage;
103 // -------------------------------------------------------------------------
105 _triggered_actionOpenPlugins( )
107 // Show dialog and check if it was accepted
108 QFileDialog dialog( this );
109 dialog.setFileMode( QFileDialog::ExistingFile );
110 dialog.setDirectory( "." );
111 dialog.setNameFilter(
112 tr( "Plugins file (*.so);;All files (*)" )
114 dialog.setDefaultSuffix( tr( "so" ) );
115 if( !( dialog.exec( ) ) )
118 std::string fname = dialog.selectedFiles( ).at( 0 ).toStdString( );
119 this->m_Plugins.UnloadAll( );
120 if( !( this->m_Plugins.Load( fname ) ) )
122 QMessageBox::critical(
124 tr( "Ignoring plugin" ),
127 this->m_Plugins.UnloadAll( );
132 this->m_BaseClasses[ "ImageReader" ] =
133 "cpPlugins::Plugins::ImageReader";
134 this->m_BaseClasses[ "ImageSeriesReader" ] =
135 "cpPlugins::Plugins::ImageSeriesReader";
138 // -------------------------------------------------------------------------
140 _triggered_actionOpenInputImage( )
142 // Show dialog and check if it was accepted
143 QFileDialog dialog( this );
144 dialog.setFileMode( QFileDialog::ExistingFiles );
145 dialog.setDirectory( tr( "." ) );
146 dialog.setNameFilter(
147 tr( "Medical image files (*.mhd *.bin *.dcm);;All files (*)" )
149 dialog.setDefaultSuffix( tr( "mhd" ) );
150 if( !( dialog.exec( ) ) )
153 if( this->m_InputImage != NULL )
154 delete this->m_InputImage;
155 this->m_InputImage = NULL;
156 unsigned int nFiles = dialog.selectedFiles( ).size( );
159 std::string fname = dialog.selectedFiles( ).at( 0 ).toStdString( );
162 dynamic_cast< TPlugin* >(
163 this->m_Plugins.CreateObject( this->m_BaseClasses[ "ImageReader" ] )
166 TParameters reader_params = reader->GetDefaultParameters( );
167 reader_params[ "FileName" ].second = fname;
168 reader_params[ "PixelType" ].second = "short";
169 reader_params[ "ImageDimension" ].second = "3";
170 reader_params[ "IsColorImage" ].second = "0";
171 reader->SetParameters( reader_params );
172 std::string err = reader->Update( );
177 dynamic_cast< TPluginImage* >( reader->GetOutput( 0 ) );
178 reader->DisconnectOutputs( );
181 QMessageBox::critical(
183 tr( "Error reading single image" ),
188 else if( nFiles > 1 )
191 if( this->m_ImageSeriesReaderClassName == "" )
193 QMessageBox::critical(
195 tr( "No plugin to read an image series found!" ),
196 tr( "No plugin to read an image series found!" )
201 std::string fname = dialog.selectedFiles( ).at( 0 ).toStdString( );
202 this->m_LastOpenedFile = fname;
208 if( this->m_InputImage != NULL )
210 this->m_MPRActors->SetInputData( this->m_InputImage->GetVTKImageData( ) );
211 this->m_MPRActors->PushDataInto(
212 this->m_XPlaneRenderer,
213 this->m_YPlaneRenderer,
214 this->m_ZPlaneRenderer,
219 this->m_3DRenderer->ResetCamera( );
220 this->m_XPlaneRenderer->ResetCamera( );
221 this->m_YPlaneRenderer->ResetCamera( );
222 this->m_ZPlaneRenderer->ResetCamera( );
225 this->m_UI->m_3DVTK->GetRenderWindow( )->Render( );
226 this->m_UI->m_XPlaneVTK->GetRenderWindow( )->Render( );
227 this->m_UI->m_YPlaneVTK->GetRenderWindow( )->Render( );
228 this->m_UI->m_ZPlaneVTK->GetRenderWindow( )->Render( );