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 ),
24 this->m_UI->setupUi( this );
26 // Prepare default configuration
27 this->m_UI->Q1->hide( );
28 this->m_UI->Q2->hide( );
29 this->m_UI->Q3->hide( );
30 this->m_UI->Q4->hide( );
31 this->m_UI->Q1->close( );
32 this->m_UI->Q2->close( );
33 this->m_UI->Q3->close( );
34 this->m_UI->Q4->close( );
35 delete this->m_UI->Q1;
36 delete this->m_UI->Q2;
37 delete this->m_UI->Q3;
38 delete this->m_UI->Q4;
39 this->m_XImage = new ImageWidget( this );
40 this->m_YImage = new ImageWidget( this );
41 this->m_ZImage = new ImageWidget( this );
42 this->m_3DView = new MPR3DWidget( this );
43 this->m_UI->Q1 = this->m_XImage;
44 this->m_UI->Q2 = this->m_YImage;
45 this->m_UI->Q3 = this->m_ZImage;
46 this->m_UI->Q4 = this->m_3DView;
47 this->Configure( 'y', 'x', 'w', 'z' );
49 // Interaction synchronizer
50 unsigned long ev1 = vtkCommand::UserEvent + 1;
51 unsigned long ev2 = vtkCommand::UserEvent + 2;
52 vtkSmartPointer< cpExtensions::QT::MPRInteractionCommand > cmd =
53 vtkSmartPointer< cpExtensions::QT::MPRInteractionCommand >::New( );
54 cmd->AddWidget( this->m_XImage );
55 cmd->AddWidget( this->m_YImage );
56 cmd->AddWidget( this->m_ZImage );
57 cmd->AddWidget( this->m_3DView );
58 this->m_XImage->GetInteractorStyle( )->AddObserver( ev1, cmd );
59 this->m_YImage->GetInteractorStyle( )->AddObserver( ev1, cmd );
60 this->m_ZImage->GetInteractorStyle( )->AddObserver( ev1, cmd );
61 this->m_XImage->GetInteractorStyle( )->AddObserver( ev2, cmd );
62 this->m_YImage->GetInteractorStyle( )->AddObserver( ev2, cmd );
63 this->m_ZImage->GetInteractorStyle( )->AddObserver( ev2, cmd );
67 this->m_UI->Top, SIGNAL( splitterMoved( int, int ) ),
68 this, SLOT( _SyncBottom( int, int ) )
71 this->m_UI->Bottom, SIGNAL( splitterMoved( int, int ) ),
72 this, SLOT( _SyncTop( int, int ) )
75 this->m_UI->ConfigurationButton, SIGNAL( clicked( ) ),
76 this, SLOT( _ConfigurationButton( ) )
81 // -------------------------------------------------------------------------
82 cpExtensions::QT::SimpleMPRWidget::
88 // -------------------------------------------------------------------------
89 void cpExtensions::QT::SimpleMPRWidget::
90 Configure( char q1, char q2, char q3, char q4 )
93 this->m_UI->Q1->hide( );
94 this->m_UI->Q2->hide( );
95 this->m_UI->Q3->hide( );
96 this->m_UI->Q4->hide( );
97 this->m_UI->Q1->close( );
98 this->m_UI->Q2->close( );
99 this->m_UI->Q3->close( );
100 this->m_UI->Q4->close( );
103 if ( q1 == 'x' ) this->m_UI->Top->addWidget( this->m_XImage );
104 else if( q1 == 'y' ) this->m_UI->Top->addWidget( this->m_YImage );
105 else if( q1 == 'z' ) this->m_UI->Top->addWidget( this->m_ZImage );
106 else if( q1 == 'w' ) this->m_UI->Top->addWidget( this->m_3DView );
107 if ( q2 == 'x' ) this->m_UI->Top->addWidget( this->m_XImage );
108 else if( q2 == 'y' ) this->m_UI->Top->addWidget( this->m_YImage );
109 else if( q2 == 'z' ) this->m_UI->Top->addWidget( this->m_ZImage );
110 else if( q2 == 'w' ) this->m_UI->Top->addWidget( this->m_3DView );
111 this->m_UI->Top->update( );
112 if ( q4 == 'x' ) this->m_UI->Bottom->addWidget( this->m_XImage );
113 else if( q4 == 'y' ) this->m_UI->Bottom->addWidget( this->m_YImage );
114 else if( q4 == 'z' ) this->m_UI->Bottom->addWidget( this->m_ZImage );
115 else if( q4 == 'w' ) this->m_UI->Bottom->addWidget( this->m_3DView );
116 if ( q3 == 'x' ) this->m_UI->Bottom->addWidget( this->m_XImage );
117 else if( q3 == 'y' ) this->m_UI->Bottom->addWidget( this->m_YImage );
118 else if( q3 == 'z' ) this->m_UI->Bottom->addWidget( this->m_ZImage );
119 else if( q3 == 'w' ) this->m_UI->Bottom->addWidget( this->m_3DView );
120 this->m_UI->Bottom->update( );
123 if ( q1 == 'x' ) this->m_UI->Q1 = this->m_XImage;
124 else if( q1 == 'y' ) this->m_UI->Q1 = this->m_YImage;
125 else if( q1 == 'z' ) this->m_UI->Q1 = this->m_ZImage;
126 else if( q1 == 'w' ) this->m_UI->Q1 = this->m_3DView;
127 if ( q2 == 'x' ) this->m_UI->Q2 = this->m_XImage;
128 else if( q2 == 'y' ) this->m_UI->Q2 = this->m_YImage;
129 else if( q2 == 'z' ) this->m_UI->Q2 = this->m_ZImage;
130 else if( q2 == 'w' ) this->m_UI->Q2 = this->m_3DView;
131 if ( q3 == 'x' ) this->m_UI->Q3 = this->m_XImage;
132 else if( q3 == 'y' ) this->m_UI->Q3 = this->m_YImage;
133 else if( q3 == 'z' ) this->m_UI->Q3 = this->m_ZImage;
134 else if( q3 == 'w' ) this->m_UI->Q3 = this->m_3DView;
135 if ( q4 == 'x' ) this->m_UI->Q4 = this->m_XImage;
136 else if( q4 == 'y' ) this->m_UI->Q4 = this->m_YImage;
137 else if( q4 == 'z' ) this->m_UI->Q4 = this->m_ZImage;
138 else if( q4 == 'w' ) this->m_UI->Q4 = this->m_3DView;
141 this->m_UI->Q1->show( );
142 this->m_UI->Q2->show( );
143 this->m_UI->Q3->show( );
144 this->m_UI->Q4->show( );
145 dynamic_cast< RendererWidget* >( this->m_UI->Q1 )->SetQuadrant( 1 );
146 dynamic_cast< RendererWidget* >( this->m_UI->Q2 )->SetQuadrant( 2 );
147 dynamic_cast< RendererWidget* >( this->m_UI->Q3 )->SetQuadrant( 3 );
148 dynamic_cast< RendererWidget* >( this->m_UI->Q4 )->SetQuadrant( 4 );
151 // -------------------------------------------------------------------------
152 bool cpExtensions::QT::SimpleMPRWidget::
155 return( this->m_MainImage.GetPointer( ) != NULL );
158 // -------------------------------------------------------------------------
159 void cpExtensions::QT::SimpleMPRWidget::
160 SetImage( vtkImageData* image, const std::string& name )
162 if( this->m_MainImageName != "" || image == NULL )
164 // TODO: Clear visualization
167 this->m_MainImageName = name;
168 this->m_MainImage = image;
170 if( this->m_MainImage != NULL && this->m_MainImageName != "" )
172 this->m_XImage->SetImage( this->m_MainImage, 0, name );
173 this->m_YImage->SetImage( this->m_MainImage, 1, name );
174 this->m_ZImage->SetImage( this->m_MainImage, 2, name );
175 this->m_3DView->SetImage( this->m_MainImage, name );
180 // -------------------------------------------------------------------------
181 bool cpExtensions::QT::SimpleMPRWidget::
182 Add( vtkDataSet* data, const std::string& name )
186 auto image = dynamic_cast< vtkImageData* >( data );
187 auto pdata = dynamic_cast< vtkPolyData* >( data );
191 if( this->m_MainImageName != "" )
193 this->m_XImage->Add( image, name );
194 this->m_YImage->Add( image, name );
195 this->m_ZImage->Add( image, name );
196 this->m_3DView->Add( image, name );
199 this->SetImage( image, name );
201 else if( pdata != NULL )
202 this->m_3DView->Add( pdata, name );
209 // -------------------------------------------------------------------------
210 cpExtensions::QT::SimpleMPRWidget::
211 TProps cpExtensions::QT::SimpleMPRWidget::
212 GetViewProps( const std::string& name ) const
215 auto x = this->m_XImage->GetViewProps( name );
216 auto y = this->m_YImage->GetViewProps( name );
217 auto z = this->m_ZImage->GetViewProps( name );
218 auto w = this->m_3DView->GetViewProps( name );
221 if( x != NULL ) props.insert( x );
222 if( y != NULL ) props.insert( y );
223 if( z != NULL ) props.insert( z );
224 if( w != NULL ) props.insert( w );
229 // -------------------------------------------------------------------------
230 cpExtensions::QT::SimpleMPRWidget::
231 TProps cpExtensions::QT::SimpleMPRWidget::
232 GetImageProps( ) const
234 return( this->GetViewProps( this->m_MainImageName ) );
237 // -------------------------------------------------------------------------
238 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
241 return( this->m_XImage->GetInteractor( ) );
244 // -------------------------------------------------------------------------
245 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
246 GetXInteractor( ) const
248 return( this->m_XImage->GetInteractor( ) );
251 // -------------------------------------------------------------------------
252 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
255 return( this->m_YImage->GetInteractor( ) );
258 // -------------------------------------------------------------------------
259 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
260 GetYInteractor( ) const
262 return( this->m_YImage->GetInteractor( ) );
265 // -------------------------------------------------------------------------
266 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
269 return( this->m_ZImage->GetInteractor( ) );
272 // -------------------------------------------------------------------------
273 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
274 GetZInteractor( ) const
276 return( this->m_ZImage->GetInteractor( ) );
279 // -------------------------------------------------------------------------
280 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
283 return( this->m_3DView->GetInteractor( ) );
286 // -------------------------------------------------------------------------
287 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
288 GetWInteractor( ) const
290 return( this->m_3DView->GetInteractor( ) );
293 // -------------------------------------------------------------------------
294 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
297 return( this->m_XImage->GetRenderWindow( ) );
300 // -------------------------------------------------------------------------
301 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
302 GetXRenderWindow( ) const
304 return( this->m_XImage->GetRenderWindow( ) );
307 // -------------------------------------------------------------------------
308 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
311 return( this->m_YImage->GetRenderWindow( ) );
314 // -------------------------------------------------------------------------
315 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
316 GetYRenderWindow( ) const
318 return( this->m_YImage->GetRenderWindow( ) );
321 // -------------------------------------------------------------------------
322 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
325 return( this->m_ZImage->GetRenderWindow( ) );
328 // -------------------------------------------------------------------------
329 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
330 GetZRenderWindow( ) const
332 return( this->m_ZImage->GetRenderWindow( ) );
335 // -------------------------------------------------------------------------
336 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
339 return( this->m_3DView->GetRenderWindow( ) );
343 // -------------------------------------------------------------------------
344 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
345 GetWRenderWindow( ) const
347 return( this->m_3DView->GetRenderWindow( ) );
350 // -------------------------------------------------------------------------
351 void cpExtensions::QT::SimpleMPRWidget::
352 GetScalarRange( double r[ 2 ] ) const
354 // this->m_XImage->GetScalarRange( r );
357 // -------------------------------------------------------------------------
358 void cpExtensions::QT::SimpleMPRWidget::
359 GetWindowLevel( double wl[ 2 ] ) const
361 // this->m_XImage->GetWindowLevel( wl );
364 // -------------------------------------------------------------------------
365 double cpExtensions::QT::SimpleMPRWidget::
366 GetImageOpacity( ) const
368 // return( this->m_XImage->GetImageOpacity( ) );
371 // -------------------------------------------------------------------------
372 unsigned char cpExtensions::QT::SimpleMPRWidget::
373 GetImageInterpolation( ) const
375 // return( this->m_XImage->GetImageInterpolation( ) );
378 // -------------------------------------------------------------------------
379 void cpExtensions::QT::SimpleMPRWidget::
380 SetScalarRange( double r[ 2 ] )
383 this->m_XImage->SetScalarRange( r );
384 this->m_YImage->SetScalarRange( r );
385 this->m_ZImage->SetScalarRange( r );
386 this->m_3DView->SetScalarRange( r );
390 // -------------------------------------------------------------------------
391 void cpExtensions::QT::SimpleMPRWidget::
392 SetWindowLevel( double wl[ 2 ] )
395 this->m_XImage->SetWindowLevel( wl );
396 this->m_YImage->SetWindowLevel( wl );
397 this->m_ZImage->SetWindowLevel( wl );
398 this->m_3DView->SetWindowLevel( wl );
402 // -------------------------------------------------------------------------
403 void cpExtensions::QT::SimpleMPRWidget::
404 SetImageOpacity( double o )
407 this->m_XImage->SetImageOpacity( o );
408 this->m_YImage->SetImageOpacity( o );
409 this->m_ZImage->SetImageOpacity( o );
410 this->m_3DView->SetImageOpacity( o );
414 // -------------------------------------------------------------------------
415 void cpExtensions::QT::SimpleMPRWidget::
416 SetImageInterpolation( unsigned char i )
419 this->m_XImage->SetImageInterpolation( i );
420 this->m_YImage->SetImageInterpolation( i );
421 this->m_ZImage->SetImageInterpolation( i );
422 this->m_3DView->SetImageInterpolation( i );
426 // -------------------------------------------------------------------------
427 void cpExtensions::QT::SimpleMPRWidget::
431 this->m_XImage->ResetCamera( );
432 this->m_YImage->ResetCamera( );
433 this->m_ZImage->ResetCamera( );
434 this->m_3DView->ResetCamera( );
438 // -------------------------------------------------------------------------
439 void cpExtensions::QT::SimpleMPRWidget::
443 this->m_XImage->Render( );
444 this->m_YImage->Render( );
445 this->m_ZImage->Render( );
446 this->m_3DView->Render( );
450 // -------------------------------------------------------------------------
451 void cpExtensions::QT::SimpleMPRWidget::
452 _SyncBottom( int a, int b )
454 this->m_UI->Bottom->setSizes( this->m_UI->Top->sizes( ) );
457 // -------------------------------------------------------------------------
458 void cpExtensions::QT::SimpleMPRWidget::
459 _SyncTop( int a, int b )
461 this->m_UI->Top->setSizes( this->m_UI->Bottom->sizes( ) );
464 // -------------------------------------------------------------------------
465 void cpExtensions::QT::SimpleMPRWidget::
466 _ConfigurationButton( )
468 auto dlg = new cpExtensions::QT::ConfigurationChooser( NULL );
469 dlg->setData( this );
473 #endif // cpExtensions_QT4