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