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->GetStyle( )->AddObserver( ev1, cmd );
58 this->m_YImage->GetStyle( )->AddObserver( ev1, cmd );
59 this->m_ZImage->GetStyle( )->AddObserver( ev1, cmd );
60 this->m_XImage->GetStyle( )->AddObserver( ev2, cmd );
61 this->m_YImage->GetStyle( )->AddObserver( ev2, cmd );
62 this->m_ZImage->GetStyle( )->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 // TODO: 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
211 auto x = this->m_XImage->GetViewProps( name );
212 auto y = this->m_YImage->GetViewProps( name );
213 auto z = this->m_ZImage->GetViewProps( name );
214 auto w = this->m_3DView->GetViewProps( name );
217 if( x != NULL ) props.insert( x );
218 if( y != NULL ) props.insert( y );
219 if( z != NULL ) props.insert( z );
220 if( w != NULL ) props.insert( w );
225 // -------------------------------------------------------------------------
226 cpExtensions::QT::SimpleMPRWidget::
227 TProps cpExtensions::QT::SimpleMPRWidget::
228 GetImageProps( ) const
230 return( this->GetViewProps( this->m_MainImageName ) );
233 // -------------------------------------------------------------------------
234 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
237 return( this->m_XImage->GetInteractor( ) );
240 // -------------------------------------------------------------------------
241 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
242 GetXInteractor( ) const
244 return( this->m_XImage->GetInteractor( ) );
247 // -------------------------------------------------------------------------
248 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
251 return( this->m_YImage->GetInteractor( ) );
254 // -------------------------------------------------------------------------
255 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
256 GetYInteractor( ) const
258 return( this->m_YImage->GetInteractor( ) );
261 // -------------------------------------------------------------------------
262 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
265 return( this->m_ZImage->GetInteractor( ) );
268 // -------------------------------------------------------------------------
269 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
270 GetZInteractor( ) const
272 return( this->m_ZImage->GetInteractor( ) );
275 // -------------------------------------------------------------------------
276 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
279 return( this->m_3DView->GetInteractor( ) );
282 // -------------------------------------------------------------------------
283 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
284 GetWInteractor( ) const
286 return( this->m_3DView->GetInteractor( ) );
289 // -------------------------------------------------------------------------
290 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
293 return( this->m_XImage->GetRenderWindow( ) );
296 // -------------------------------------------------------------------------
297 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
298 GetXRenderWindow( ) const
300 return( this->m_XImage->GetRenderWindow( ) );
303 // -------------------------------------------------------------------------
304 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
307 return( this->m_YImage->GetRenderWindow( ) );
310 // -------------------------------------------------------------------------
311 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
312 GetYRenderWindow( ) const
314 return( this->m_YImage->GetRenderWindow( ) );
317 // -------------------------------------------------------------------------
318 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
321 return( this->m_ZImage->GetRenderWindow( ) );
324 // -------------------------------------------------------------------------
325 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
326 GetZRenderWindow( ) const
328 return( this->m_ZImage->GetRenderWindow( ) );
331 // -------------------------------------------------------------------------
332 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
335 return( this->m_3DView->GetRenderWindow( ) );
339 // -------------------------------------------------------------------------
340 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
341 GetWRenderWindow( ) const
343 return( this->m_3DView->GetRenderWindow( ) );
346 // -------------------------------------------------------------------------
347 void cpExtensions::QT::SimpleMPRWidget::
348 GetScalarRange( double r[ 2 ] ) const
350 // this->m_XImage->GetScalarRange( r );
353 // -------------------------------------------------------------------------
354 void cpExtensions::QT::SimpleMPRWidget::
355 GetWindowLevel( double wl[ 2 ] ) const
357 // this->m_XImage->GetWindowLevel( wl );
360 // -------------------------------------------------------------------------
361 double cpExtensions::QT::SimpleMPRWidget::
362 GetImageOpacity( ) const
364 // return( this->m_XImage->GetImageOpacity( ) );
367 // -------------------------------------------------------------------------
368 unsigned char cpExtensions::QT::SimpleMPRWidget::
369 GetImageInterpolation( ) const
371 // return( this->m_XImage->GetImageInterpolation( ) );
374 // -------------------------------------------------------------------------
375 void cpExtensions::QT::SimpleMPRWidget::
376 SetScalarRange( double r[ 2 ] )
379 this->m_XImage->SetScalarRange( r );
380 this->m_YImage->SetScalarRange( r );
381 this->m_ZImage->SetScalarRange( r );
382 this->m_3DView->SetScalarRange( r );
386 // -------------------------------------------------------------------------
387 void cpExtensions::QT::SimpleMPRWidget::
388 SetWindowLevel( double wl[ 2 ] )
391 this->m_XImage->SetWindowLevel( wl );
392 this->m_YImage->SetWindowLevel( wl );
393 this->m_ZImage->SetWindowLevel( wl );
394 this->m_3DView->SetWindowLevel( wl );
398 // -------------------------------------------------------------------------
399 void cpExtensions::QT::SimpleMPRWidget::
400 SetImageOpacity( double o )
403 this->m_XImage->SetImageOpacity( o );
404 this->m_YImage->SetImageOpacity( o );
405 this->m_ZImage->SetImageOpacity( o );
406 this->m_3DView->SetImageOpacity( o );
410 // -------------------------------------------------------------------------
411 void cpExtensions::QT::SimpleMPRWidget::
412 SetImageInterpolation( unsigned char i )
415 this->m_XImage->SetImageInterpolation( i );
416 this->m_YImage->SetImageInterpolation( i );
417 this->m_ZImage->SetImageInterpolation( i );
418 this->m_3DView->SetImageInterpolation( i );
422 // -------------------------------------------------------------------------
423 void cpExtensions::QT::SimpleMPRWidget::
427 this->m_XImage->ResetCamera( );
428 this->m_YImage->ResetCamera( );
429 this->m_ZImage->ResetCamera( );
430 this->m_3DView->ResetCamera( );
434 // -------------------------------------------------------------------------
435 void cpExtensions::QT::SimpleMPRWidget::
439 this->m_XImage->Render( );
440 this->m_YImage->Render( );
441 this->m_ZImage->Render( );
442 this->m_3DView->Render( );
446 // -------------------------------------------------------------------------
447 void cpExtensions::QT::SimpleMPRWidget::
448 _SyncBottom( int a, int b )
450 this->m_UI->Bottom->setSizes( this->m_UI->Top->sizes( ) );
453 // -------------------------------------------------------------------------
454 void cpExtensions::QT::SimpleMPRWidget::
455 _SyncTop( int a, int b )
457 this->m_UI->Top->setSizes( this->m_UI->Bottom->sizes( ) );
460 // -------------------------------------------------------------------------
461 void cpExtensions::QT::SimpleMPRWidget::
462 _ConfigurationButton( )
464 auto dlg = new cpExtensions::QT::ConfigurationChooser( NULL );
465 dlg->setData( this );
469 #endif // cpExtensions_QT4