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 ),
21 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->GetStyle( )->AddObserver( ev1, cmd );
59 this->m_YImage->GetStyle( )->AddObserver( ev1, cmd );
60 this->m_ZImage->GetStyle( )->AddObserver( ev1, cmd );
61 this->m_XImage->GetStyle( )->AddObserver( ev2, cmd );
62 this->m_YImage->GetStyle( )->AddObserver( ev2, cmd );
63 this->m_ZImage->GetStyle( )->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 ) )
76 // -------------------------------------------------------------------------
77 cpExtensions::QT::SimpleMPRWidget::
83 // -------------------------------------------------------------------------
84 void cpExtensions::QT::SimpleMPRWidget::
85 Configure( char q1, char q2, char q3, char q4 )
88 this->m_UI->Q1->hide( );
89 this->m_UI->Q2->hide( );
90 this->m_UI->Q3->hide( );
91 this->m_UI->Q4->hide( );
92 this->m_UI->Q1->close( );
93 this->m_UI->Q2->close( );
94 this->m_UI->Q3->close( );
95 this->m_UI->Q4->close( );
98 if ( q1 == 'x' ) this->m_UI->Top->addWidget( this->m_XImage );
99 else if( q1 == 'y' ) this->m_UI->Top->addWidget( this->m_YImage );
100 else if( q1 == 'z' ) this->m_UI->Top->addWidget( this->m_ZImage );
101 else if( q1 == 'w' ) this->m_UI->Top->addWidget( this->m_3DView );
102 if ( q2 == 'x' ) this->m_UI->Top->addWidget( this->m_XImage );
103 else if( q2 == 'y' ) this->m_UI->Top->addWidget( this->m_YImage );
104 else if( q2 == 'z' ) this->m_UI->Top->addWidget( this->m_ZImage );
105 else if( q2 == 'w' ) this->m_UI->Top->addWidget( this->m_3DView );
106 this->m_UI->Top->update( );
107 if ( q4 == 'x' ) this->m_UI->Bottom->addWidget( this->m_XImage );
108 else if( q4 == 'y' ) this->m_UI->Bottom->addWidget( this->m_YImage );
109 else if( q4 == 'z' ) this->m_UI->Bottom->addWidget( this->m_ZImage );
110 else if( q4 == 'w' ) this->m_UI->Bottom->addWidget( this->m_3DView );
111 if ( q3 == 'x' ) this->m_UI->Bottom->addWidget( this->m_XImage );
112 else if( q3 == 'y' ) this->m_UI->Bottom->addWidget( this->m_YImage );
113 else if( q3 == 'z' ) this->m_UI->Bottom->addWidget( this->m_ZImage );
114 else if( q3 == 'w' ) this->m_UI->Bottom->addWidget( this->m_3DView );
115 this->m_UI->Bottom->update( );
118 if ( q1 == 'x' ) this->m_UI->Q1 = this->m_XImage;
119 else if( q1 == 'y' ) this->m_UI->Q1 = this->m_YImage;
120 else if( q1 == 'z' ) this->m_UI->Q1 = this->m_ZImage;
121 else if( q1 == 'w' ) this->m_UI->Q1 = this->m_3DView;
122 if ( q2 == 'x' ) this->m_UI->Q2 = this->m_XImage;
123 else if( q2 == 'y' ) this->m_UI->Q2 = this->m_YImage;
124 else if( q2 == 'z' ) this->m_UI->Q2 = this->m_ZImage;
125 else if( q2 == 'w' ) this->m_UI->Q2 = this->m_3DView;
126 if ( q3 == 'x' ) this->m_UI->Q3 = this->m_XImage;
127 else if( q3 == 'y' ) this->m_UI->Q3 = this->m_YImage;
128 else if( q3 == 'z' ) this->m_UI->Q3 = this->m_ZImage;
129 else if( q3 == 'w' ) this->m_UI->Q3 = this->m_3DView;
130 if ( q4 == 'x' ) this->m_UI->Q4 = this->m_XImage;
131 else if( q4 == 'y' ) this->m_UI->Q4 = this->m_YImage;
132 else if( q4 == 'z' ) this->m_UI->Q4 = this->m_ZImage;
133 else if( q4 == 'w' ) this->m_UI->Q4 = this->m_3DView;
136 this->m_UI->Q1->show( );
137 this->m_UI->Q2->show( );
138 this->m_UI->Q3->show( );
139 this->m_UI->Q4->show( );
140 dynamic_cast< RendererWidget* >( this->m_UI->Q1 )->SetQuadrant( 1 );
141 dynamic_cast< RendererWidget* >( this->m_UI->Q2 )->SetQuadrant( 2 );
142 dynamic_cast< RendererWidget* >( this->m_UI->Q3 )->SetQuadrant( 3 );
143 dynamic_cast< RendererWidget* >( this->m_UI->Q4 )->SetQuadrant( 4 );
146 // -------------------------------------------------------------------------
147 bool cpExtensions::QT::SimpleMPRWidget::
150 return( this->m_MainImage.GetPointer( ) != NULL );
153 // -------------------------------------------------------------------------
154 void cpExtensions::QT::SimpleMPRWidget::
155 SetImage( vtkImageData* image, const std::string& name )
157 if( this->m_MainImageName != "" || image == NULL )
159 // TODO: Clear visualization
162 this->m_MainImageName = name;
163 this->m_MainImage = image;
165 if( this->m_MainImage != NULL && this->m_MainImageName != "" )
167 this->m_XImage->SetImage( this->m_MainImage, name, 0 );
168 this->m_YImage->SetImage( this->m_MainImage, name, 1 );
169 this->m_ZImage->SetImage( this->m_MainImage, name, 2 );
170 this->m_3DView->SetImage( this->m_MainImage, name );
175 // -------------------------------------------------------------------------
176 bool cpExtensions::QT::SimpleMPRWidget::
177 Add( vtkDataSet* data, const std::string& name )
180 auto image = dynamic_cast< vtkImageData* >( data );
181 auto pdata = dynamic_cast< vtkPolyData* >( data );
185 if( this->m_MainImageName != "" )
187 this->m_XImage->Add( image, name );
188 this->m_YImage->Add( image, name );
189 this->m_ZImage->Add( image, name );
190 // TODO: this->m_3DView->Add( image, name );
193 this->SetImage( image, name );
195 else if( pdata != NULL )
196 this->m_3DView->Add( pdata, name );
202 // -------------------------------------------------------------------------
203 cpExtensions::QT::SimpleMPRWidget::
204 TProps cpExtensions::QT::SimpleMPRWidget::
205 GetViewProps( const std::string& name ) const
208 auto x = this->m_XImage->GetViewProps( name );
209 auto y = this->m_YImage->GetViewProps( name );
210 auto z = this->m_ZImage->GetViewProps( name );
211 auto w = this->m_3DView->GetViewProps( name );
214 if( x != NULL ) props.insert( x );
215 if( y != NULL ) props.insert( y );
216 if( z != NULL ) props.insert( z );
217 if( w != NULL ) props.insert( w );
224 // -------------------------------------------------------------------------
225 cpExtensions::QT::SimpleMPRWidget::
226 TProps cpExtensions::QT::SimpleMPRWidget::
227 GetImageProps( ) const
229 return( this->GetViewProps( this->m_MainImageName ) );
232 // -------------------------------------------------------------------------
233 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
236 return( this->m_XImage->GetInteractor( ) );
239 // -------------------------------------------------------------------------
240 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
241 GetXInteractor( ) const
243 return( this->m_XImage->GetInteractor( ) );
246 // -------------------------------------------------------------------------
247 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
250 return( this->m_YImage->GetInteractor( ) );
253 // -------------------------------------------------------------------------
254 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
255 GetYInteractor( ) const
257 return( this->m_YImage->GetInteractor( ) );
260 // -------------------------------------------------------------------------
261 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
264 return( this->m_ZImage->GetInteractor( ) );
267 // -------------------------------------------------------------------------
268 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
269 GetZInteractor( ) const
271 return( this->m_ZImage->GetInteractor( ) );
274 // -------------------------------------------------------------------------
275 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
278 return( this->m_3DView->GetInteractor( ) );
281 // -------------------------------------------------------------------------
282 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
283 GetWInteractor( ) const
285 return( this->m_3DView->GetInteractor( ) );
288 // -------------------------------------------------------------------------
289 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
292 return( this->m_XImage->GetRenderWindow( ) );
295 // -------------------------------------------------------------------------
296 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
297 GetXRenderWindow( ) const
299 return( this->m_XImage->GetRenderWindow( ) );
302 // -------------------------------------------------------------------------
303 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
306 return( this->m_YImage->GetRenderWindow( ) );
309 // -------------------------------------------------------------------------
310 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
311 GetYRenderWindow( ) const
313 return( this->m_YImage->GetRenderWindow( ) );
316 // -------------------------------------------------------------------------
317 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
320 return( this->m_ZImage->GetRenderWindow( ) );
323 // -------------------------------------------------------------------------
324 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
325 GetZRenderWindow( ) const
327 return( this->m_ZImage->GetRenderWindow( ) );
330 // -------------------------------------------------------------------------
331 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
334 return( this->m_3DView->GetRenderWindow( ) );
338 // -------------------------------------------------------------------------
339 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
340 GetWRenderWindow( ) const
342 return( this->m_3DView->GetRenderWindow( ) );
345 // -------------------------------------------------------------------------
346 void cpExtensions::QT::SimpleMPRWidget::
349 this->m_XImage->ResetCamera( );
350 this->m_YImage->ResetCamera( );
351 this->m_ZImage->ResetCamera( );
352 this->m_3DView->ResetCamera( );
355 // -------------------------------------------------------------------------
356 void cpExtensions::QT::SimpleMPRWidget::
359 this->m_XImage->Render( );
360 this->m_YImage->Render( );
361 this->m_ZImage->Render( );
362 this->m_3DView->Render( );
365 // -------------------------------------------------------------------------
366 std::set< vtkRenderWindowInteractor* > cpExtensions::QT::SimpleMPRWidget::
367 GetInteractors( ) const
369 std::set< vtkRenderWindowInteractor* > ret;
370 ret.insert( this->m_XImage->GetInteractor( ) );
371 ret.insert( this->m_YImage->GetInteractor( ) );
372 ret.insert( this->m_ZImage->GetInteractor( ) );
373 ret.insert( this->m_3DView->GetInteractor( ) );
377 // -------------------------------------------------------------------------
378 std::set< std::string > cpExtensions::QT::SimpleMPRWidget::
379 GetActorsNames( ) const
381 std::set< std::string > names = this->m_XImage->GetActorsNames( );
382 std::set< std::string > y = this->m_YImage->GetActorsNames( );
383 std::set< std::string > z = this->m_ZImage->GetActorsNames( );
384 std::set< std::string > w = this->m_3DView->GetActorsNames( );
385 names.insert( y.begin( ), y.end( ) );
386 names.insert( z.begin( ), z.end( ) );
387 names.insert( w.begin( ), w.end( ) );
391 // -------------------------------------------------------------------------
392 bool cpExtensions::QT::SimpleMPRWidget::
393 IsWindowLevelImageActor( const std::string& name ) const
395 return( this->m_XImage->IsWindowLevelImageActor( name ) );
398 // -------------------------------------------------------------------------
399 bool cpExtensions::QT::SimpleMPRWidget::
400 IsLUTImageActor( const std::string& name ) const
402 return( this->m_XImage->IsLUTImageActor( name ) );
405 // -------------------------------------------------------------------------
406 bool cpExtensions::QT::SimpleMPRWidget::
407 Is3DActor( const std::string& name ) const
410 this->m_XImage->Is3DActor( name ) || this->m_3DView->Is3DActor( name )
414 // -------------------------------------------------------------------------
415 void cpExtensions::QT::SimpleMPRWidget::
416 GetScalarRange( const std::string& name, double r[ 2 ] ) const
418 this->m_XImage->GetScalarRange( name, r );
421 // -------------------------------------------------------------------------
422 void cpExtensions::QT::SimpleMPRWidget::
423 GetWindowLevel( const std::string& name, double wl[ 2 ] ) const
425 this->m_XImage->GetWindowLevel( name, wl );
428 // -------------------------------------------------------------------------
429 double cpExtensions::QT::SimpleMPRWidget::
430 GetWindow( const std::string& name ) const
432 return( this->m_XImage->GetWindow( name ) );
435 // -------------------------------------------------------------------------
436 double cpExtensions::QT::SimpleMPRWidget::
437 GetLevel( const std::string& name ) const
439 return( this->m_XImage->GetLevel( name ) );
442 // -------------------------------------------------------------------------
443 char cpExtensions::QT::SimpleMPRWidget::
444 GetImageInterpolation( const std::string& name ) const
446 return( this->m_XImage->GetImageInterpolation( name ) );
449 // -------------------------------------------------------------------------
450 void cpExtensions::QT::SimpleMPRWidget::
451 GetColor( const std::string& name, double& r, double& g, double& b ) const
453 this->m_XImage->GetColor( name, r, g, b );
456 // -------------------------------------------------------------------------
457 double cpExtensions::QT::SimpleMPRWidget::
458 GetOpacity( const std::string& name ) const
460 return( this->m_XImage->GetOpacity( name ) );
463 // -------------------------------------------------------------------------
464 double cpExtensions::QT::SimpleMPRWidget::
465 GetPointSize( const std::string& name ) const
467 return( this->m_XImage->GetPointSize( name ) );
470 // -------------------------------------------------------------------------
471 double cpExtensions::QT::SimpleMPRWidget::
472 GetLineWidth( const std::string& name ) const
474 return( this->m_XImage->GetLineWidth( name ) );
477 // -------------------------------------------------------------------------
478 int cpExtensions::QT::SimpleMPRWidget::
479 GetRepresentation( const std::string& name ) const
481 return( this->m_XImage->GetRepresentation( name ) );
484 // -------------------------------------------------------------------------
485 void cpExtensions::QT::SimpleMPRWidget::
486 SetScalarRange( const std::string& name, double r[ 2 ] )
488 this->m_XImage->SetScalarRange( name, r );
489 this->m_YImage->SetScalarRange( name, r );
490 this->m_ZImage->SetScalarRange( name, r );
491 this->m_3DView->SetScalarRange( name, r );
494 // -------------------------------------------------------------------------
495 void cpExtensions::QT::SimpleMPRWidget::
496 SetScalarRange( const std::string& name, double min, double max )
498 this->m_XImage->SetScalarRange( name, min, max );
499 this->m_YImage->SetScalarRange( name, min, max );
500 this->m_ZImage->SetScalarRange( name, min, max );
501 this->m_3DView->SetScalarRange( name, min, max );
504 // -------------------------------------------------------------------------
505 void cpExtensions::QT::SimpleMPRWidget::
506 SetWindowLevel( const std::string& name, double wl[ 2 ] )
508 this->m_XImage->SetWindowLevel( name, wl );
509 this->m_YImage->SetWindowLevel( name, wl );
510 this->m_ZImage->SetWindowLevel( name, wl );
511 this->m_3DView->SetWindowLevel( name, wl );
514 // -------------------------------------------------------------------------
515 void cpExtensions::QT::SimpleMPRWidget::
516 SetWindowLevel( const std::string& name, double w, double l )
518 this->m_XImage->SetWindowLevel( name, w, l );
519 this->m_YImage->SetWindowLevel( name, w, l );
520 this->m_ZImage->SetWindowLevel( name, w, l );
521 this->m_3DView->SetWindowLevel( name, w, l );
524 // -------------------------------------------------------------------------
525 void cpExtensions::QT::SimpleMPRWidget::
526 SetWindow( const std::string& name, double w )
528 this->m_XImage->SetWindow( name, w );
529 this->m_YImage->SetWindow( name, w );
530 this->m_ZImage->SetWindow( name, w );
531 this->m_3DView->SetWindow( name, w );
534 // -------------------------------------------------------------------------
535 void cpExtensions::QT::SimpleMPRWidget::
536 SetLevel( const std::string& name, double l )
538 this->m_XImage->SetLevel( name, l );
539 this->m_YImage->SetLevel( name, l );
540 this->m_ZImage->SetLevel( name, l );
541 this->m_3DView->SetLevel( name, l );
544 // -------------------------------------------------------------------------
545 void cpExtensions::QT::SimpleMPRWidget::
546 SetImageInterpolation( const std::string& name, char i )
548 this->m_XImage->SetImageInterpolation( name, i );
549 this->m_YImage->SetImageInterpolation( name, i );
550 this->m_ZImage->SetImageInterpolation( name, i );
551 this->m_3DView->SetImageInterpolation( name, i );
554 // -------------------------------------------------------------------------
555 void cpExtensions::QT::SimpleMPRWidget::
556 SetColor( const std::string& name, double r, double g, double b )
558 this->m_XImage->SetColor( name, r, g, b );
559 this->m_YImage->SetColor( name, r, g, b );
560 this->m_ZImage->SetColor( name, r, g, b );
561 this->m_3DView->SetColor( name, r, g, b );
564 // -------------------------------------------------------------------------
565 void cpExtensions::QT::SimpleMPRWidget::
566 SetOpacity( const std::string& name, double o )
568 this->m_XImage->SetOpacity( name, o );
569 this->m_YImage->SetOpacity( name, o );
570 this->m_ZImage->SetOpacity( name, o );
571 this->m_3DView->SetOpacity( name, o );
574 // -------------------------------------------------------------------------
575 void cpExtensions::QT::SimpleMPRWidget::
576 SetPointSize( const std::string& name, double s )
578 this->m_XImage->SetPointSize( name, s );
579 this->m_YImage->SetPointSize( name, s );
580 this->m_ZImage->SetPointSize( name, s );
581 this->m_3DView->SetPointSize( name, s );
584 // -------------------------------------------------------------------------
585 void cpExtensions::QT::SimpleMPRWidget::
586 SetLineWidth( const std::string& name, double w )
588 this->m_XImage->SetLineWidth( name, w );
589 this->m_YImage->SetLineWidth( name, w );
590 this->m_ZImage->SetLineWidth( name, w );
591 this->m_3DView->SetLineWidth( name, w );
594 // -------------------------------------------------------------------------
595 void cpExtensions::QT::SimpleMPRWidget::
596 SetRepresentationToPoints( const std::string& name )
598 this->m_XImage->SetRepresentationToPoints( name );
599 this->m_YImage->SetRepresentationToPoints( name );
600 this->m_ZImage->SetRepresentationToPoints( name );
601 this->m_3DView->SetRepresentationToPoints( name );
604 // -------------------------------------------------------------------------
605 void cpExtensions::QT::SimpleMPRWidget::
606 SetRepresentationToSurface( const std::string& name )
608 this->m_XImage->SetRepresentationToSurface( name );
609 this->m_YImage->SetRepresentationToSurface( name );
610 this->m_ZImage->SetRepresentationToSurface( name );
611 this->m_3DView->SetRepresentationToSurface( name );
614 // -------------------------------------------------------------------------
615 void cpExtensions::QT::SimpleMPRWidget::
616 SetRepresentationToWireframe( const std::string& name )
618 this->m_XImage->SetRepresentationToWireframe( name );
619 this->m_YImage->SetRepresentationToWireframe( name );
620 this->m_ZImage->SetRepresentationToWireframe( name );
621 this->m_3DView->SetRepresentationToWireframe( name );
624 // -------------------------------------------------------------------------
625 void cpExtensions::QT::SimpleMPRWidget::
626 _SyncBottom( int a, int b )
628 this->m_UI->Bottom->setSizes( this->m_UI->Top->sizes( ) );
631 // -------------------------------------------------------------------------
632 void cpExtensions::QT::SimpleMPRWidget::
633 _SyncTop( int a, int b )
635 this->m_UI->Top->setSizes( this->m_UI->Bottom->sizes( ) );
638 #endif // cpExtensions_QT4