1 #include <cpExtensions/QT/SimpleMPRWidget.h>
3 #ifdef cpExtensions_QT4
5 #include <cpExtensions/QT/ui_SimpleMPRWidget.h>
6 #include <cpExtensions/QT/ImageWidget.h>
7 #include <cpExtensions/QT/MPR3DWidget.h>
8 #include <cpExtensions/QT/MPRInteractionCommand.h>
9 #include <cpExtensions/QT/ConfigurationChooser.h>
11 #include <vtkImageData.h>
12 #include <vtkPolyData.h>
14 #include <vtkPropCollection.h>
16 // -------------------------------------------------------------------------
17 cpExtensions::QT::SimpleMPRWidget::
18 SimpleMPRWidget( QWidget* parent, Qt::WindowFlags f )
19 : Superclass( parent, f ),
20 m_UI( new Ui::SimpleMPRWidget ),
23 this->m_UI->setupUi( this );
25 // Prepare default configuration
26 this->m_UI->Q1->hide( );
27 this->m_UI->Q2->hide( );
28 this->m_UI->Q3->hide( );
29 this->m_UI->Q4->hide( );
30 this->m_UI->Q1->close( );
31 this->m_UI->Q2->close( );
32 this->m_UI->Q3->close( );
33 this->m_UI->Q4->close( );
34 delete this->m_UI->Q1;
35 delete this->m_UI->Q2;
36 delete this->m_UI->Q3;
37 delete this->m_UI->Q4;
38 this->m_XImage = new ImageWidget( this );
39 this->m_YImage = new ImageWidget( this );
40 this->m_ZImage = new ImageWidget( this );
41 this->m_3DView = new MPR3DWidget( this );
42 this->m_UI->Q1 = this->m_XImage;
43 this->m_UI->Q2 = this->m_YImage;
44 this->m_UI->Q3 = this->m_ZImage;
45 this->m_UI->Q4 = this->m_3DView;
46 this->Configure( 'y', 'x', 'w', 'z' );
48 // Interaction synchronizer
49 unsigned long ev1 = vtkCommand::UserEvent + 1;
50 unsigned long ev2 = vtkCommand::UserEvent + 2;
51 vtkSmartPointer< cpExtensions::QT::MPRInteractionCommand > cmd =
52 vtkSmartPointer< cpExtensions::QT::MPRInteractionCommand >::New( );
53 cmd->AddWidget( this->m_XImage );
54 cmd->AddWidget( this->m_YImage );
55 cmd->AddWidget( this->m_ZImage );
56 cmd->AddWidget( this->m_3DView );
57 this->m_XImage->GetInteractorStyle( )->AddObserver( ev1, cmd );
58 this->m_YImage->GetInteractorStyle( )->AddObserver( ev1, cmd );
59 this->m_ZImage->GetInteractorStyle( )->AddObserver( ev1, cmd );
60 this->m_XImage->GetInteractorStyle( )->AddObserver( ev2, cmd );
61 this->m_YImage->GetInteractorStyle( )->AddObserver( ev2, cmd );
62 this->m_ZImage->GetInteractorStyle( )->AddObserver( ev2, cmd );
66 this->m_UI->Top, SIGNAL( splitterMoved( int, int ) ),
67 this, SLOT( _SyncBottom( int, int ) )
70 this->m_UI->Bottom, SIGNAL( splitterMoved( int, int ) ),
71 this, SLOT( _SyncTop( int, int ) )
74 this->m_UI->ConfigurationButton, SIGNAL( clicked( ) ),
75 this, SLOT( _ConfigurationButton( ) )
79 // -------------------------------------------------------------------------
80 cpExtensions::QT::SimpleMPRWidget::
86 // -------------------------------------------------------------------------
87 void cpExtensions::QT::SimpleMPRWidget::
88 Configure( char q1, char q2, char q3, char q4 )
91 this->m_UI->Q1->hide( );
92 this->m_UI->Q2->hide( );
93 this->m_UI->Q3->hide( );
94 this->m_UI->Q4->hide( );
95 this->m_UI->Q1->close( );
96 this->m_UI->Q2->close( );
97 this->m_UI->Q3->close( );
98 this->m_UI->Q4->close( );
101 if ( q1 == 'x' ) this->m_UI->Top->addWidget( this->m_XImage );
102 else if( q1 == 'y' ) this->m_UI->Top->addWidget( this->m_YImage );
103 else if( q1 == 'z' ) this->m_UI->Top->addWidget( this->m_ZImage );
104 else if( q1 == 'w' ) this->m_UI->Top->addWidget( this->m_3DView );
105 if ( q2 == 'x' ) this->m_UI->Top->addWidget( this->m_XImage );
106 else if( q2 == 'y' ) this->m_UI->Top->addWidget( this->m_YImage );
107 else if( q2 == 'z' ) this->m_UI->Top->addWidget( this->m_ZImage );
108 else if( q2 == 'w' ) this->m_UI->Top->addWidget( this->m_3DView );
109 this->m_UI->Top->update( );
110 if ( q4 == 'x' ) this->m_UI->Bottom->addWidget( this->m_XImage );
111 else if( q4 == 'y' ) this->m_UI->Bottom->addWidget( this->m_YImage );
112 else if( q4 == 'z' ) this->m_UI->Bottom->addWidget( this->m_ZImage );
113 else if( q4 == 'w' ) this->m_UI->Bottom->addWidget( this->m_3DView );
114 if ( q3 == 'x' ) this->m_UI->Bottom->addWidget( this->m_XImage );
115 else if( q3 == 'y' ) this->m_UI->Bottom->addWidget( this->m_YImage );
116 else if( q3 == 'z' ) this->m_UI->Bottom->addWidget( this->m_ZImage );
117 else if( q3 == 'w' ) this->m_UI->Bottom->addWidget( this->m_3DView );
118 this->m_UI->Bottom->update( );
121 if ( q1 == 'x' ) this->m_UI->Q1 = this->m_XImage;
122 else if( q1 == 'y' ) this->m_UI->Q1 = this->m_YImage;
123 else if( q1 == 'z' ) this->m_UI->Q1 = this->m_ZImage;
124 else if( q1 == 'w' ) this->m_UI->Q1 = this->m_3DView;
125 if ( q2 == 'x' ) this->m_UI->Q2 = this->m_XImage;
126 else if( q2 == 'y' ) this->m_UI->Q2 = this->m_YImage;
127 else if( q2 == 'z' ) this->m_UI->Q2 = this->m_ZImage;
128 else if( q2 == 'w' ) this->m_UI->Q2 = this->m_3DView;
129 if ( q3 == 'x' ) this->m_UI->Q3 = this->m_XImage;
130 else if( q3 == 'y' ) this->m_UI->Q3 = this->m_YImage;
131 else if( q3 == 'z' ) this->m_UI->Q3 = this->m_ZImage;
132 else if( q3 == 'w' ) this->m_UI->Q3 = this->m_3DView;
133 if ( q4 == 'x' ) this->m_UI->Q4 = this->m_XImage;
134 else if( q4 == 'y' ) this->m_UI->Q4 = this->m_YImage;
135 else if( q4 == 'z' ) this->m_UI->Q4 = this->m_ZImage;
136 else if( q4 == 'w' ) this->m_UI->Q4 = this->m_3DView;
139 this->m_UI->Q1->show( );
140 this->m_UI->Q2->show( );
141 this->m_UI->Q3->show( );
142 this->m_UI->Q4->show( );
143 dynamic_cast< RendererWidget* >( this->m_UI->Q1 )->SetQuadrant( 1 );
144 dynamic_cast< RendererWidget* >( this->m_UI->Q2 )->SetQuadrant( 2 );
145 dynamic_cast< RendererWidget* >( this->m_UI->Q3 )->SetQuadrant( 3 );
146 dynamic_cast< RendererWidget* >( this->m_UI->Q4 )->SetQuadrant( 4 );
149 // -------------------------------------------------------------------------
150 bool cpExtensions::QT::SimpleMPRWidget::
153 return( this->m_MainImage.GetPointer( ) != NULL );
156 // -------------------------------------------------------------------------
157 void cpExtensions::QT::SimpleMPRWidget::
158 SetImage( vtkImageData* image, const std::string& name )
160 if( this->m_MainImageName != "" || image == NULL )
162 // TODO: Clear visualization
165 this->m_MainImageName = name;
166 this->m_MainImage = image;
168 if( this->m_MainImage != NULL && this->m_MainImageName != "" )
170 this->m_XImage->SetImage( this->m_MainImage, 0, name );
171 this->m_YImage->SetImage( this->m_MainImage, 1, name );
172 this->m_ZImage->SetImage( this->m_MainImage, 2, name );
173 this->m_3DView->SetImage( this->m_MainImage, name );
178 // -------------------------------------------------------------------------
179 bool cpExtensions::QT::SimpleMPRWidget::
180 Add( vtkDataSet* data, const std::string& name )
183 auto image = dynamic_cast< vtkImageData* >( data );
184 auto pdata = dynamic_cast< vtkPolyData* >( data );
188 if( this->m_MainImageName != "" )
190 this->m_XImage->Add( image, name );
191 this->m_YImage->Add( image, name );
192 this->m_ZImage->Add( image, name );
193 this->m_3DView->Add( image, name );
196 this->SetImage( image, name );
198 else if( pdata != NULL )
199 this->m_3DView->Add( pdata, name );
205 // -------------------------------------------------------------------------
206 cpExtensions::QT::SimpleMPRWidget::
207 TProps cpExtensions::QT::SimpleMPRWidget::
208 GetViewProps( const std::string& name ) const
210 auto x = this->m_XImage->GetViewProps( name );
211 auto y = this->m_YImage->GetViewProps( name );
212 auto z = this->m_ZImage->GetViewProps( name );
213 auto w = this->m_3DView->GetViewProps( name );
216 if( x != NULL ) props.insert( x );
217 if( y != NULL ) props.insert( y );
218 if( z != NULL ) props.insert( z );
219 if( w != NULL ) props.insert( w );
223 // -------------------------------------------------------------------------
224 cpExtensions::QT::SimpleMPRWidget::
225 TProps cpExtensions::QT::SimpleMPRWidget::
226 GetImageProps( ) const
228 return( this->GetViewProps( this->m_MainImageName ) );
231 // -------------------------------------------------------------------------
232 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
235 return( this->m_XImage->GetInteractor( ) );
238 // -------------------------------------------------------------------------
239 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
240 GetXInteractor( ) const
242 return( this->m_XImage->GetInteractor( ) );
245 // -------------------------------------------------------------------------
246 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
249 return( this->m_YImage->GetInteractor( ) );
252 // -------------------------------------------------------------------------
253 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
254 GetYInteractor( ) const
256 return( this->m_YImage->GetInteractor( ) );
259 // -------------------------------------------------------------------------
260 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
263 return( this->m_ZImage->GetInteractor( ) );
266 // -------------------------------------------------------------------------
267 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
268 GetZInteractor( ) const
270 return( this->m_ZImage->GetInteractor( ) );
273 // -------------------------------------------------------------------------
274 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
277 return( this->m_3DView->GetInteractor( ) );
280 // -------------------------------------------------------------------------
281 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
282 GetWInteractor( ) const
284 return( this->m_3DView->GetInteractor( ) );
287 // -------------------------------------------------------------------------
288 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
291 return( this->m_XImage->GetRenderWindow( ) );
294 // -------------------------------------------------------------------------
295 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
296 GetXRenderWindow( ) const
298 return( this->m_XImage->GetRenderWindow( ) );
301 // -------------------------------------------------------------------------
302 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
305 return( this->m_YImage->GetRenderWindow( ) );
308 // -------------------------------------------------------------------------
309 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
310 GetYRenderWindow( ) const
312 return( this->m_YImage->GetRenderWindow( ) );
315 // -------------------------------------------------------------------------
316 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
319 return( this->m_ZImage->GetRenderWindow( ) );
322 // -------------------------------------------------------------------------
323 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
324 GetZRenderWindow( ) const
326 return( this->m_ZImage->GetRenderWindow( ) );
329 // -------------------------------------------------------------------------
330 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
333 return( this->m_3DView->GetRenderWindow( ) );
337 // -------------------------------------------------------------------------
338 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
339 GetWRenderWindow( ) const
341 return( this->m_3DView->GetRenderWindow( ) );
344 // -------------------------------------------------------------------------
345 void cpExtensions::QT::SimpleMPRWidget::
346 GetScalarRange( double r[ 2 ] ) const
348 this->m_XImage->GetScalarRange( r );
351 // -------------------------------------------------------------------------
352 void cpExtensions::QT::SimpleMPRWidget::
353 GetWindowLevel( double wl[ 2 ] ) const
355 this->m_XImage->GetWindowLevel( wl );
358 // -------------------------------------------------------------------------
359 double cpExtensions::QT::SimpleMPRWidget::
360 GetImageOpacity( ) const
362 return( this->m_XImage->GetImageOpacity( ) );
365 // -------------------------------------------------------------------------
366 unsigned char cpExtensions::QT::SimpleMPRWidget::
367 GetImageInterpolation( ) const
369 return( this->m_XImage->GetImageInterpolation( ) );
372 // -------------------------------------------------------------------------
373 void cpExtensions::QT::SimpleMPRWidget::
374 SetScalarRange( double r[ 2 ] )
378 // -------------------------------------------------------------------------
379 void cpExtensions::QT::SimpleMPRWidget::
380 SetWindowLevel( double wl[ 2 ] )
384 // -------------------------------------------------------------------------
385 void cpExtensions::QT::SimpleMPRWidget::
386 SetImageOpacity( double o )
388 this->m_XImage->SetImageOpacity( o );
389 this->m_YImage->SetImageOpacity( o );
390 this->m_ZImage->SetImageOpacity( o );
391 this->m_3DView->SetImageOpacity( o );
394 // -------------------------------------------------------------------------
395 void cpExtensions::QT::SimpleMPRWidget::
396 SetImageInterpolation( unsigned char i )
400 // -------------------------------------------------------------------------
401 void cpExtensions::QT::SimpleMPRWidget::
404 this->m_XImage->ResetCamera( );
405 this->m_YImage->ResetCamera( );
406 this->m_ZImage->ResetCamera( );
407 this->m_3DView->ResetCamera( );
410 // -------------------------------------------------------------------------
411 void cpExtensions::QT::SimpleMPRWidget::
414 this->m_XImage->Render( );
415 this->m_YImage->Render( );
416 this->m_ZImage->Render( );
417 this->m_3DView->Render( );
420 // -------------------------------------------------------------------------
421 void cpExtensions::QT::SimpleMPRWidget::
422 _SyncBottom( int a, int b )
424 this->m_UI->Bottom->setSizes( this->m_UI->Top->sizes( ) );
427 // -------------------------------------------------------------------------
428 void cpExtensions::QT::SimpleMPRWidget::
429 _SyncTop( int a, int b )
431 this->m_UI->Top->setSizes( this->m_UI->Bottom->sizes( ) );
434 // -------------------------------------------------------------------------
435 void cpExtensions::QT::SimpleMPRWidget::
436 _ConfigurationButton( )
438 auto dlg = new cpExtensions::QT::ConfigurationChooser( NULL );
439 dlg->setData( this );
443 #endif // cpExtensions_QT4