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