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