]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracas_ViewerWidget.cxx
*** empty log 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/01/21 13:54:15 $
7   Version:   $Revision: 1.22 $
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
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                 double xSpacing, ySpacing, zSpacing;
39                 int xMin, xMax, yMin, yMax, zMin, zMax;
40                 wxSplitterWindow        *panelClipping3D = 0;
41                 wxPanel *panelControl = 0, *controlPanelMPR3D = 0, *controlPanelClipping3D = 0;
42                 wxFlexGridSizer  *sizerCtrol = 0;               
43                 vtkCellPicker* picker = 0;
44                 wxBoxSizer *sizer = 0;
45
46
47                 mType = type;
48
49                 
50                 if (vtkmprbasedata==NULL)
51                 {
52                         minternalVtkmprbasedata                 = true;
53                         mvtkmprbasedata                                 = new vtkMPRBaseData(); 
54                         marImageData    *marimagedata   = new marImageData( imagedata );                        
55                         mvtkmprbasedata->SetMarImageData(marimagedata);
56                 } else {
57                         minternalVtkmprbasedata                 = false;
58                         mvtkmprbasedata                                 = vtkmprbasedata; 
59                 }
60                 
61
62                 mvtk2Dbaseview                          = NULL;
63                 mvtkmpr2Dview_X                         = NULL;
64                 mvtkmpr2Dview_Y                         = NULL;
65                 mvtkmpr2Dview_Z                         = NULL;
66                 mvtkplane2Dview                         = NULL;
67                 mwidgetMesure                           = NULL;
68                 mwxsphereview                           = NULL;
69                 mwxvtkclipping3Dview            = NULL;
70                 mwxvtk3Dbaseview_Clipping3D     = NULL;
71                 mwxvtkmpr3Dview                         = NULL;
72                 vtkmpr3Ddataviewer                      = NULL;
73
74
75                 if (type==-1)
76                 {
77                         mvtk2Dbaseview  = new wxVtk2DBaseView(panel);
78                         mvtk2Dbaseview->SetVtkBaseData(mvtkmprbasedata);
79                         wxwindow                = mvtk2Dbaseview->GetWxVTKRenderWindowInteractor();
80                 }else if (type==0)
81                 {
82                         mvtkmpr2Dview_Z = new wxVtkMPR2DView(panel,2);
83                         mvtkmpr2Dview_Z->SetVtkBaseData(mvtkmprbasedata);
84                         wxwindow                = mvtkmpr2Dview_Z->GetWxVTKRenderWindowInteractor();
85                 }else if (type==1)
86                 {
87                         mvtkmpr2Dview_X = new wxVtkMPR2DView(panel,0);
88                         mvtkmpr2Dview_X->SetVtkBaseData(mvtkmprbasedata);
89                         wxwindow                =       mvtkmpr2Dview_X->GetWxVTKRenderWindowInteractor();
90                 }else if (type==2)
91                 {
92                         mvtkmpr2Dview_Y = new wxVtkMPR2DView(panel,1);
93                         mvtkmpr2Dview_Y->SetVtkBaseData(mvtkmprbasedata);
94                         wxwindow                = mvtkmpr2Dview_Y->GetWxVTKRenderWindowInteractor();
95                 }else if (type==3)
96                 {
97                         mwidgetMesure           = new wxWidgetMesure2D_Plane_in_MPR(panel);
98                         mvtkplane2Dview         = new vtkPlane2DView( mwidgetMesure->GetWindow2());
99                         mwidgetMesure   -> SetVtkPlane2DView( mvtkplane2Dview );
100                         mvtkplane2Dview -> SetImgSize( 200 );
101                         mvtkplane2Dview -> SetVtkBaseData(mvtkmprbasedata);
102                         wxwindow                        = mwidgetMesure;
103                 }else if (type==4)
104                 {
105                         mwxsphereview           = new wxSphereView( panel , mvtkmprbasedata, mvtkmprbasedata->GetImageData() );
106                         wxwindow=mwxsphereview->GetWxVTKRenderWindowInteractor();
107                 }else if (type==5)
108                 {
109                         panelClipping3D = new wxSplitterWindow( panel , -1);
110                         mwxvtk3Dbaseview_Clipping3D                             = new wxVtk3DBaseView( panelClipping3D );
111
112                         mwxvtkclipping3Dview                                            = new wxVtkClipping3DView(mwxvtk3Dbaseview_Clipping3D);
113                         vtkClipping3DDataViewer *vtkclipping3Ddataviewer = new vtkClipping3DDataViewer(); 
114                         vtkclipping3Ddataviewer->SetVtkMPRBaseData(mvtkmprbasedata);
115                         vtkclipping3Ddataviewer->Configure();
116                         mwxvtkclipping3Dview->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer);
117
118                         mwxvtkmpr3Dview                                                 = new wxVtkMPR3DView( mwxvtk3Dbaseview_Clipping3D );
119                         vtkMPR3DDataViewer *vtkmpr3Ddataviewer  = new vtkMPR3DDataViewer(); 
120                         vtkmpr3Ddataviewer->SetVtkMPRBaseData(mvtkmprbasedata);
121                         vtkmpr3Ddataviewer->Configure();
122                         mwxvtkmpr3Dview->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
123
124                         window3D                                        = mwxvtk3Dbaseview_Clipping3D->GetWxVTKRenderWindowInteractor();
125
126                         panelControl                    = new wxPanel(panelClipping3D,-1);      
127                         controlPanelMPR3D               = mwxvtkmpr3Dview->CreateControlPanel(panelControl, false);
128                         controlPanelClipping3D  = mwxvtkclipping3Dview->CreateControlPanel(panelControl);
129         //                               mbtnCutImageData               = new wxCheckBox(panelControl,-1,_T("Cut Module"));
130         //              Connect(_btnCutImageData->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED  , (wxObjectEventFunction) &wxMPRWidget::OnCutImagaData );
131
132                         sizerCtrol             = new wxFlexGridSizer(1);
133                         sizerCtrol->Add(controlPanelMPR3D               , 1, wxALL|wxEXPAND, 2);
134                         sizerCtrol->Add(controlPanelClipping3D  , 1, wxALL|wxEXPAND, 2);
135         //              sizerCtrol->Add( mbtnCutImageData               , 1, wxALL, 2);
136
137                         panelControl->SetAutoLayout(true);
138                         panelControl->SetSizer(sizerCtrol);
139                         panelControl->SetSize(400,350);
140                         panelControl->Layout();
141                         panelClipping3D -> SetMinimumPaneSize( 5 );
142                         panelClipping3D -> SplitHorizontally( panelControl , window3D , 10  );
143                         wxwindow=panelClipping3D;
144                 }else if (type==6)
145                 {
146                         panelClipping3D = new wxSplitterWindow( panel , -1);
147                         mwxvtk3Dbaseview_Clipping3D                             = new wxVtk3DBaseView( panelClipping3D );
148
149                         mwxvtkmpr3Dview                                                 = new wxVtkMPR3DView( mwxvtk3Dbaseview_Clipping3D );
150
151
152                         vtkmpr3Ddataviewer      = new vtkMPR3DDataViewer();     
153
154
155                         
156
157                         wxWindow        *window3D                                       = mwxvtk3Dbaseview_Clipping3D->GetWxVTKRenderWindowInteractor();
158
159                         wxPanel                 *panelControl                   = new wxPanel(panelClipping3D,-1);      
160                         wxPanel                 *controlPanelMPR3D              = mwxvtkmpr3Dview->CreateControlPanel(panelControl, false);
161
162                         wxFlexGridSizer  *sizerCtrol             = new wxFlexGridSizer(1);
163                         sizerCtrol->Add(controlPanelMPR3D               , 1, wxALL|wxEXPAND, 2);
164
165                         panelControl->SetAutoLayout(true);
166                         panelControl->SetSizer(sizerCtrol);
167                         panelControl->SetSize(400,350);
168                         panelControl->Layout();
169                         panelClipping3D -> SetMinimumPaneSize( 5 );
170                         panelClipping3D -> SplitHorizontally( panelControl , window3D , 10  );
171                         wxwindow=panelClipping3D;
172
173
174                         vtkmpr3Ddataviewer->SetVtkMPRBaseData(mvtkmprbasedata);                 
175                         //vtkmpr3Ddataviewer->Configure();
176
177                         mwxvtkmpr3Dview->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
178                         
179                 }else if (type==7)
180                 {       
181                         
182                         mwxvtk3Dbaseview_Clipping3D                             = new wxVtk3DBaseView( panel );                                         
183                         wxwindow = (wxWindow*) mwxvtk3Dbaseview_Clipping3D->GetWxVTKRenderWindowInteractor();
184                         
185
186                 }
187
188    
189         sizer = new wxBoxSizer(wxVERTICAL);
190         sizer->Add( wxwindow , 1, wxGROW);      
191         panel->SetSizer(sizer);
192         panel->SetAutoLayout(true);
193         sizer->Layout();
194         panel->Layout();
195         panel->Refresh();
196
197         //   mbbtkViewerMaracas= NULL;
198         }
199         //-------------------------------------------------------------------------
200           
201         wxMaracas_ViewerWidget::~wxMaracas_ViewerWidget()
202         {
203                 
204                 if (minternalVtkmprbasedata==true)
205                 {
206                         if (mvtkmprbasedata)                    { delete mvtkmprbasedata;  }
207                 }       
208                 
209                 if (mvtk2Dbaseview)                             { delete mvtk2Dbaseview; }
210                 if (mvtkmpr2Dview_X)                    { delete mvtkmpr2Dview_X; }
211                 if (mvtkmpr2Dview_Y)                    { delete mvtkmpr2Dview_Y; }
212                 if (mvtkmpr2Dview_Z)                    { delete mvtkmpr2Dview_Z; }
213                 if (mwidgetMesure)                              { delete mwidgetMesure; }
214                 if (mvtkplane2Dview)                    { delete mvtkplane2Dview; }
215                 if (mwxsphereview)                              { delete mwxsphereview; }
216                 if (mwxvtkmpr3Dview)                    { delete mwxvtkmpr3Dview; }
217                 if (mwxvtkclipping3Dview)               { delete mwxvtkclipping3Dview; }
218                 if (mwxvtk3Dbaseview_Clipping3D){ delete mwxvtk3Dbaseview_Clipping3D; mwxvtk3Dbaseview_Clipping3D=NULL;}
219         }
220         //------------------------------------------------------------------------------------------------------------
221         // Methods
222         //------------------------------------------------------------------------------------------------------------
223
224         //-------------------------------------------------------------------------
225         
226
227         void wxMaracas_ViewerWidget::ConfigureVTK()
228         {
229                 int x=0,y=0,z=0;
230                 int ext[6];
231                 ext[0]=0;
232                 ext[1]=0;
233                 ext[2]=0;
234                 ext[3]=0;
235                 ext[4]=0;
236                 ext[5]=0;
237                 double org[3],spc[3];
238                 org[0]=0;
239                 org[1]=0;
240                 org[2]=0;
241                 spc[0]=0;
242                 spc[1]=0;
243                 spc[2]=0;
244                 
245
246
247                 if (mvtkmprbasedata!=NULL)
248                 {
249                         mvtkmprbasedata->Configure();
250                         /*x = mvtkmprbasedata   ->      GetMaxPositionX()/2;
251                         y = mvtkmprbasedata     ->      GetMaxPositionY()/2;
252                         z = mvtkmprbasedata     ->      GetMaxPositionZ()/2;            */      
253                         
254                         if(mvtkmprbasedata->GetImageData() != NULL)
255                         {
256                                 mvtkmprbasedata->GetImageData()->GetExtent(ext);
257                                 mvtkmprbasedata->GetImageData()->GetOrigin(org);
258                                 mvtkmprbasedata->GetImageData()->GetSpacing(spc);
259
260                                 x = (ext[0]+ext[1])/2;
261                                 y = (ext[2]+ext[3])/2;
262                                 z = (ext[4]+ext[5])/2;
263
264                                 mvtkmprbasedata->SetX( x );
265                                 mvtkmprbasedata->SetY( y );
266                                 mvtkmprbasedata->SetZ( z );
267                         }
268                         else
269                         {
270                                 mvtkmprbasedata->SetX( 0 );
271                                 mvtkmprbasedata->SetY( 0 );
272                                 mvtkmprbasedata->SetZ( 0 );
273                         }
274                 }
275                 
276
277                 if ( mvtk2Dbaseview                             !=NULL ) { mvtk2Dbaseview                               ->      Configure();                            }
278                 if ( mvtkmpr2Dview_X                    !=NULL ) { mvtkmpr2Dview_X                              ->      Configure();                            }
279                 if ( mvtkmpr2Dview_Y                    !=NULL ) { mvtkmpr2Dview_Y                              ->      Configure();                            }
280                 if ( mvtkmpr2Dview_Z                    !=NULL ) { mvtkmpr2Dview_Z                              ->      Configure();                            }
281                 if ( mvtkplane2Dview                    !=NULL ) { mvtkplane2Dview                              ->      Configure();                            }
282                 if ( mwidgetMesure                              !=NULL ) { mwidgetMesure                                ->      ConfigureA(mvtkplane2Dview);}
283                 if ( mwidgetMesure                              !=NULL ) { mwidgetMesure                                ->      ConfigureA(mvtkplane2Dview);}
284                 if ( mwidgetMesure                              !=NULL ) { mwidgetMesure                                ->      SetActiveLink(true);            }
285                 if ( mwidgetMesure                              !=NULL ) { mwidgetMesure                                ->      SetMesureScale( 1 );            }
286                 if ( mwxsphereview                              !=NULL ) { mwxsphereview                                ->      Configure();                            }
287
288                 if (mwxvtk3Dbaseview_Clipping3D !=NULL) {
289                         mwxvtk3Dbaseview_Clipping3D     ->      Configure();    
290                         
291                 }
292                 
293                 if (vtkmpr3Ddataviewer                  !=NULL) {                       
294                         vtkmpr3Ddataviewer->Configure();
295                         
296                 }
297                 if (mwxvtkmpr3Dview                             !=NULL) { 
298                         
299                         mwxvtkmpr3Dview                         ->      Configure();
300                         mwxvtkmpr3Dview                         ->ResetCamera(ext,org,spc);
301                         
302                         
303                 }
304
305                 if (mwxvtkclipping3Dview                !=NULL) { mwxvtkclipping3Dview                  ->      Configure();                            }
306                 
307                 
308                 
309                 
310                 
311                 
312
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     }
465
466         
467