1 #include <cpExtensions/QT/SimpleMPRWidget.h>
2 #include <cpExtensions/QT/ui_SimpleMPRWidget.h>
3 #include <cpExtensions/QT/ImageWidget.h>
4 #include <cpExtensions/QT/MPR3DWidget.h>
5 #include <cpExtensions/QT/MPRInteractionCommand.h>
6 #include <cpExtensions/QT/ConfigurationChooser.h>
8 #include <vtkImageData.h>
9 #include <vtkPolyData.h>
11 #include <vtkPropCollection.h>
13 // -------------------------------------------------------------------------
14 cpExtensions::QT::SimpleMPRWidget::
15 SimpleMPRWidget( QWidget* parent, Qt::WindowFlags f )
16 : Superclass( parent, f ),
18 m_UI( new Ui::SimpleMPRWidget ),
21 this->m_UI->setupUi( this );
23 // Prepare default configuration
24 this->m_UI->Q1->hide( );
25 this->m_UI->Q2->hide( );
26 this->m_UI->Q3->hide( );
27 this->m_UI->Q4->hide( );
28 this->m_UI->Q1->close( );
29 this->m_UI->Q2->close( );
30 this->m_UI->Q3->close( );
31 this->m_UI->Q4->close( );
32 delete this->m_UI->Q1;
33 delete this->m_UI->Q2;
34 delete this->m_UI->Q3;
35 delete this->m_UI->Q4;
36 this->m_XImage = new ImageWidget( this );
37 this->m_YImage = new ImageWidget( this );
38 this->m_ZImage = new ImageWidget( this );
39 this->m_3DView = new MPR3DWidget( this );
40 this->m_UI->Q1 = this->m_XImage;
41 this->m_UI->Q2 = this->m_YImage;
42 this->m_UI->Q3 = this->m_ZImage;
43 this->m_UI->Q4 = this->m_3DView;
44 this->Configure( 'y', 'x', 'w', 'z' );
46 // Interaction synchronizer
47 unsigned long ev1 = vtkCommand::UserEvent + 1;
48 unsigned long ev2 = vtkCommand::UserEvent + 2;
49 vtkSmartPointer< cpExtensions::QT::MPRInteractionCommand > cmd =
50 vtkSmartPointer< cpExtensions::QT::MPRInteractionCommand >::New( );
51 cmd->AddWidget( this->m_XImage );
52 cmd->AddWidget( this->m_YImage );
53 cmd->AddWidget( this->m_ZImage );
54 cmd->AddWidget( this->m_3DView );
55 this->m_XImage->GetStyle( )->AddObserver( ev1, cmd );
56 this->m_YImage->GetStyle( )->AddObserver( ev1, cmd );
57 this->m_ZImage->GetStyle( )->AddObserver( ev1, cmd );
58 this->m_XImage->GetStyle( )->AddObserver( ev2, cmd );
59 this->m_YImage->GetStyle( )->AddObserver( ev2, cmd );
60 this->m_ZImage->GetStyle( )->AddObserver( ev2, cmd );
64 this->m_UI->Top, SIGNAL( splitterMoved( int, int ) ),
65 this, SLOT( _SyncBottom( int, int ) )
68 this->m_UI->Bottom, SIGNAL( splitterMoved( int, int ) ),
69 this, SLOT( _SyncTop( int, int ) )
73 // -------------------------------------------------------------------------
74 cpExtensions::QT::SimpleMPRWidget::
80 // -------------------------------------------------------------------------
81 void cpExtensions::QT::SimpleMPRWidget::
82 Configure( char q1, char q2, char q3, char q4 )
85 this->m_UI->Q1->hide( );
86 this->m_UI->Q2->hide( );
87 this->m_UI->Q3->hide( );
88 this->m_UI->Q4->hide( );
89 this->m_UI->Q1->close( );
90 this->m_UI->Q2->close( );
91 this->m_UI->Q3->close( );
92 this->m_UI->Q4->close( );
95 if ( q1 == 'x' ) this->m_UI->Top->addWidget( this->m_XImage );
96 else if( q1 == 'y' ) this->m_UI->Top->addWidget( this->m_YImage );
97 else if( q1 == 'z' ) this->m_UI->Top->addWidget( this->m_ZImage );
98 else if( q1 == 'w' ) this->m_UI->Top->addWidget( this->m_3DView );
99 if ( q2 == 'x' ) this->m_UI->Top->addWidget( this->m_XImage );
100 else if( q2 == 'y' ) this->m_UI->Top->addWidget( this->m_YImage );
101 else if( q2 == 'z' ) this->m_UI->Top->addWidget( this->m_ZImage );
102 else if( q2 == 'w' ) this->m_UI->Top->addWidget( this->m_3DView );
103 this->m_UI->Top->update( );
104 if ( q4 == 'x' ) this->m_UI->Bottom->addWidget( this->m_XImage );
105 else if( q4 == 'y' ) this->m_UI->Bottom->addWidget( this->m_YImage );
106 else if( q4 == 'z' ) this->m_UI->Bottom->addWidget( this->m_ZImage );
107 else if( q4 == 'w' ) this->m_UI->Bottom->addWidget( this->m_3DView );
108 if ( q3 == 'x' ) this->m_UI->Bottom->addWidget( this->m_XImage );
109 else if( q3 == 'y' ) this->m_UI->Bottom->addWidget( this->m_YImage );
110 else if( q3 == 'z' ) this->m_UI->Bottom->addWidget( this->m_ZImage );
111 else if( q3 == 'w' ) this->m_UI->Bottom->addWidget( this->m_3DView );
112 this->m_UI->Bottom->update( );
115 if ( q1 == 'x' ) this->m_UI->Q1 = this->m_XImage;
116 else if( q1 == 'y' ) this->m_UI->Q1 = this->m_YImage;
117 else if( q1 == 'z' ) this->m_UI->Q1 = this->m_ZImage;
118 else if( q1 == 'w' ) this->m_UI->Q1 = this->m_3DView;
119 if ( q2 == 'x' ) this->m_UI->Q2 = this->m_XImage;
120 else if( q2 == 'y' ) this->m_UI->Q2 = this->m_YImage;
121 else if( q2 == 'z' ) this->m_UI->Q2 = this->m_ZImage;
122 else if( q2 == 'w' ) this->m_UI->Q2 = this->m_3DView;
123 if ( q3 == 'x' ) this->m_UI->Q3 = this->m_XImage;
124 else if( q3 == 'y' ) this->m_UI->Q3 = this->m_YImage;
125 else if( q3 == 'z' ) this->m_UI->Q3 = this->m_ZImage;
126 else if( q3 == 'w' ) this->m_UI->Q3 = this->m_3DView;
127 if ( q4 == 'x' ) this->m_UI->Q4 = this->m_XImage;
128 else if( q4 == 'y' ) this->m_UI->Q4 = this->m_YImage;
129 else if( q4 == 'z' ) this->m_UI->Q4 = this->m_ZImage;
130 else if( q4 == 'w' ) this->m_UI->Q4 = this->m_3DView;
133 this->m_UI->Q1->show( );
134 this->m_UI->Q2->show( );
135 this->m_UI->Q3->show( );
136 this->m_UI->Q4->show( );
137 dynamic_cast< RendererWidget* >( this->m_UI->Q1 )->SetQuadrant( 1 );
138 dynamic_cast< RendererWidget* >( this->m_UI->Q2 )->SetQuadrant( 2 );
139 dynamic_cast< RendererWidget* >( this->m_UI->Q3 )->SetQuadrant( 3 );
140 dynamic_cast< RendererWidget* >( this->m_UI->Q4 )->SetQuadrant( 4 );
143 // -------------------------------------------------------------------------
144 bool cpExtensions::QT::SimpleMPRWidget::
147 return( this->m_MainImage.GetPointer( ) != NULL );
150 // -------------------------------------------------------------------------
151 void cpExtensions::QT::SimpleMPRWidget::
152 SetImage( vtkImageData* image, const std::string& name )
154 if( this->m_MainImageName != "" || image == NULL )
156 // TODO: Clear visualization
159 this->m_MainImageName = name;
160 this->m_MainImage = image;
162 if( this->m_MainImage != NULL && this->m_MainImageName != "" )
164 this->m_XImage->SetImage( this->m_MainImage, name, 0 );
165 this->m_YImage->SetImage( this->m_MainImage, name, 1 );
166 this->m_ZImage->SetImage( this->m_MainImage, name, 2 );
167 this->m_3DView->SetImage( this->m_MainImage, name );
172 // -------------------------------------------------------------------------
173 bool cpExtensions::QT::SimpleMPRWidget::
174 Add( vtkDataSet* data, const std::string& name )
177 auto image = dynamic_cast< vtkImageData* >( data );
178 auto pdata = dynamic_cast< vtkPolyData* >( data );
182 if( this->m_MainImageName != "" )
184 this->m_XImage->Add( image, name );
185 this->m_YImage->Add( image, name );
186 this->m_ZImage->Add( image, name );
187 // TODO: this->m_3DView->Add( image, name );
190 this->SetImage( image, name );
192 else if( pdata != NULL )
193 this->m_3DView->Add( pdata, name );
199 // -------------------------------------------------------------------------
200 cpExtensions::QT::SimpleMPRWidget::
201 TProps cpExtensions::QT::SimpleMPRWidget::
202 GetViewProps( const std::string& name ) const
205 auto x = this->m_XImage->GetViewProps( name );
206 auto y = this->m_YImage->GetViewProps( name );
207 auto z = this->m_ZImage->GetViewProps( name );
208 auto w = this->m_3DView->GetViewProps( name );
211 if( x != NULL ) props.insert( x );
212 if( y != NULL ) props.insert( y );
213 if( z != NULL ) props.insert( z );
214 if( w != NULL ) props.insert( w );
221 // -------------------------------------------------------------------------
222 cpExtensions::QT::SimpleMPRWidget::
223 TProps cpExtensions::QT::SimpleMPRWidget::
224 GetImageProps( ) const
226 return( this->GetViewProps( this->m_MainImageName ) );
229 // -------------------------------------------------------------------------
230 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
233 return( this->m_XImage->GetInteractor( ) );
236 // -------------------------------------------------------------------------
237 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
238 GetXInteractor( ) const
240 return( this->m_XImage->GetInteractor( ) );
243 // -------------------------------------------------------------------------
244 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
247 return( this->m_YImage->GetInteractor( ) );
250 // -------------------------------------------------------------------------
251 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
252 GetYInteractor( ) const
254 return( this->m_YImage->GetInteractor( ) );
257 // -------------------------------------------------------------------------
258 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
261 return( this->m_ZImage->GetInteractor( ) );
264 // -------------------------------------------------------------------------
265 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
266 GetZInteractor( ) const
268 return( this->m_ZImage->GetInteractor( ) );
271 // -------------------------------------------------------------------------
272 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
275 return( this->m_3DView->GetInteractor( ) );
278 // -------------------------------------------------------------------------
279 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
280 GetWInteractor( ) const
282 return( this->m_3DView->GetInteractor( ) );
285 // -------------------------------------------------------------------------
286 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
289 return( this->m_XImage->GetRenderWindow( ) );
292 // -------------------------------------------------------------------------
293 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
294 GetXRenderWindow( ) const
296 return( this->m_XImage->GetRenderWindow( ) );
299 // -------------------------------------------------------------------------
300 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
303 return( this->m_YImage->GetRenderWindow( ) );
306 // -------------------------------------------------------------------------
307 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
308 GetYRenderWindow( ) const
310 return( this->m_YImage->GetRenderWindow( ) );
313 // -------------------------------------------------------------------------
314 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
317 return( this->m_ZImage->GetRenderWindow( ) );
320 // -------------------------------------------------------------------------
321 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
322 GetZRenderWindow( ) const
324 return( this->m_ZImage->GetRenderWindow( ) );
327 // -------------------------------------------------------------------------
328 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
331 return( this->m_3DView->GetRenderWindow( ) );
335 // -------------------------------------------------------------------------
336 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
337 GetWRenderWindow( ) const
339 return( this->m_3DView->GetRenderWindow( ) );
342 // -------------------------------------------------------------------------
343 void cpExtensions::QT::SimpleMPRWidget::
346 this->m_XImage->ResetCamera( );
347 this->m_YImage->ResetCamera( );
348 this->m_ZImage->ResetCamera( );
349 this->m_3DView->ResetCamera( );
352 // -------------------------------------------------------------------------
353 void cpExtensions::QT::SimpleMPRWidget::
356 this->m_XImage->Render( );
357 this->m_YImage->Render( );
358 this->m_ZImage->Render( );
359 this->m_3DView->Render( );
362 // -------------------------------------------------------------------------
363 std::set< vtkRenderWindowInteractor* > cpExtensions::QT::SimpleMPRWidget::
364 GetInteractors( ) const
366 std::set< vtkRenderWindowInteractor* > ret;
367 ret.insert( this->m_XImage->GetInteractor( ) );
368 ret.insert( this->m_YImage->GetInteractor( ) );
369 ret.insert( this->m_ZImage->GetInteractor( ) );
370 ret.insert( this->m_3DView->GetInteractor( ) );
374 // -------------------------------------------------------------------------
375 std::set< std::string > cpExtensions::QT::SimpleMPRWidget::
376 GetActorsNames( ) const
378 std::set< std::string > names = this->m_XImage->GetActorsNames( );
379 std::set< std::string > y = this->m_YImage->GetActorsNames( );
380 std::set< std::string > z = this->m_ZImage->GetActorsNames( );
381 std::set< std::string > w = this->m_3DView->GetActorsNames( );
382 names.insert( y.begin( ), y.end( ) );
383 names.insert( z.begin( ), z.end( ) );
384 names.insert( w.begin( ), w.end( ) );
388 // -------------------------------------------------------------------------
389 bool cpExtensions::QT::SimpleMPRWidget::
390 IsWindowLevelImageActor( const std::string& name ) const
392 return( this->m_XImage->IsWindowLevelImageActor( name ) );
395 // -------------------------------------------------------------------------
396 bool cpExtensions::QT::SimpleMPRWidget::
397 IsLUTImageActor( const std::string& name ) const
399 return( this->m_XImage->IsLUTImageActor( name ) );
402 // -------------------------------------------------------------------------
403 bool cpExtensions::QT::SimpleMPRWidget::
404 Is3DActor( const std::string& name ) const
407 this->m_XImage->Is3DActor( name ) || this->m_3DView->Is3DActor( name )
411 // -------------------------------------------------------------------------
412 void cpExtensions::QT::SimpleMPRWidget::
413 GetScalarRange( const std::string& name, double r[ 2 ] ) const
415 this->m_XImage->GetScalarRange( name, r );
418 // -------------------------------------------------------------------------
419 void cpExtensions::QT::SimpleMPRWidget::
420 GetWindowLevel( const std::string& name, double wl[ 2 ] ) const
422 this->m_XImage->GetWindowLevel( name, wl );
425 // -------------------------------------------------------------------------
426 double cpExtensions::QT::SimpleMPRWidget::
427 GetWindow( const std::string& name ) const
429 return( this->m_XImage->GetWindow( name ) );
432 // -------------------------------------------------------------------------
433 double cpExtensions::QT::SimpleMPRWidget::
434 GetLevel( const std::string& name ) const
436 return( this->m_XImage->GetLevel( name ) );
439 // -------------------------------------------------------------------------
440 char cpExtensions::QT::SimpleMPRWidget::
441 GetImageInterpolation( const std::string& name ) const
443 return( this->m_XImage->GetImageInterpolation( name ) );
446 // -------------------------------------------------------------------------
447 void cpExtensions::QT::SimpleMPRWidget::
448 GetColor( const std::string& name, double& r, double& g, double& b ) const
450 this->m_XImage->GetColor( name, r, g, b );
453 // -------------------------------------------------------------------------
454 double cpExtensions::QT::SimpleMPRWidget::
455 GetOpacity( const std::string& name ) const
457 return( this->m_XImage->GetOpacity( name ) );
460 // -------------------------------------------------------------------------
461 double cpExtensions::QT::SimpleMPRWidget::
462 GetPointSize( const std::string& name ) const
464 return( this->m_XImage->GetPointSize( name ) );
467 // -------------------------------------------------------------------------
468 double cpExtensions::QT::SimpleMPRWidget::
469 GetLineWidth( const std::string& name ) const
471 return( this->m_XImage->GetLineWidth( name ) );
474 // -------------------------------------------------------------------------
475 int cpExtensions::QT::SimpleMPRWidget::
476 GetRepresentation( const std::string& name ) const
478 return( this->m_XImage->GetRepresentation( name ) );
481 // -------------------------------------------------------------------------
482 void cpExtensions::QT::SimpleMPRWidget::
483 SetScalarRange( const std::string& name, double r[ 2 ] )
485 this->m_XImage->SetScalarRange( name, r );
486 this->m_YImage->SetScalarRange( name, r );
487 this->m_ZImage->SetScalarRange( name, r );
488 this->m_3DView->SetScalarRange( name, r );
491 // -------------------------------------------------------------------------
492 void cpExtensions::QT::SimpleMPRWidget::
493 SetScalarRange( const std::string& name, double min, double max )
495 this->m_XImage->SetScalarRange( name, min, max );
496 this->m_YImage->SetScalarRange( name, min, max );
497 this->m_ZImage->SetScalarRange( name, min, max );
498 this->m_3DView->SetScalarRange( name, min, max );
501 // -------------------------------------------------------------------------
502 void cpExtensions::QT::SimpleMPRWidget::
503 SetWindowLevel( const std::string& name, double wl[ 2 ] )
505 this->m_XImage->SetWindowLevel( name, wl );
506 this->m_YImage->SetWindowLevel( name, wl );
507 this->m_ZImage->SetWindowLevel( name, wl );
508 this->m_3DView->SetWindowLevel( name, wl );
511 // -------------------------------------------------------------------------
512 void cpExtensions::QT::SimpleMPRWidget::
513 SetWindowLevel( const std::string& name, double w, double l )
515 this->m_XImage->SetWindowLevel( name, w, l );
516 this->m_YImage->SetWindowLevel( name, w, l );
517 this->m_ZImage->SetWindowLevel( name, w, l );
518 this->m_3DView->SetWindowLevel( name, w, l );
521 // -------------------------------------------------------------------------
522 void cpExtensions::QT::SimpleMPRWidget::
523 SetWindow( const std::string& name, double w )
525 this->m_XImage->SetWindow( name, w );
526 this->m_YImage->SetWindow( name, w );
527 this->m_ZImage->SetWindow( name, w );
528 this->m_3DView->SetWindow( name, w );
531 // -------------------------------------------------------------------------
532 void cpExtensions::QT::SimpleMPRWidget::
533 SetLevel( const std::string& name, double l )
535 this->m_XImage->SetLevel( name, l );
536 this->m_YImage->SetLevel( name, l );
537 this->m_ZImage->SetLevel( name, l );
538 this->m_3DView->SetLevel( name, l );
541 // -------------------------------------------------------------------------
542 void cpExtensions::QT::SimpleMPRWidget::
543 SetImageInterpolation( const std::string& name, char i )
545 this->m_XImage->SetImageInterpolation( name, i );
546 this->m_YImage->SetImageInterpolation( name, i );
547 this->m_ZImage->SetImageInterpolation( name, i );
548 this->m_3DView->SetImageInterpolation( name, i );
551 // -------------------------------------------------------------------------
552 void cpExtensions::QT::SimpleMPRWidget::
553 SetColor( const std::string& name, double r, double g, double b )
555 this->m_XImage->SetColor( name, r, g, b );
556 this->m_YImage->SetColor( name, r, g, b );
557 this->m_ZImage->SetColor( name, r, g, b );
558 this->m_3DView->SetColor( name, r, g, b );
561 // -------------------------------------------------------------------------
562 void cpExtensions::QT::SimpleMPRWidget::
563 SetOpacity( const std::string& name, double o )
565 this->m_XImage->SetOpacity( name, o );
566 this->m_YImage->SetOpacity( name, o );
567 this->m_ZImage->SetOpacity( name, o );
568 this->m_3DView->SetOpacity( name, o );
571 // -------------------------------------------------------------------------
572 void cpExtensions::QT::SimpleMPRWidget::
573 SetPointSize( const std::string& name, double s )
575 this->m_XImage->SetPointSize( name, s );
576 this->m_YImage->SetPointSize( name, s );
577 this->m_ZImage->SetPointSize( name, s );
578 this->m_3DView->SetPointSize( name, s );
581 // -------------------------------------------------------------------------
582 void cpExtensions::QT::SimpleMPRWidget::
583 SetLineWidth( const std::string& name, double w )
585 this->m_XImage->SetLineWidth( name, w );
586 this->m_YImage->SetLineWidth( name, w );
587 this->m_ZImage->SetLineWidth( name, w );
588 this->m_3DView->SetLineWidth( name, w );
591 // -------------------------------------------------------------------------
592 void cpExtensions::QT::SimpleMPRWidget::
593 SetRepresentationToPoints( const std::string& name )
595 this->m_XImage->SetRepresentationToPoints( name );
596 this->m_YImage->SetRepresentationToPoints( name );
597 this->m_ZImage->SetRepresentationToPoints( name );
598 this->m_3DView->SetRepresentationToPoints( name );
601 // -------------------------------------------------------------------------
602 void cpExtensions::QT::SimpleMPRWidget::
603 SetRepresentationToSurface( const std::string& name )
605 this->m_XImage->SetRepresentationToSurface( name );
606 this->m_YImage->SetRepresentationToSurface( name );
607 this->m_ZImage->SetRepresentationToSurface( name );
608 this->m_3DView->SetRepresentationToSurface( name );
611 // -------------------------------------------------------------------------
612 void cpExtensions::QT::SimpleMPRWidget::
613 SetRepresentationToWireframe( const std::string& name )
615 this->m_XImage->SetRepresentationToWireframe( name );
616 this->m_YImage->SetRepresentationToWireframe( name );
617 this->m_ZImage->SetRepresentationToWireframe( name );
618 this->m_3DView->SetRepresentationToWireframe( name );
621 // -------------------------------------------------------------------------
622 void cpExtensions::QT::SimpleMPRWidget::
623 _SyncBottom( int a, int b )
625 this->m_UI->Bottom->setSizes( this->m_UI->Top->sizes( ) );
628 // -------------------------------------------------------------------------
629 void cpExtensions::QT::SimpleMPRWidget::
630 _SyncTop( int a, int b )
632 this->m_UI->Top->setSizes( this->m_UI->Bottom->sizes( ) );