]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracas_ViewerWidget.cxx
Divides in two panels the Surface/Volume tab. It was changed only the class "maracasV...
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracas_ViewerWidget.cxx
1 /*=========================================================================
2
3   Program:   wxMaracas
4   Module:    $RCSfile: wxMaracas_ViewerWidget.cxx,v $
5   Language:  C++
6   Date:      $Date: 2010/03/17 16:52:51 $
7   Version:   $Revision: 1.24 $
8
9   Copyright: (c) 2002, 2003
10   License:
11   
12      This software is distributed WITHOUT ANY WARRANTY; without even 
13      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
14      PURPOSE.  See the above copyright notice for more information.
15
16 =========================================================================*/
17
18 //------------------------------------------------------------------------------------------------------------
19 // Definition includes
20 //------------------------------------------------------------------------------------------------------------
21 #include "wxMaracas_ViewerWidget.h"
22 #include <wx/notebook.h>
23 //------------------------------------------------------------------------------------------------------------
24 // Other includes
25 //------------------------------------------------------------------------------------------------------------
26
27
28         //------------------------------------------------------------------------------------------------------------
29         // Constructors & Destructors
30         //------------------------------------------------------------------------------------------------------------
31
32
33         wxMaracas_ViewerWidget::wxMaracas_ViewerWidget(wxWindow *parent, vtkImageData* imagedata, int type, vtkMPRBaseData *vtkmprbasedata)
34                 : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
35         {
36                 wxPanel *panel = this;
37                 wxWindow *wxwindow = NULL, *window3D    = 0;            
38                 wxSplitterWindow        *panelClipping3D        = 0;
39 //              wxPanel *panelControl                                   = 0;
40 //              wxFlexGridSizer  *sizerCtrol                    = 0;            
41                 wxPanel *controlPanelMPR3D                              = 0;
42                 wxPanel *controlPanelClippingSurf3D             = 0;
43                 //RaC 03-2010 Adding a tab
44                 wxPanel *controlPanelClippingVol3D              = 0;
45
46                 wxBoxSizer *sizer                                               = 0;
47
48
49                 mType = type;
50
51                 
52                 if (vtkmprbasedata==NULL)
53                 {
54                         minternalVtkmprbasedata                 = true;
55                         mvtkmprbasedata                                 = new vtkMPRBaseData(); 
56                         marImageData    *marimagedata   = new marImageData( imagedata );                        
57                         mvtkmprbasedata->SetMarImageData(marimagedata);
58                 } else {
59                         minternalVtkmprbasedata                 = false;
60                         mvtkmprbasedata                                 = vtkmprbasedata; 
61                 }
62                 
63
64                 mvtk2Dbaseview                          = NULL;
65                 mvtkmpr2Dview_X                         = NULL;
66                 mvtkmpr2Dview_Y                         = NULL;
67                 mvtkmpr2Dview_Z                         = NULL;
68                 mvtkplane2Dview                         = NULL;
69                 mwidgetMesure                           = NULL;
70                 mwxsphereview                           = NULL;
71                 mwxvtkclipping3Dview            = NULL;
72                 mwxvtk3Dbaseview_Clipping3D     = NULL;
73                 mwxvtkmpr3Dview                         = NULL;
74                 vtkmpr3Ddataviewer                      = NULL;
75
76
77                 if (type==-1)
78                 {
79                         mvtk2Dbaseview  = new wxVtk2DBaseView(panel);
80                         mvtk2Dbaseview->SetVtkBaseData(mvtkmprbasedata);
81                         wxwindow                = mvtk2Dbaseview->GetWxVTKRenderWindowInteractor();
82                 }else if (type==0)
83                 {
84                         mvtkmpr2Dview_Z = new wxVtkMPR2DView(panel,2);
85                         mvtkmpr2Dview_Z->SetVtkBaseData(mvtkmprbasedata);
86                         wxwindow                = mvtkmpr2Dview_Z->GetWxVTKRenderWindowInteractor();
87                 }else if (type==1)
88                 {
89                         mvtkmpr2Dview_X = new wxVtkMPR2DView(panel,0);
90                         mvtkmpr2Dview_X->SetVtkBaseData(mvtkmprbasedata);
91                         wxwindow                =       mvtkmpr2Dview_X->GetWxVTKRenderWindowInteractor();
92                 }else if (type==2)
93                 {
94                         mvtkmpr2Dview_Y = new wxVtkMPR2DView(panel,1);
95                         mvtkmpr2Dview_Y->SetVtkBaseData(mvtkmprbasedata);
96                         wxwindow                = mvtkmpr2Dview_Y->GetWxVTKRenderWindowInteractor();
97                 }else if (type==3)
98                 {
99                         mwidgetMesure           = new wxWidgetMesure2D_Plane_in_MPR(panel);
100                         mvtkplane2Dview         = new vtkPlane2DView( mwidgetMesure->GetWindow2());
101                         mwidgetMesure   -> SetVtkPlane2DView( mvtkplane2Dview );
102                         mvtkplane2Dview -> SetImgSize( 200 );
103                         mvtkplane2Dview -> SetVtkBaseData(mvtkmprbasedata);
104                         wxwindow                        = mwidgetMesure;
105                 }else if (type==4)
106                 {
107                         mwxsphereview           = new wxSphereView( panel , mvtkmprbasedata, mvtkmprbasedata->GetImageData() );
108                         wxwindow=mwxsphereview->GetWxVTKRenderWindowInteractor();
109                 }else if (type==5)
110                 {
111                         panelClipping3D = new wxSplitterWindow( panel , -1);
112                         mwxvtk3Dbaseview_Clipping3D                             = new wxVtk3DBaseView( panelClipping3D );
113
114                         mwxvtkclipping3Dview                                            = new wxVtkClipping3DView(mwxvtk3Dbaseview_Clipping3D);
115                         vtkClipping3DDataViewer *vtkclipping3Ddataviewer = new vtkClipping3DDataViewer(); 
116                         vtkclipping3Ddataviewer->SetVtkMPRBaseData(mvtkmprbasedata);
117                         vtkclipping3Ddataviewer->Configure();
118                         mwxvtkclipping3Dview->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer);
119
120                         mwxvtkmpr3Dview                                                 = new wxVtkMPR3DView( mwxvtk3Dbaseview_Clipping3D );
121                         vtkMPR3DDataViewer *vtkmpr3Ddataviewer  = new vtkMPR3DDataViewer(); 
122                         vtkmpr3Ddataviewer->SetVtkMPRBaseData(mvtkmprbasedata);
123                         vtkmpr3Ddataviewer->Configure();
124                         mwxvtkmpr3Dview->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
125
126                         window3D = mwxvtk3Dbaseview_Clipping3D->GetWxVTKRenderWindowInteractor();
127
128
129 //--                    
130                         wxNotebook *notebook = new wxNotebook(panelClipping3D, -1);
131
132                         // First tab
133                         controlPanelMPR3D               = mwxvtkmpr3Dview->CreateControlPanel(notebook, true);
134                         notebook->AddPage(controlPanelMPR3D, _T("Planes") );
135
136                         // Second Tab
137                         controlPanelClippingSurf3D      = mwxvtkclipping3Dview->CreateSurfControlPanel(notebook);                       
138                         notebook->AddPage(controlPanelClippingSurf3D, _T("Surface") );
139                         
140                         //Third tab
141                         //RaC 03-2010 Moving the volume functionnality to other tab. The changes were realized only in the wxVtkClipping3DViewCntrlPanel class
142                         controlPanelClippingVol3D       = mwxvtkclipping3Dview->CreateVolControlPanel(notebook);
143                         notebook->AddPage(controlPanelClippingVol3D, _T("Volume") );
144
145
146                         panelClipping3D -> SplitHorizontally( notebook , window3D , 10  );
147                         panelClipping3D -> SetMinimumPaneSize( 15 );
148                         
149         /*              EED 04 / Febrary / 2010
150                         panelControl                    = new wxPanel(panelClipping3D,-1);      
151                         controlPanelMPR3D               = mwxvtkmpr3Dview->CreateControlPanel(panelControl, false);
152                         controlPanelClipping3D  = mwxvtkclipping3Dview->CreateControlPanel(panelControl);
153         //                               mbtnCutImageData               = new wxCheckBox(panelControl,-1,_T("Cut Module"));
154         //              Connect(_btnCutImageData->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED  , (wxObjectEventFunction) &wxMPRWidget::OnCutImagaData );
155                         sizerCtrol             = new wxFlexGridSizer(1);
156                         sizerCtrol->Add(controlPanelMPR3D               , 1, wxALL|wxEXPAND, 2);
157                         sizerCtrol->Add(controlPanelClipping3D  , 1, wxALL|wxEXPAND, 2);
158         //              sizerCtrol->Add( mbtnCutImageData               , 1, wxALL, 2);
159                         panelControl->SetAutoLayout(true);
160                         panelControl->SetSizer(sizerCtrol);
161                         panelControl->SetSize(400,350);
162                         panelControl->Layout();
163                         panelClipping3D -> SplitHorizontally( panelControl , window3D , 10  );
164                         panelClipping3D -> SetMinimumPaneSize( 5 );
165          */
166                         wxwindow=panelClipping3D;
167                         
168                 } else if (type==6)             {
169                         panelClipping3D = new wxSplitterWindow( panel , -1);
170                         mwxvtk3Dbaseview_Clipping3D                             = new wxVtk3DBaseView( panelClipping3D );
171
172                         mwxvtkmpr3Dview                                                 = new wxVtkMPR3DView( mwxvtk3Dbaseview_Clipping3D );
173
174                         vtkmpr3Ddataviewer      = new vtkMPR3DDataViewer();     
175                         
176                         wxWindow        *window3D                                       = mwxvtk3Dbaseview_Clipping3D->GetWxVTKRenderWindowInteractor();
177
178                         wxPanel                 *panelControl                   = new wxPanel(panelClipping3D,-1);      
179                         wxPanel                 *controlPanelMPR3D              = mwxvtkmpr3Dview->CreateControlPanel(panelControl, false);
180
181                         wxFlexGridSizer  *sizerCtrol             = new wxFlexGridSizer(1);
182                         sizerCtrol->Add(controlPanelMPR3D               , 1, wxALL|wxEXPAND, 2);
183
184                         panelControl->SetAutoLayout(true);
185                         panelControl->SetSizer(sizerCtrol);
186                         panelControl->SetSize(400,350);
187                         panelControl->Layout();
188                         panelClipping3D -> SetMinimumPaneSize( 5 );
189                         panelClipping3D -> SplitHorizontally( panelControl , window3D , 10  );
190                         wxwindow=panelClipping3D;
191
192
193                         vtkmpr3Ddataviewer->SetVtkMPRBaseData(mvtkmprbasedata);                 
194                         //vtkmpr3Ddataviewer->Configure();
195
196                         mwxvtkmpr3Dview->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
197                         
198                 }else if (type==7)
199                 {       
200                         
201                         mwxvtk3Dbaseview_Clipping3D                             = new wxVtk3DBaseView( panel );                                         
202                         wxwindow = (wxWindow*) mwxvtk3Dbaseview_Clipping3D->GetWxVTKRenderWindowInteractor();
203                         
204
205                 }
206
207    
208         sizer = new wxBoxSizer(wxVERTICAL);
209         sizer->Add( wxwindow , 1, wxGROW);      
210         panel->SetSizer(sizer);
211         panel->SetAutoLayout(true);
212         sizer->Layout();
213         panel->Layout();
214         panel->Refresh();
215
216         //   mbbtkViewerMaracas= NULL;
217         }
218         //-------------------------------------------------------------------------
219           
220         wxMaracas_ViewerWidget::~wxMaracas_ViewerWidget()
221         {
222                 
223                 if (minternalVtkmprbasedata==true)
224                 {
225                         if (mvtkmprbasedata)                    { delete mvtkmprbasedata;  }
226                 }       
227                 
228                 if (mvtk2Dbaseview)                             { delete mvtk2Dbaseview; }
229                 if (mvtkmpr2Dview_X)                    { delete mvtkmpr2Dview_X; }
230                 if (mvtkmpr2Dview_Y)                    { delete mvtkmpr2Dview_Y; }
231                 if (mvtkmpr2Dview_Z)                    { delete mvtkmpr2Dview_Z; }
232                 if (mwidgetMesure)                              { delete mwidgetMesure; }
233                 if (mvtkplane2Dview)                    { delete mvtkplane2Dview; }
234                 if (mwxsphereview)                              { delete mwxsphereview; }
235                 if (mwxvtkmpr3Dview)                    { delete mwxvtkmpr3Dview; }
236                 if (mwxvtkclipping3Dview)               { delete mwxvtkclipping3Dview; }
237                 if (mwxvtk3Dbaseview_Clipping3D){ delete mwxvtk3Dbaseview_Clipping3D; mwxvtk3Dbaseview_Clipping3D=NULL;}
238         }
239         //------------------------------------------------------------------------------------------------------------
240         // Methods
241         //------------------------------------------------------------------------------------------------------------
242
243         //-------------------------------------------------------------------------
244         
245
246         void wxMaracas_ViewerWidget::ConfigureVTK()
247         {
248                 int x=0,y=0,z=0;
249                 int ext[6];
250                 ext[0]=0;
251                 ext[1]=0;
252                 ext[2]=0;
253                 ext[3]=0;
254                 ext[4]=0;
255                 ext[5]=0;
256                 double org[3],spc[3];
257                 org[0]=0;
258                 org[1]=0;
259                 org[2]=0;
260                 spc[0]=0;
261                 spc[1]=0;
262                 spc[2]=0;
263                 
264
265
266                 if (mvtkmprbasedata!=NULL)
267                 {
268                         mvtkmprbasedata->Configure();
269                         /*x = mvtkmprbasedata   ->      GetMaxPositionX()/2;
270                         y = mvtkmprbasedata     ->      GetMaxPositionY()/2;
271                         z = mvtkmprbasedata     ->      GetMaxPositionZ()/2;            */      
272                         
273                         if(mvtkmprbasedata->GetImageData() != NULL)
274                         {
275                                 mvtkmprbasedata->GetImageData()->GetExtent(ext);
276                                 mvtkmprbasedata->GetImageData()->GetOrigin(org);
277                                 mvtkmprbasedata->GetImageData()->GetSpacing(spc);
278
279                                 x = (ext[0]+ext[1])/2;
280                                 y = (ext[2]+ext[3])/2;
281                                 z = (ext[4]+ext[5])/2;
282
283                                 mvtkmprbasedata->SetX( x );
284                                 mvtkmprbasedata->SetY( y );
285                                 mvtkmprbasedata->SetZ( z );
286                         }
287                         else
288                         {
289                                 mvtkmprbasedata->SetX( 0 );
290                                 mvtkmprbasedata->SetY( 0 );
291                                 mvtkmprbasedata->SetZ( 0 );
292                         }
293                 }
294                 
295
296                 if ( mvtk2Dbaseview                             !=NULL ) { mvtk2Dbaseview                               ->      Configure();                            }
297                 if ( mvtkmpr2Dview_X                    !=NULL ) { mvtkmpr2Dview_X                              ->      Configure();                            }
298                 if ( mvtkmpr2Dview_Y                    !=NULL ) { mvtkmpr2Dview_Y                              ->      Configure();                            }
299                 if ( mvtkmpr2Dview_Z                    !=NULL ) { mvtkmpr2Dview_Z                              ->      Configure();                            }
300                 if ( mvtkplane2Dview                    !=NULL ) { mvtkplane2Dview                              ->      Configure();                            }
301                 if ( mwidgetMesure                              !=NULL ) { mwidgetMesure                                ->      ConfigureA(mvtkplane2Dview);}
302                 if ( mwidgetMesure                              !=NULL ) { mwidgetMesure                                ->      ConfigureA(mvtkplane2Dview);}
303                 if ( mwidgetMesure                              !=NULL ) { mwidgetMesure                                ->      SetActiveLink(true);            }
304                 if ( mwidgetMesure                              !=NULL ) { mwidgetMesure                                ->      SetMesureScale( 1 );            }
305                 if ( mwxsphereview                              !=NULL ) { mwxsphereview                                ->      Configure();                            }
306
307                 if (mwxvtk3Dbaseview_Clipping3D !=NULL) {
308                         mwxvtk3Dbaseview_Clipping3D     ->      Configure();    
309                         
310                 }
311                 
312                 if (vtkmpr3Ddataviewer                  !=NULL) {                       
313                         vtkmpr3Ddataviewer->Configure();
314                         
315                 }
316                 if (mwxvtkmpr3Dview                             !=NULL) { 
317                         
318                         mwxvtkmpr3Dview                         ->      Configure();
319                         mwxvtkmpr3Dview                         ->ResetCamera(ext,org,spc);
320                         
321                         
322                 }
323
324                 if (mwxvtkclipping3Dview                !=NULL) { mwxvtkclipping3Dview                  ->      Configure();                            }
325                 
326                 
327                 
328                 
329                 
330                 
331
332                 
333                 //if(vtkmpr3Ddataviewer!=NULL){vtkmpr3Ddataviewer->Configure();}
334 //              RefreshView();
335
336                 //if (mwxvtkmpr3Dview                           !=NULL) {
337                 //      mwxvtkmpr3Dview->ResetCamera();
338                 //}
339
340         }
341
342         //-------------------------------------------------------------------------
343
344   void wxMaracas_ViewerWidget::Refresh(bool eraseBackground ,const wxRect* rect  )  // virtual  eraseBackground=true , rect=NULL
345   {
346     wxPanel::Refresh(false);
347   }
348
349         //-------------------------------------------------------------------------
350         void wxMaracas_ViewerWidget::RefreshView()
351         {
352                 
353                         if (mvtk2Dbaseview                              !=NULL ){ mvtk2Dbaseview                                -> Refresh();           }
354                         if (mvtkmpr2Dview_X                             !=NULL ){ mvtkmpr2Dview_X                               -> Refresh();           }
355                         if (mvtkmpr2Dview_Y                             !=NULL ){ mvtkmpr2Dview_Y                               -> Refresh();           }
356                         if (mvtkmpr2Dview_Z                             !=NULL ){ mvtkmpr2Dview_Z                               -> Refresh();           }
357                         if (mvtkplane2Dview                             !=NULL ){ mvtkplane2Dview                               -> Refresh();           }
358                         if (mwxsphereview                               !=NULL ){ mwxsphereview                                 -> Refresh();           }
359
360                         if (mwxvtkmpr3Dview                             !=NULL ){ mwxvtkmpr3Dview                               -> RefreshView();       }
361                         if (mwxvtkclipping3Dview                !=NULL ){ mwxvtkclipping3Dview                  -> Refresh();           }
362                         if (mwxvtk3Dbaseview_Clipping3D !=NULL ){ mwxvtk3Dbaseview_Clipping3D   -> Refresh();           }
363
364         }
365
366         //-------------------------------------------------------------------------
367
368         wxVtkBaseView *wxMaracas_ViewerWidget::GetwxVtkBaseView()
369         {
370                 wxVtkBaseView *wxvtkbaseview=NULL;
371                 if (mvtk2Dbaseview!=NULL)                               { 
372                         wxvtkbaseview = mvtk2Dbaseview;                 
373                 }
374                 if (mvtkmpr2Dview_X!=NULL){ 
375                         wxvtkbaseview = mvtkmpr2Dview_X;
376                 }
377                 if (mvtkmpr2Dview_Y!=NULL){ 
378                         wxvtkbaseview = mvtkmpr2Dview_Y;
379                 }
380                 if (mvtkmpr2Dview_Z!=NULL){ 
381                         wxvtkbaseview = mvtkmpr2Dview_Z;                
382                 }
383                 if (mvtkplane2Dview!=NULL){
384                         wxvtkbaseview = mvtkplane2Dview;                
385                 }
386                 if (mwxsphereview!=NULL){ 
387                         wxvtkbaseview = mwxsphereview;
388                 }
389                 if (mwxvtk3Dbaseview_Clipping3D!=NULL)  { 
390                         wxvtkbaseview = mwxvtk3Dbaseview_Clipping3D;
391                 }
392                 return wxvtkbaseview   ;
393         }
394
395         void wxMaracas_ViewerWidget::SetImage( vtkImageData *image      )
396         {
397                 if(mvtkmprbasedata !=NULL)
398                 {
399                         marImageData* mar = mvtkmprbasedata->GetMarImageData();
400                         mar->removeImageData(0);
401                         mar->AddImageData(image);
402                 }
403
404 //EED 26/11/2009
405 //              ConfigureVTK();
406 //              RefreshView();
407         }
408
409         double wxMaracas_ViewerWidget :: GetX()
410         {
411                 double value = -1;
412                 if(mvtkmprbasedata !=NULL)
413                 {
414                         value = mvtkmprbasedata->GetX();
415                 }
416                 return value;
417         }
418
419         double wxMaracas_ViewerWidget :: GetY()
420         {
421                 double value = -1;
422                 if(mvtkmprbasedata !=NULL)
423                 {
424                         value = mvtkmprbasedata->GetY();
425                 }
426                 return value;
427         }
428
429         double wxMaracas_ViewerWidget :: GetZ()
430         {
431                 double value = -1;
432                 if(mvtkmprbasedata !=NULL)
433                 {
434                         value = mvtkmprbasedata->GetZ();
435                 }
436                 return value;
437 //              return mvtk2Dbaseview->GetVtkBaseData()->GetZ();
438         }
439
440         void wxMaracas_ViewerWidget::setColorTransferFunction(vtkColorTransferFunction* colortable){            
441                 if(mvtkmpr2Dview_X!=NULL){
442                         mvtkmpr2Dview_X->setColorTransferFunction(colortable);
443                 }
444                 if(mvtkmpr2Dview_Y!=NULL){
445                         mvtkmpr2Dview_Y->setColorTransferFunction(colortable);
446                 }
447                 if(mvtkmpr2Dview_Z!=NULL){
448                         mvtkmpr2Dview_Z->setColorTransferFunction(colortable);
449                 }
450                 if(mwxvtkmpr3Dview!=NULL){
451                         mwxvtkmpr3Dview->setColorTransferFunction(colortable);
452                 }
453         }
454
455         void wxMaracas_ViewerWidget::setWindowLevel(double level){
456                 if(mvtkmpr2Dview_X!=NULL){
457                         mvtkmpr2Dview_X->setWindowLevel(level);
458                 }
459                 if(mvtkmpr2Dview_Y!=NULL){
460                         mvtkmpr2Dview_Y->setWindowLevel(level);
461                 }
462                 if(mvtkmpr2Dview_Z!=NULL){
463                         mvtkmpr2Dview_Z->setWindowLevel(level);
464                 }
465                 /*if(mwxvtkmpr3Dview!=NULL){
466                         mwxvtkmpr3Dview->setWindowLevel(level);
467                 }*/
468         }
469
470         void wxMaracas_ViewerWidget::setColorLevel(double level){
471                 if(mvtkmpr2Dview_X!=NULL){
472                         mvtkmpr2Dview_X->setColorLevel(level);
473                 }
474                 if(mvtkmpr2Dview_Y!=NULL){
475                         mvtkmpr2Dview_Y->setColorLevel(level);
476                 }
477                 if(mvtkmpr2Dview_Z!=NULL){
478                         mvtkmpr2Dview_Z->setColorLevel(level);
479                 }
480                 /*if(mwxvtkmpr3Dview!=NULL){
481                         mwxvtkmpr3Dview->setColorLevel(level);
482                 }*/
483     }
484
485         
486