]> Creatis software - cpPlugins.git/blob - lib/cpExtensions/QT/SimpleMPRWidget.cxx
Start contour tracer widget debugging: change interactor style.
[cpPlugins.git] / lib / cpExtensions / QT / SimpleMPRWidget.cxx
1 #include <cpExtensions/QT/SimpleMPRWidget.h>
2
3 #ifdef cpExtensions_QT4
4
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>
10
11 #include <vtkImageData.h>
12 #include <vtkPolyData.h>
13 #include <vtkProp.h>
14 #include <vtkPropCollection.h>
15
16 // -------------------------------------------------------------------------
17 cpExtensions::QT::SimpleMPRWidget::
18 SimpleMPRWidget( QWidget* parent, Qt::WindowFlags f )
19   : Superclass( parent, f ),
20     m_UI( new Ui::SimpleMPRWidget ),
21     m_MainImageName( "" )
22 {
23 /*
24   this->m_UI->setupUi( this );
25
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' );
48
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 );
64
65   // Connect slots
66   this->connect(
67     this->m_UI->Top, SIGNAL( splitterMoved( int, int ) ),
68     this, SLOT( _SyncBottom( int, int ) )
69     );
70   this->connect(
71     this->m_UI->Bottom, SIGNAL( splitterMoved( int, int ) ),
72     this, SLOT( _SyncTop( int, int ) )
73     );
74   this->connect(
75     this->m_UI->ConfigurationButton, SIGNAL( clicked( ) ),
76     this, SLOT( _ConfigurationButton( ) )
77     );
78 */
79 }
80
81 // -------------------------------------------------------------------------
82 cpExtensions::QT::SimpleMPRWidget::
83 ~SimpleMPRWidget( )
84 {
85   delete this->m_UI;
86 }
87
88 // -------------------------------------------------------------------------
89 void cpExtensions::QT::SimpleMPRWidget::
90 Configure( char q1, char q2, char q3, char q4 )
91 {
92   // Hide all widgets
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( );
101
102   // Reorder them
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( );
121
122   // Keep track
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;
139
140   // Draw all
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 );
149 }
150
151 // -------------------------------------------------------------------------
152 bool cpExtensions::QT::SimpleMPRWidget::
153 HasImage( ) const
154 {
155   return( this->m_MainImage.GetPointer( ) != NULL );
156 }
157
158 // -------------------------------------------------------------------------
159 void cpExtensions::QT::SimpleMPRWidget::
160 SetImage( vtkImageData* image, const std::string& name )
161 {
162   if( this->m_MainImageName != "" || image == NULL )
163   {
164     // TODO: Clear visualization
165
166   } // fi
167   this->m_MainImageName = name;
168   this->m_MainImage = image;
169
170   if( this->m_MainImage != NULL && this->m_MainImageName != "" )
171   {
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 );
176
177   } // fi
178 }
179
180 // -------------------------------------------------------------------------
181 bool cpExtensions::QT::SimpleMPRWidget::
182 Add( vtkDataSet* data, const std::string& name )
183 {
184   bool success = true;
185 /*
186   auto image = dynamic_cast< vtkImageData* >( data );
187   auto pdata = dynamic_cast< vtkPolyData* >( data );
188
189   if( image != NULL )
190   {
191     if( this->m_MainImageName != "" )
192     {
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 );
197     }
198     else
199       this->SetImage( image, name );
200   }
201   else if( pdata != NULL )
202     this->m_3DView->Add( pdata, name );
203   else
204     success = false;
205 */
206   return( success );
207 }
208
209 // -------------------------------------------------------------------------
210 cpExtensions::QT::SimpleMPRWidget::
211 TProps cpExtensions::QT::SimpleMPRWidget::
212 GetViewProps( const std::string& name ) const
213 {
214 /*
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 );
219
220   TProps props;
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 );
225   return( props );
226 */
227 }
228
229 // -------------------------------------------------------------------------
230 cpExtensions::QT::SimpleMPRWidget::
231 TProps cpExtensions::QT::SimpleMPRWidget::
232 GetImageProps( ) const
233 {
234   return( this->GetViewProps( this->m_MainImageName ) );
235 }
236
237 // -------------------------------------------------------------------------
238 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
239 GetXInteractor( )
240 {
241   return( this->m_XImage->GetInteractor( ) );
242 }
243
244 // -------------------------------------------------------------------------
245 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
246 GetXInteractor( ) const
247 {
248   return( this->m_XImage->GetInteractor( ) );
249 }
250
251 // -------------------------------------------------------------------------
252 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
253 GetYInteractor( )
254 {
255   return( this->m_YImage->GetInteractor( ) );
256 }
257
258 // -------------------------------------------------------------------------
259 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
260 GetYInteractor( ) const
261 {
262   return( this->m_YImage->GetInteractor( ) );
263 }
264
265 // -------------------------------------------------------------------------
266 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
267 GetZInteractor( )
268 {
269   return( this->m_ZImage->GetInteractor( ) );
270 }
271
272 // -------------------------------------------------------------------------
273 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
274 GetZInteractor( ) const
275 {
276   return( this->m_ZImage->GetInteractor( ) );
277 }
278
279 // -------------------------------------------------------------------------
280 vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
281 GetWInteractor( )
282 {
283   return( this->m_3DView->GetInteractor( ) );
284 }
285
286 // -------------------------------------------------------------------------
287 const vtkRenderWindowInteractor* cpExtensions::QT::SimpleMPRWidget::
288 GetWInteractor( ) const
289 {
290   return( this->m_3DView->GetInteractor( ) );
291 }
292
293 // -------------------------------------------------------------------------
294 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
295 GetXRenderWindow( )
296 {
297   return( this->m_XImage->GetRenderWindow( ) );
298 }
299
300 // -------------------------------------------------------------------------
301 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
302 GetXRenderWindow( ) const
303 {
304   return( this->m_XImage->GetRenderWindow( ) );
305 }
306
307 // -------------------------------------------------------------------------
308 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
309 GetYRenderWindow( )
310 {
311   return( this->m_YImage->GetRenderWindow( ) );
312 }
313
314 // -------------------------------------------------------------------------
315 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
316 GetYRenderWindow( ) const
317 {
318   return( this->m_YImage->GetRenderWindow( ) );
319 }
320
321 // -------------------------------------------------------------------------
322 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
323 GetZRenderWindow( )
324 {
325   return( this->m_ZImage->GetRenderWindow( ) );
326 }
327
328 // -------------------------------------------------------------------------
329 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
330 GetZRenderWindow( ) const
331 {
332   return( this->m_ZImage->GetRenderWindow( ) );
333 }
334
335 // -------------------------------------------------------------------------
336 vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
337 GetWRenderWindow( )
338 {
339   return( this->m_3DView->GetRenderWindow( ) );
340 }
341
342
343 // -------------------------------------------------------------------------
344 const vtkRenderWindow* cpExtensions::QT::SimpleMPRWidget::
345 GetWRenderWindow( ) const
346 {
347   return( this->m_3DView->GetRenderWindow( ) );
348 }
349
350 // -------------------------------------------------------------------------
351 void cpExtensions::QT::SimpleMPRWidget::
352 GetScalarRange( double r[ 2 ] ) const
353 {
354 //  this->m_XImage->GetScalarRange( r );
355 }
356
357 // -------------------------------------------------------------------------
358 void cpExtensions::QT::SimpleMPRWidget::
359 GetWindowLevel( double wl[ 2 ] ) const
360 {
361 //  this->m_XImage->GetWindowLevel( wl );
362 }
363
364 // -------------------------------------------------------------------------
365 double cpExtensions::QT::SimpleMPRWidget::
366 GetImageOpacity( ) const
367 {
368 //  return( this->m_XImage->GetImageOpacity( ) );
369 }
370
371 // -------------------------------------------------------------------------
372 unsigned char cpExtensions::QT::SimpleMPRWidget::
373 GetImageInterpolation( ) const
374 {
375 //  return( this->m_XImage->GetImageInterpolation( ) );
376 }
377
378 // -------------------------------------------------------------------------
379 void cpExtensions::QT::SimpleMPRWidget::
380 SetScalarRange( double r[ 2 ] )
381 {
382 /*
383   this->m_XImage->SetScalarRange( r );
384   this->m_YImage->SetScalarRange( r );
385   this->m_ZImage->SetScalarRange( r );
386   this->m_3DView->SetScalarRange( r );
387 */
388 }
389
390 // -------------------------------------------------------------------------
391 void cpExtensions::QT::SimpleMPRWidget::
392 SetWindowLevel( double wl[ 2 ] )
393 {
394 /*
395   this->m_XImage->SetWindowLevel( wl );
396   this->m_YImage->SetWindowLevel( wl );
397   this->m_ZImage->SetWindowLevel( wl );
398   this->m_3DView->SetWindowLevel( wl );
399 */
400 }
401
402 // -------------------------------------------------------------------------
403 void cpExtensions::QT::SimpleMPRWidget::
404 SetImageOpacity( double o )
405 {
406 /*
407   this->m_XImage->SetImageOpacity( o );
408   this->m_YImage->SetImageOpacity( o );
409   this->m_ZImage->SetImageOpacity( o );
410   this->m_3DView->SetImageOpacity( o );
411 */
412 }
413
414 // -------------------------------------------------------------------------
415 void cpExtensions::QT::SimpleMPRWidget::
416 SetImageInterpolation( unsigned char i )
417 {
418   /*
419   this->m_XImage->SetImageInterpolation( i );
420   this->m_YImage->SetImageInterpolation( i );
421   this->m_ZImage->SetImageInterpolation( i );
422   this->m_3DView->SetImageInterpolation( i );
423 */
424 }
425
426 // -------------------------------------------------------------------------
427 void cpExtensions::QT::SimpleMPRWidget::
428 ResetCameras( )
429 {
430 /*
431   this->m_XImage->ResetCamera( );
432   this->m_YImage->ResetCamera( );
433   this->m_ZImage->ResetCamera( );
434   this->m_3DView->ResetCamera( );
435 */
436 }
437
438 // -------------------------------------------------------------------------
439 void cpExtensions::QT::SimpleMPRWidget::
440 Render( )
441 {
442 /*
443   this->m_XImage->Render( );
444   this->m_YImage->Render( );
445   this->m_ZImage->Render( );
446   this->m_3DView->Render( );
447 */
448 }
449
450 // -------------------------------------------------------------------------
451 void cpExtensions::QT::SimpleMPRWidget::
452 _SyncBottom( int a, int b )
453 {
454   this->m_UI->Bottom->setSizes( this->m_UI->Top->sizes( ) );
455 }
456
457 // -------------------------------------------------------------------------
458 void cpExtensions::QT::SimpleMPRWidget::
459 _SyncTop( int a, int b )
460 {
461   this->m_UI->Top->setSizes( this->m_UI->Bottom->sizes( ) );
462 }
463
464 // -------------------------------------------------------------------------
465 void cpExtensions::QT::SimpleMPRWidget::
466 _ConfigurationButton( )
467 {
468   auto dlg = new cpExtensions::QT::ConfigurationChooser( NULL );
469   dlg->setData( this );
470   dlg->exec( );
471 }
472
473 #endif // cpExtensions_QT4
474
475 // eof - $RCSfile$