]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMPRWidget.cxx
*** empty log message ***
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMPRWidget.cxx
1 /*=========================================================================
2
3   Program:   wxMaracas
4   Module:    $RCSfile: wxMPRWidget.cxx,v $
5   Language:  C++
6   Date:      $Date: 2009/05/14 13:54:35 $
7   Version:   $Revision: 1.14 $
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 #include <vtkObjectFactory.h>
20 #include <vtkInteractorStyleSwitch.h>
21 #include <vtkCamera.h>
22 #include <vtkImageActor.h>
23 #include <vtkRenderer.h>
24 #include <vtkRenderWindowInteractor.h>
25 #include <vtkRenderWindow.h>
26
27 #include <vtkRenderer.h>
28 #include <vtkImageViewer2.h> 
29 #include <vtkInteractorStyleImage.h> 
30
31 #include <vtkProperty.h> 
32 #include <vtkPolyData.h> 
33 #include <vtkDataSet.h> 
34 #include <vtkStripper.h>
35 #include <vtkCellArray.h> 
36 #include <vtkPointData.h> 
37 #include <vtkInteractorStyleTrackballCamera.h>
38
39 #include <vtkPlanes.h>
40 #include <vtkProbeFilter.h>
41 #include <vtkPlane.h>
42 #include <vtkPointPicker.h>
43
44
45 #include "vtkClosePolyData.h"
46 #include <vtkTriangleFilter.h>
47 #include <vtkSTLWriter.h>
48 #include <vtkPolyDataConnectivityFilter.h>
49
50 // EED 25 Janvier 2007  -  TestLoic
51 #include <vtkCutter.h>
52 #include <vtkWindowLevelLookupTable.h>
53 #include <vtkLookupTable.h>
54 #include <vtkMetaImageWriter.h>
55
56
57
58 #include "wxMPRWidget.h"
59 #include "wxVTKRenderWindowInteractor.h"
60 #include "UtilVtk3DGeometriSelection.h"
61 #include "../kernel/marDicomBase.h"
62
63
64 #include <wx/wx.h>
65 #include <wx/notebook.h>
66 #include <wx/colordlg.h>
67
68 #include "matrix.h"
69 #include <string>
70 #include <stdio.h>
71
72
73
74 #include "pPlotter/HistogramDialog.h"
75
76 #include "vtkInteractorStyle3DView.h"
77
78 //-------------------------------------------------------------------
79 //-------------------------------------------------------------------
80 //-------------------------------------------------------------------
81
82
83
84 //-------------------------------------------------------------------
85 //-------------------------------------------------------------------
86 //-------------------------------------------------------------------
87
88 BEGIN_EVENT_TABLE( wxMPRWidget, wxPanel )
89         EVT_MENU( 12121, wxMPRWidget::OnRefreshView )
90         EVT_MENU( 12122, wxMPRWidget::OnDClickLeft  )
91 END_EVENT_TABLE( );
92
93
94
95 wxMPRWidget::wxMPRWidget( wxWindow* parent,
96                           marImageData *marimageData , double voxelSize)
97 : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
98 {
99
100         _vtkmpr2Dview[0]                                = NULL;
101         _vtkmpr2Dview[1]                                = NULL;
102         _vtkmpr2Dview[2]                                = NULL;
103         _vtkplane2Dview                                 = NULL;
104         _widgetMesure                                   = NULL;
105         _wxsphereview                                   = NULL;
106         _wxvtk3Dbaseview_MPRClipping3D  = NULL;
107         _wxvtkmpr3Dview                                 = NULL;
108         _wxvtkclipping3Dview                    = NULL;
109         _vtkplane2Dview_B                               = NULL;
110         _widgetMesure_B                                 = NULL;
111
112         _vtkmpr2Dview_B[0]                              = NULL;
113         _vtkmpr2Dview_B[1]                              = NULL;
114         _vtkmpr2Dview_B[2]                              = NULL;
115         _vtkplane2Dview_B                               = NULL;
116         _widgetMesure_B                                 = NULL;
117         _wxsphereview_B                                 = NULL;
118         _wxvtk3Dbaseview_MPR3D_B                = NULL;
119         _wxvtkmpr3Dview_B                               = NULL;
120         _wxvtk3Dbaseview_Clipping3D_BB  = NULL;
121         _wxvtkmpr3Dview_BB                              = NULL;
122         _wxvtkclipping3Dview_BB                 = NULL;
123
124         _vtkmprbasedata                                 = NULL;
125
126
127         
128         _framePanelCutting                              = NULL; 
129         _panelCutting                                   = NULL;
130
131
132         wxBoxSizer                      *sizer          = new wxBoxSizer(wxVERTICAL  );
133         _marImageData=NULL;
134
135         if(marimageData!=NULL){
136                 _marImageData                                   = marimageData;
137                 _voxelSize                                              = voxelSize;
138                 _vtkmprbasedata                                 = new vtkMPRBaseData(); 
139                 _vtkmprbasedata->SetMarImageData(_marImageData);
140                 
141                 
142                 
143
144                 wxSplitterWindow        *pnlSplitter            = new wxSplitterWindow( this , -1);
145                 pnlSplitter     -> SetMinimumPaneSize( 2 );
146
147                 wxPanel                         *MPRPanel       = CreateMPRPanel(pnlSplitter,_vtkmprbasedata);
148                 wxPanel                         *controlPanel   = CreateControlPanel(pnlSplitter);      
149                 pnlSplitter     -> SplitVertically( MPRPanel, controlPanel, 550 );
150
151                 sizer           -> Add( pnlSplitter ,1,wxGROW  ,0);
152
153         }          
154
155         //int ww,hh;
156         //wxWindow *pp=this;
157         //while (pp->GetParent()!=NULL) pp=pp->GetParent();
158         //pp->GetSize(&ww,&hh);
159         
160         this            -> SetAutoLayout( true );
161         this            -> SetSizer(sizer);
162 //      sizer           ->      Fit( this );
163         _refreshAPage=0;
164         _refreshBPage=0;
165
166 }
167 void wxMPRWidget::setImageData(vtkImageData * img, double voxelsize){
168
169         if(_marImageData!=NULL){
170                 _marImageData->removeImageData(0);
171                 _marImageData->AddImageData(img);               
172         }else{
173                 _marImageData = new marImageData(img);
174         }
175         
176         _voxelSize                                              = voxelsize;
177
178         if(_vtkmprbasedata==NULL){
179                 _vtkmprbasedata                                 = new vtkMPRBaseData(); 
180                 _vtkmprbasedata->SetMarImageData(_marImageData);        
181
182                 wxSplitterWindow        *pnlSplitter            = new wxSplitterWindow( this , -1);
183                 pnlSplitter     -> SetMinimumPaneSize( 2 );
184
185                 wxPanel                         *MPRPanel       = CreateMPRPanel(pnlSplitter,_vtkmprbasedata);
186                 wxPanel                         *controlPanel   = CreateControlPanel(pnlSplitter);      
187                 pnlSplitter     -> SplitVertically( MPRPanel, controlPanel, 550 );
188
189                 this->GetSizer()                -> Add( pnlSplitter ,1,wxGROW  ,0);
190         }       
191         
192
193         
194 }
195 //----------------------------------------------------------------------------
196
197 wxMPRWidget::~wxMPRWidget( )
198 {
199 //EEDxx2.4 DELETE
200         if (_framePanelCutting!=NULL)
201         {
202                 _framePanelCutting->Close();
203         }
204
205         if (_vtkmpr2Dview[0]!=NULL)                                     { delete _vtkmpr2Dview[0]; }
206         if (_vtkmpr2Dview[1]!=NULL)                                     { delete _vtkmpr2Dview[1]; }
207         if (_vtkmpr2Dview[2]!=NULL)                                     { delete _vtkmpr2Dview[2]; }
208
209         if (_vtkmpr2Dview_B[0]!=NULL)                           { delete _vtkmpr2Dview_B[0]; }
210
211         if (_vtkmpr2Dview_B[1]!=NULL)                           { delete _vtkmpr2Dview_B[1]; }
212         if (_vtkmpr2Dview_B[2]!=NULL)                           { delete _vtkmpr2Dview_B[2]; }
213
214         if (_vtkmprbasedata!=NULL)                                      { delete _vtkmprbasedata; }
215         if (_vtkplane2Dview!=NULL)                                      { delete _vtkplane2Dview; }
216         if (_wxsphereview!=NULL)                                        { delete _wxsphereview; }
217         if (_wxvtk3Dbaseview_MPRClipping3D!=NULL)       { delete _wxvtk3Dbaseview_MPRClipping3D; }
218         if (_wxvtkmpr3Dview!=NULL)                                      { delete _wxvtkmpr3Dview; }
219         if (_wxvtkclipping3Dview!=NULL)                         { delete _wxvtkclipping3Dview; }
220
221         if (_vtkplane2Dview_B!=NULL)                            { delete _vtkplane2Dview_B; }
222         if (_wxsphereview_B!=NULL)                                      { delete _wxsphereview_B; }
223
224         if (_wxvtk3Dbaseview_MPR3D_B!=NULL)                     { delete _wxvtk3Dbaseview_MPR3D_B; }
225         if (_wxvtkmpr3Dview_B!=NULL)                            { delete _wxvtkmpr3Dview_B; }
226
227         if (_wxvtk3Dbaseview_Clipping3D_BB!=NULL)       { delete _wxvtk3Dbaseview_Clipping3D_BB; }
228         if (_wxvtkmpr3Dview_BB!=NULL)                           { delete _wxvtkmpr3Dview_BB; }
229         if (_wxvtkclipping3Dview_BB!=NULL)                      { delete _wxvtkclipping3Dview_BB; }
230 }
231
232 //----------------------------------------------------------------------------
233
234 wxPanel* wxMPRWidget::CreateControlPanel(wxWindow *parent)
235 {
236
237         wxPanel *panel=new wxPanel(parent,-1);
238
239 //EEDxx2.4
240 //      wxStaticText *tmpText = new wxStaticText(panel,-1,""); 
241
242         wxStaticText *help0Text = new wxStaticText(panel,-1,_T("General: \n  middle click : contrast\n  ctrl + middle click : rotate image\n  shift + middle click: translate image\n  ctrl + right click: zoom")); 
243
244         wxStaticText *help1Text = new wxStaticText(panel,-1,_T("mpr2D: \n  double click : choose a point\n  mouse right : change perpendicular slice\n  drag axis: change slice")); 
245         
246         wxStaticText *help2Text = new wxStaticText(panel,-1,_T("Plane: \n  drag mouse: rotate\n  ctrl + drag mouse : fix axis rotation\n  \n mouse right: change perpendicular slice \n  see split control \n     - Active/Desactivet plane tool\n     - Center market\n     - Rotation axis market\n     - 2D messure tool (open/close contour)")); 
247
248         wxStaticText *help3Text = new wxStaticText(panel,-1,
249 _T("Sphere: \n  drag mouse: rotation\n  mouse right: change radio \n  click: 3D point selection in MPR 2D \n  double clicks in MPR: show surface sphere")); 
250         
251         wxStaticText *help4Text = new wxStaticText(panel,-1,_T("MPR3D:\n  see split control")); 
252
253         wxString text=_T("");
254         text=text+_T("Clipping: \n");
255         text=text+_T(" see split control \n");
256         text=text+_T(" 4 MarchingCubes:  \n");
257         text=text+_T("    color, isovalue, opacity \n");
258         text=text+_T(" Box:\n");
259         text=text+_T("    mouse left drag (box): rotation\n");
260         text=text+_T("    mouse left drag (sphere): size,position\n");
261         text=text+_T("    mouse right drag (box): box size");
262         text=text+_T(" Axis: 3D\n");
263         text=text+_T("    mouse drag: translate\n");
264         text=text+_T("    shift + mouse drag: translate 2 axis\n");
265         text=text+_T("    mouse right: scale\n");
266         text=text+_T(" Plane 3D:\n");
267         text=text+_T("    mouse drag perpendicular axis: rotate plane\n");
268         text=text+_T("    mouse drag spheres: size plane\n");
269         text=text+_T("    ctrl +mouse right over the plane: size plane\n");
270         text=text+_T("    mouse drag plane: translate\n");
271         text=text+_T("    middle click perpendicular axis: translate\n");
272         wxStaticText *help5Text = new wxStaticText(panel,-1, text );
273
274
275     wxFlexGridSizer *sizer  = new wxFlexGridSizer(1);
276         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
277         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
278         sizer->Add( help0Text   );
279
280         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
281         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
282         sizer->Add( help1Text   );
283
284         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
285         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
286         sizer->Add( help2Text   );
287
288         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
289         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
290         sizer->Add( help3Text   );
291
292         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
293         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
294         sizer->Add( help4Text   );
295
296         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
297         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
298         sizer->Add( help5Text   );
299         
300         panel->SetSizer(sizer);
301         panel->SetAutoLayout(true);
302         panel->SetSize(350,500);
303
304     return panel;
305 }
306
307 //----------------------------------------------------------------------------
308
309 void wxMPRWidget::OnPageAChanged(wxNotebookEvent & event)
310 {
311         _refreshAPage=event.GetSelection();
312         Refresh();
313         RefreshView(true);
314 }
315
316 //----------------------------------------------------------------------------
317
318 void wxMPRWidget::OnPageBChanged(wxNotebookEvent & event)
319 {
320         _refreshBPage=event.GetSelection();
321 //      Refresh(false);
322 //      RefreshView();
323 }
324
325
326 //----------------------------------------------------------------------------
327
328 wxPanel* wxMPRWidget::CreateView(int type,wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
329 {
330         wxWindow *wxwindow;
331         wxPanel *panel=new wxPanel(parent,-1);
332
333         if (type==0)
334         {
335                 _vtkmpr2Dview_B[0] = new wxVtkMPR2DView(panel,0);
336                 _vtkmpr2Dview_B[0]->SetVtkBaseData(vtkmprbasedata);
337                 wxwindow=_vtkmpr2Dview_B[0]->GetWxVTKRenderWindowInteractor();
338         }
339         if (type==1)
340         {
341                 _vtkmpr2Dview_B[1] = new wxVtkMPR2DView(panel,1);
342                 _vtkmpr2Dview_B[1]->SetVtkBaseData(vtkmprbasedata);
343                 wxwindow=_vtkmpr2Dview_B[1]->GetWxVTKRenderWindowInteractor();
344         }
345         if (type==2)
346         {
347                 _vtkmpr2Dview_B[2] = new wxVtkMPR2DView(panel,2);
348                 _vtkmpr2Dview_B[2]->SetVtkBaseData(vtkmprbasedata);
349                 wxwindow=_vtkmpr2Dview_B[2]->GetWxVTKRenderWindowInteractor();
350         }
351         if (type==3)
352         {
353                 _widgetMesure_B         = new wxWidgetMesure2D_Plane_in_MPR(panel);
354                 _vtkplane2Dview_B       = new vtkPlane2DView( _widgetMesure_B->GetWindow2());
355                 _widgetMesure_B->SetVtkPlane2DView( _vtkplane2Dview_B );
356                 _vtkplane2Dview_B->SetImgSize( 200 );
357                 _vtkplane2Dview_B->SetVtkBaseData(vtkmprbasedata);
358                 wxwindow                        = _widgetMesure_B;
359         }
360         if (type==4)
361         {
362                 _wxsphereview_B         = new wxSphereView( panel , vtkmprbasedata, vtkmprbasedata->GetImageData() );
363                 wxwindow=_wxsphereview_B->GetWxVTKRenderWindowInteractor();
364         }
365
366         if (type==5)
367         {
368                 wxSplitterWindow *panelMPR3D    = new wxSplitterWindow( panel , -1);
369                 _wxvtk3Dbaseview_MPR3D_B                = new wxVtk3DBaseView( panelMPR3D );
370
371                 _wxvtkmpr3Dview_B                               = new wxVtkMPR3DView(_wxvtk3Dbaseview_MPR3D_B);
372                 vtkMPR3DDataViewer *vtkmpr3Ddataviewer = new vtkMPR3DDataViewer(); 
373                 vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
374                 vtkmpr3Ddataviewer->Configure();
375                 _wxvtkmpr3Dview_B->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
376
377                 wxWindow        *window3D                       = _wxvtk3Dbaseview_MPR3D_B->GetWxVTKRenderWindowInteractor();
378                 wxPanel         *controlPanel3D         = _wxvtkmpr3Dview_B->CreateControlPanel(panelMPR3D);
379
380 //EEDxx2.4
381                 panelMPR3D      -> SetMinimumPaneSize( 5 );
382                 panelMPR3D      -> SplitHorizontally( controlPanel3D,window3D,600  );
383
384                 wxwindow=panelMPR3D;
385         }
386
387         if (type==6)
388         {
389                 wxSplitterWindow        *panelClipping3D        = new wxSplitterWindow( panel , -1);
390                 _wxvtk3Dbaseview_Clipping3D_BB                  = new wxVtk3DBaseView( panelClipping3D );
391
392                 _wxvtkclipping3Dview_BB                                 = new wxVtkClipping3DView(_wxvtk3Dbaseview_Clipping3D_BB);
393                 vtkClipping3DDataViewer *vtkclipping3Ddataviewer = new vtkClipping3DDataViewer(); 
394                 vtkclipping3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
395                 vtkclipping3Ddataviewer->Configure();
396                 _wxvtkclipping3Dview_BB->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer);
397
398                 _wxvtkmpr3Dview_BB                                              = new wxVtkMPR3DView( _wxvtk3Dbaseview_Clipping3D_BB );
399                 vtkMPR3DDataViewer *vtkmpr3Ddataviewer  = new vtkMPR3DDataViewer(); 
400                 vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
401                 vtkmpr3Ddataviewer->Configure();
402                 _wxvtkmpr3Dview_BB->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
403
404                 wxWindow        *window3D                                       = _wxvtk3Dbaseview_Clipping3D_BB->GetWxVTKRenderWindowInteractor();
405
406                 wxPanel                 *panelControl                   = new wxPanel(panelClipping3D,-1);      
407                 wxPanel                 *controlPanelMPR3D              = _wxvtkmpr3Dview_BB->CreateControlPanel(panelControl);
408                 wxPanel                 *controlPanelClipping3D = _wxvtkclipping3Dview_BB->CreateControlPanel(panelControl);
409                                  _btnCutImageData               = new wxCheckBox(panelControl,-1,_T("Cut Module"));
410                 Connect(_btnCutImageData->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED  , (wxObjectEventFunction) &wxMPRWidget::OnCutImagaData );
411
412                 wxFlexGridSizer  *sizerCtrol             = new wxFlexGridSizer(1);
413                 sizerCtrol->Add(controlPanelMPR3D               , 1, wxALL|wxEXPAND, 2);
414                 sizerCtrol->Add(controlPanelClipping3D  , 1, wxALL|wxEXPAND, 2);
415                 sizerCtrol->Add( _btnCutImageData               , 1, wxALL, 2);
416
417                 panelControl->SetAutoLayout(true);
418                 panelControl->SetSizer(sizerCtrol);
419                 panelControl->SetSize(400,350);
420                 panelControl->Layout();
421 //EEDxx2.4
422 //              panelControl->FitInside();
423
424 //EEDxx2.4
425                 panelClipping3D -> SetMinimumPaneSize( 5 );
426                 panelClipping3D -> SplitHorizontally( panelControl , window3D , 10  );
427                 wxwindow=panelClipping3D;
428         }
429
430     wxBoxSizer *sizerH1                                                 = new wxBoxSizer(wxHORIZONTAL);
431         sizerH1->Add(wxwindow , 1, wxALL|wxGROW, 0);
432         panel->SetAutoLayout(true);
433         panel->SetSizer(sizerH1);
434         panel->SetSize(400,400);
435         panel->Layout();
436
437         return panel;
438 }
439
440 //----------------------------------------------------------------------------
441
442 wxPanel* wxMPRWidget::CreateMPRPanel(wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
443 {
444         wxPanel *panel=new wxPanel(parent,-1);
445
446         wxNotebook *notebook = new wxNotebook( panel, -1 );
447
448         notebook->AddPage( CreateMPRPanel4View( notebook ,vtkmprbasedata), _T("4-View") );
449         notebook->AddPage( CreateView(0,notebook,vtkmprbasedata) , _T("Axial")          );
450         notebook->AddPage( CreateView(1,notebook,vtkmprbasedata) , _T("Sagital")        );
451         notebook->AddPage( CreateView(2,notebook,vtkmprbasedata) , _T("Coronal")        );
452         notebook->AddPage( CreateView(3,notebook,vtkmprbasedata) , _T("Plane")          );
453         notebook->AddPage( CreateView(4,notebook,vtkmprbasedata) , _T("Sphere")         );
454         notebook->AddPage( CreateView(5,notebook,vtkmprbasedata) , _T("MPR 3D")         );
455         notebook->AddPage( CreateView(6,notebook,vtkmprbasedata) , _T("Clipping")       );
456         Connect(notebook->GetId()       , wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED  , (wxObjectEventFunction) &wxMPRWidget::OnPageAChanged   );
457
458         wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
459         sizer->Add(notebook , 1, wxALL|wxGROW, 2);
460         panel->SetAutoLayout(true);
461         panel->SetSizer(sizer);
462         panel->SetSize(400,400);
463         panel->Layout();
464
465 //EEDxx2.4
466 //      panel->FitInside();
467
468         panel->Refresh();
469         return panel;
470 }
471
472 //----------------------------------------------------------------------------
473
474 wxPanel* wxMPRWidget::CreateMPRPanel4View(wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
475 {
476         wxPanel *panel=new wxPanel(parent,-1);
477
478         // view 0
479         _vtkmpr2Dview[0] = new wxVtkMPR2DView(panel,0);
480         _vtkmpr2Dview[0]->SetVtkBaseData(vtkmprbasedata);
481         wxVTKRenderWindowInteractor *iren0 = _vtkmpr2Dview[0]->GetWxVTKRenderWindowInteractor();        
482
483         // view 1
484         _vtkmpr2Dview[1] = new wxVtkMPR2DView(panel,1);
485         _vtkmpr2Dview[1]->SetVtkBaseData(vtkmprbasedata);
486         wxVTKRenderWindowInteractor *iren1 = _vtkmpr2Dview[1]->GetWxVTKRenderWindowInteractor();        
487
488         // view 2
489         _vtkmpr2Dview[2] = new wxVtkMPR2DView(panel,2);
490         _vtkmpr2Dview[2]->SetVtkBaseData(vtkmprbasedata);
491         wxVTKRenderWindowInteractor *iren2 = _vtkmpr2Dview[2]->GetWxVTKRenderWindowInteractor();        
492
493         // view 3
494         wxNotebook *notebook = new wxNotebook( panel, -1 );
495         notebook->SetSize(400,400);
496
497 // EED 27 Oct 2007
498          // view 3.0
499         _widgetMesure   = new wxWidgetMesure2D_Plane_in_MPR(notebook);
500         _vtkplane2Dview = new vtkPlane2DView( _widgetMesure->GetWindow2() );
501         _widgetMesure->SetVtkPlane2DView( _vtkplane2Dview );
502         _vtkplane2Dview->SetImgSize( 200 );
503         _vtkplane2Dview->SetVtkBaseData(vtkmprbasedata);
504         notebook->AddPage( _widgetMesure, _T("Plane") );
505
506          // view 3.1
507         _wxsphereview = new wxSphereView( notebook , vtkmprbasedata, vtkmprbasedata->GetImageData());
508         wxVTKRenderWindowInteractor *iren3B = _wxsphereview->GetWxVTKRenderWindowInteractor();  
509         notebook->AddPage( iren3B, _T("Sphere") );
510
511
512          // view 3.2
513         wxSplitterWindow *panelMPR3D    = new wxSplitterWindow( notebook , -1);
514         _wxvtk3Dbaseview_MPRClipping3D  = new wxVtk3DBaseView( panelMPR3D );
515
516         _wxvtkmpr3Dview = new wxVtkMPR3DView( _wxvtk3Dbaseview_MPRClipping3D );
517         vtkMPR3DDataViewer *vtkmpr3Ddataviewer = new vtkMPR3DDataViewer(); 
518         vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
519         vtkmpr3Ddataviewer->Configure();
520         _wxvtkmpr3Dview->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
521
522
523         _wxvtkclipping3Dview = new wxVtkClipping3DView( _wxvtk3Dbaseview_MPRClipping3D );
524         vtkClipping3DDataViewer *vtkclipping3Ddataviewer = new vtkClipping3DDataViewer(); 
525         vtkclipping3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
526         vtkclipping3Ddataviewer->Configure();
527         _wxvtkclipping3Dview->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer);
528
529
530         wxWindow        *window3D                               = _wxvtk3Dbaseview_MPRClipping3D->GetWxVTKRenderWindowInteractor();
531
532         wxPanel         *panelControl                   = new wxPanel(panelMPR3D,-1);
533         wxPanel         *controlPanelMPR3D              = _wxvtkmpr3Dview->CreateControlPanel(panelControl);
534         wxPanel         *controlPanelClipping3D = _wxvtkclipping3Dview->CreateControlPanel(panelControl);
535
536
537
538
539 //    wxBoxSizer         *sizerCtrol             = new wxBoxSizer(wxVERTICAL);
540         wxFlexGridSizer  *sizerCtrol             = new wxFlexGridSizer(1);
541         sizerCtrol->Add(controlPanelMPR3D               , 1, wxALL|wxEXPAND, 2);
542         sizerCtrol->Add(controlPanelClipping3D  , 1, wxALL|wxEXPAND, 2);
543
544
545         panelControl->SetAutoLayout(true);
546         panelControl->SetSizer(sizerCtrol);
547         panelControl->SetSize(400,150);
548         panelControl->Layout();
549
550 //EEDxx2.4
551         panelMPR3D      -> SetMinimumPaneSize( 5 );
552
553         panelMPR3D      -> SplitHorizontally( panelControl,window3D,200  );
554
555         notebook->AddPage( panelMPR3D, _T("MPR 3D - Clipping") );
556
557
558         Connect(notebook->GetId()       , wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED  , (wxObjectEventFunction) &wxMPRWidget::OnPageBChanged   );
559
560         wxBoxSizer *sizerV = new wxBoxSizer(wxVERTICAL);
561         wxBoxSizer *sizerH1= new wxBoxSizer(wxHORIZONTAL);
562         wxBoxSizer *sizerH2= new wxBoxSizer(wxHORIZONTAL);
563         sizerH1->Add(iren2 , 1, wxALL|wxEXPAND, 2);
564         sizerH1->Add(iren0 , 1, wxALL|wxEXPAND, 2);
565         sizerH2->Add(iren1 , 1, wxALL|wxEXPAND, 2);
566 //      sizerH2->Add(iren3 , 1, wxALL|wxEXPAND, 2);
567         sizerH2->Add(notebook , 1, wxALL|wxEXPAND, 2);
568
569         sizerV->Add(sizerH1, 1, wxALL|wxEXPAND, 0);
570         sizerV->Add(sizerH2, 1, wxALL|wxEXPAND, 0);
571
572         panel->SetAutoLayout(true);
573         panel->SetSizer(sizerV);
574         panel->SetSize(400,400);
575         panel->Layout();
576         return panel;
577 }
578
579 //----------------------------------------------------------------------------
580 void wxMPRWidget::OnCutImagaData(wxCommandEvent &event) 
581 {
582         if (_btnCutImageData->GetValue()==true){                
583        
584                 _framePanelCutting = new wxFrame(this,-1,_T("Cutting Module"),wxDefaultPosition,wxDefaultSize,wxCAPTION|wxSTAY_ON_TOP| wxRESIZE_BORDER );
585                 
586                 _framePanelCutting->SetSize(550,400);
587
588                 _panelCutting   = new wxPanelCuttingImageData(_framePanelCutting);              
589                 if(_wxvtk3Dbaseview_Clipping3D_BB!=NULL){
590                         _panelCutting->SetWxVtk3DBaseView( _wxvtk3Dbaseview_Clipping3D_BB  );
591                 }
592                 _panelCutting->SetVtkMPRBaseData( GetVtkMPRBaseData() );
593                 _panelCutting->SetVtkClipping3DDataViewer( this->_wxvtkclipping3Dview_BB->GetVtkClipping3DDataViewer() );
594                 _panelCutting->Configure( );
595 /*
596                 wxBoxSizer *topsizer            = new wxBoxSizer(wxHORIZONTAL  );
597                 topsizer -> Add( _panelCutting ,1,wxALL  ,0);
598                 _framePanelCutting->SetAutoLayout(true);
599                 _framePanelCutting->SetSizer( topsizer );      // use the sizer for layout
600                 _framePanelCutting->Layout(); 
601 //EEDxx2.4
602 //              _framePanelCutting->FitInside();
603 */
604                 _framePanelCutting->Show();
605
606                 
607         } else {
608                 if (_framePanelCutting!=NULL){
609                         _panelCutting->RemoveActors();                  
610                         _framePanelCutting->Destroy();
611                         _framePanelCutting=NULL;
612                         _panelCutting=NULL;
613                 }
614         }
615 }
616
617 //----------------------------------------------------------------------------
618 void wxMPRWidget::ConfigureVTK(){
619         int x=0,y=0,z=0;
620
621         if (_vtkmprbasedata!=NULL)
622         {
623                 _vtkmprbasedata->Configure();
624                 x=_vtkmprbasedata                       ->      GetMaxPositionX()/2;
625                 y=_vtkmprbasedata                       ->      GetMaxPositionY()/2;
626                 z=_vtkmprbasedata                       ->      GetMaxPositionZ()/2;    
627                 _vtkmprbasedata->SetX( x );
628                 _vtkmprbasedata->SetY( y );
629                 _vtkmprbasedata->SetZ( z );
630         
631         }
632
633         if(_vtkmpr2Dview[0]!=NULL) {_vtkmpr2Dview[0]                            ->      Configure();}
634         if(_vtkmpr2Dview[1]!=NULL) {_vtkmpr2Dview[1]                            ->      Configure();}
635         if(_vtkmpr2Dview[2]!=NULL) {_vtkmpr2Dview[2]                            ->      Configure();}
636
637
638         if (_vtkmpr2Dview_B[0]!=NULL) { _vtkmpr2Dview_B[0]                              ->      Configure(); }
639         if (_vtkmpr2Dview_B[1]!=NULL) { _vtkmpr2Dview_B[1]                              ->      Configure(); }
640         if (_vtkmpr2Dview_B[2]!=NULL) { _vtkmpr2Dview_B[2]                              ->      Configure(); }
641
642
643         
644
645         if (_vtkplane2Dview!=NULL){_vtkplane2Dview                              ->      Configure();}
646         if (_widgetMesure!=NULL){_widgetMesure                                  ->      ConfigureA(_vtkplane2Dview);}
647         if (_widgetMesure!=NULL){_widgetMesure                                  ->      SetActiveLink(true);}
648         if (_widgetMesure!=NULL){_widgetMesure                                  ->      SetMesureScale( _voxelSize );}
649         if (_wxsphereview!=NULL){_wxsphereview                                  ->      Configure();}
650
651         if (_wxvtk3Dbaseview_MPRClipping3D!=NULL){_wxvtk3Dbaseview_MPRClipping3D        ->  Configure();}
652         if (_wxvtkmpr3Dview!=NULL){
653                 _wxvtkmpr3Dview                                 ->      Configure();
654         }
655         if (_wxvtkclipping3Dview!=NULL){_wxvtkclipping3Dview            ->      Configure();}
656
657         if (_vtkplane2Dview_B!=NULL){   _vtkplane2Dview_B                       ->      Configure(); }
658         if (_widgetMesure_B!=NULL){             _widgetMesure_B                         ->      ConfigureA( _vtkplane2Dview_B ); }
659         if (_widgetMesure_B!=NULL){             _widgetMesure_B                         ->      SetActiveLink(true); }
660
661 //EEDx3
662 //      double spc[3];
663 //      vtkImageData *imageData = _vtkmprbasedata->GetImageData();
664 //      imageData->Update();
665 //      imageData->GetSpacing(spc);
666 //      _widgetMesure_B->SetMesureScale(spc[0]);
667
668         if (_widgetMesure_B!=NULL)                                      {_widgetMesure_B->SetMesureScale( _voxelSize );}
669
670
671         if (_wxsphereview_B!=NULL)                                      {_wxsphereview_B                                ->      Configure();}
672
673         if (_wxvtk3Dbaseview_MPR3D_B!=NULL)                     {_wxvtk3Dbaseview_MPR3D_B               ->  Configure();}
674         if (_wxvtkmpr3Dview_B!=NULL)                            {_wxvtkmpr3Dview_B                              ->      Configure();}
675
676         if ( _wxvtk3Dbaseview_Clipping3D_BB!=NULL)      {_wxvtk3Dbaseview_Clipping3D_BB ->  Configure(); }
677         if ( _wxvtkmpr3Dview_BB!=NULL)                          {_wxvtkmpr3Dview_BB                             ->      Configure(); }
678         if ( _wxvtkclipping3Dview_BB!=NULL)                     {_wxvtkclipping3Dview_BB                ->      Configure(); }
679
680
681         vtkInteractorStyle3DView *vtkinteractorstyle3Dview;
682         if (_wxvtkmpr3Dview_BB!=NULL)
683         {
684                 vtkinteractorstyle3Dview        = new vtkInteractorStyle3DView();
685                 vtkinteractorstyle3Dview->SetWxVtkMPR3DView(_wxvtkmpr3Dview_BB);
686                 vtkinteractorstyle3Dview->SetWxVtkClipping3DView(_wxvtkclipping3Dview_BB);
687         }
688
689         if (_wxvtk3Dbaseview_Clipping3D_BB!=NULL)
690         {
691                 ((vtkInteractorStyleBaseView*)_wxvtk3Dbaseview_Clipping3D_BB->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( vtkinteractorstyle3Dview );
692         }
693         
694 //EED 29Mars2009
695 //      RefreshView(true);
696         
697 }
698
699 //----------------------------------------------------------------------------
700
701 void wxMPRWidget::OnRefreshView(wxCommandEvent & event)
702 {
703         RefreshView();
704 }
705 //----------------------------------------------------------------------------
706 void wxMPRWidget::OnDClickLeft(wxCommandEvent & event)
707 {
708         if (_wxsphereview!=NULL) {
709                 _wxsphereview   -> RefreshPoint();
710         }
711         if (_wxsphereview_B!=NULL) {
712                 _wxsphereview_B -> RefreshPoint();
713         }
714 }
715 //----------------------------------------------------------------------------
716 void wxMPRWidget::RefreshView(bool firsttime){
717
718         if (_refreshAPage == 0 )
719         {
720
721                 if ((_vtkmpr2Dview[0]!=NULL) && (_vtkmpr2Dview[1]!=NULL) && (_vtkmpr2Dview[2]!=NULL) )
722                 {
723                         _vtkmpr2Dview[2] -> Refresh();
724                         _vtkmpr2Dview[1] -> Refresh();
725                         _vtkmpr2Dview[0] -> Refresh();
726
727                         if (firsttime==false)
728                         {
729                                 _vtkmpr2Dview[2] -> RefreshView();
730                                 _vtkmpr2Dview[1] -> RefreshView();
731                                 _vtkmpr2Dview[0] -> RefreshView();
732                         }
733
734                         if (_refreshBPage == 0 )
735                         {
736                                 if (_vtkplane2Dview!=NULL)
737                                 {
738                                         _vtkplane2Dview -> Refresh();           
739                                         if (firsttime==false)
740                                         {
741                                                 _vtkplane2Dview -> RefreshView();
742                                         }
743 //                                      _wxvtk3Dbaseview_MPR3D_B -> Refresh();
744                                 }
745                         }
746                         if (_refreshBPage == 1 )
747                         {
748                                 //sphere
749                         }
750                         if (_refreshBPage == 2 )
751                         {
752                                 if ((_wxvtkmpr3Dview!=NULL)  && (_wxvtk3Dbaseview_MPRClipping3D!=NULL) && (_wxvtkclipping3Dview!=NULL) )
753                                 {
754                                         _wxvtkmpr3Dview                 -> RefreshView();
755                                         _wxvtk3Dbaseview_MPRClipping3D  -> Refresh();
756                                         _wxvtkclipping3Dview            -> Refresh();
757                                 }
758                         }
759                 }
760         }
761
762         if (_refreshAPage == 1 )
763         {
764                 if (_vtkmpr2Dview_B[0] !=NULL){
765                         _vtkmpr2Dview_B[0] -> Refresh();
766                 }
767         }
768         if (_refreshAPage == 2 )
769         {
770                 if (_vtkmpr2Dview_B[1] !=NULL){
771                         _vtkmpr2Dview_B[1] -> Refresh();
772                 }
773         }
774         if (_refreshAPage == 3 )
775         {
776                 if (_vtkmpr2Dview_B[2] !=NULL){
777                         _vtkmpr2Dview_B[2] -> Refresh();
778                 }
779         }
780         if (_refreshAPage == 4 )
781         {
782                 if (_vtkplane2Dview_B!=NULL){
783                         _vtkplane2Dview_B -> Refresh();
784                         if (firsttime==false)
785                         {
786                                 _vtkplane2Dview_B -> RefreshView();
787                         }
788                 }
789         }
790
791         if (_refreshAPage == 5 )
792         {
793                 // sphere
794         }
795         if (_refreshAPage == 6 )
796         {
797                 if (_wxvtkmpr3Dview_B!=NULL){
798                         _wxvtkmpr3Dview_B               -> Refresh();
799                         _wxvtk3Dbaseview_MPR3D_B        -> Refresh();
800                 }
801         }
802         if (_refreshAPage == 7 )
803         {
804                 if (_wxvtkmpr3Dview_BB!=NULL){
805                         _wxvtkmpr3Dview_BB              -> RefreshView();
806                         _wxvtkclipping3Dview_BB         -> Refresh();
807                         _wxvtk3Dbaseview_Clipping3D_BB  -> Refresh();
808                         if (_panelCutting!=NULL)
809                         {
810                                 _panelCutting->RefreshView();
811                         }
812                 }
813         }
814
815 }
816 //----------------------------------------------------------------------------
817 vtkMPRBaseData  *wxMPRWidget::GetVtkMPRBaseData(){      
818         return _vtkmprbasedata;
819 }
820 //----------------------------------------------------------------------------
821 vtkPlane2DView *wxMPRWidget::GetVtkPlane2DView()
822 {
823         return _vtkplane2Dview;
824 }
825 //----------------------------------------------------------------------------
826 wxVtkMPR3DView  *wxMPRWidget::GetWxvtkmpr3Dview_BB()
827 {
828         return _wxvtkmpr3Dview_BB;
829 }
830 //----------------------------------------------------------------------------
831 wxVtkBaseView *wxMPRWidget::GetWxVtkBaseView(int page, int id)
832 {
833         wxVtkBaseView *result=NULL;
834         if (page==0)
835         {       
836                 if ((id>=0) &&(id<=3)){
837                         result=_vtkmpr2Dview[id];
838                 }
839                 if (id==3)
840                 {
841                         result=_vtkplane2Dview;
842                 }
843         }
844         return result;
845 }
846 //----------------------------------------------------------------------------
847 wxVtkMPR2DView *wxMPRWidget::GetWxvtkMPR2Dview(int direction)
848 {
849         return _vtkmpr2Dview[direction];
850 }
851
852
853
854 //----------------------------------------------------------------------------
855
856
857 //----------------------------------------------------------------------------
858 //----------------------------------------------------------------------------
859 //----------------------------------------------------------------------------
860
861
862
863 // EOF - wxMPRWidget.cxx
864
865
866
867