]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR3DViewCntrlPanel.cxx
#3219 creaMaracasVisu Feature New Normal - vtk8itk4wx3-mingw64
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxVtkMPR3DViewCntrlPanel.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 #include "wxVtkMPR3DViewCntrlPanel.h"
27
28 #include "HistogramDialog.h"
29 #include <wx/combobox.h>
30
31 wxVtkMPR3DViewCntrlPanel::wxVtkMPR3DViewCntrlPanel(wxWindow *parent, wxVtkMPR3DView *wxvtkmpr3Dview, bool align )
32 : wxPanel(parent, -1)
33 {
34         wxPanel *panel  = this;
35         _wxvtkmpr3Dview = wxvtkmpr3Dview;
36
37         /*int maxX = _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetMaxPositionX();
38         int maxY = _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetMaxPositionY();
39         int maxZ = _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetMaxPositionZ();*/
40
41         //int maxX = 1;
42         //int maxY = 1;
43         //int maxZ = 1;
44
45         //CPR: Modified 30 Nov 2009
46         /*
47         wxCheckBox              *ckBoxX                 = new wxCheckBox(panel,-1,_T("X           "));
48                                         _positionX              = new wxSlider(panel,-1,maxX/2,0,maxX, wxDefaultPosition, wxSize(150,40), wxSL_HORIZONTAL | wxSL_LABELS);
49         wxCheckBox              *ckBoxY                 = new wxCheckBox(panel,-1,_T("Y           "));
50                                         _positionY              = new wxSlider(panel,-1,maxY/2,0,maxY, wxDefaultPosition, wxSize(150,40), wxSL_HORIZONTAL | wxSL_LABELS);
51         wxCheckBox              *ckBoxZ                 = new wxCheckBox(panel,-1,_T("Z           "));
52                                         _positionZ              = new wxSlider(panel,-1,maxZ/2,0,maxZ, wxDefaultPosition, wxSize(150,40), wxSL_HORIZONTAL | wxSL_LABELS);
53         wxButton                *btnColorTable  = new wxButton (panel, -1, _T("Edit Color Table") );
54         */
55
56         _ckBoxX                                         = new wxCheckBox(panel,-1,_T("X   "));
57         _positionX                                      = new wxSlider(panel,-1,0,0,1, wxDefaultPosition, wxSize(300,40), wxSL_HORIZONTAL | wxSL_LABELS);
58         _ckBoxY                                         = new wxCheckBox(panel,-1,_T("Y   "));
59         _positionY                                      = new wxSlider(panel,-1,0,0,1, wxDefaultPosition, wxSize(300,40), wxSL_HORIZONTAL | wxSL_LABELS);
60         _ckBoxZ                                         = new wxCheckBox(panel,-1,_T("Z   "));
61         _positionZ                                      = new wxSlider(panel,-1,0,0,1, wxDefaultPosition, wxSize(300,40), wxSL_HORIZONTAL | wxSL_LABELS);
62
63         _ckBoxXYZ                                       = new wxCheckBox(panel,-1,_T("3D Axis  "));
64         _ckBoxFixAxis2D                         = new wxCheckBox(panel,-1,_T("2D Fix Axis"));
65         _opacityAxis                            = new wxSlider(panel,-1,50,0,100, wxDefaultPosition, wxSize(100,40), wxSL_HORIZONTAL | wxSL_LABELS);
66
67         _ckBoxPlane                                     = new wxCheckBox(panel,-1,_T("Plane"));
68 ////EED 05Nov2012       _ckBox_BW_Color_Plane           = new wxCheckBox(panel,-1,_T("GL/Color"));
69         wxButton *btnColorTable         = new wxButton (panel, -1, _T("Color table") );
70         wxButton *btnFreePlanesOrtho= new wxButton (panel, -1, _T("Orthogonal planes GL") );
71
72         _ckFreePlaneX= new wxCheckBox(panel,-1,_T("X "));
73         _ckFreePlaneY= new wxCheckBox(panel,-1,_T("Y "));
74         _ckFreePlaneZ= new wxCheckBox(panel,-1,_T("Z "));
75         _ckFreePlaneInteraction= new wxCheckBox(panel,-1,_T("Interaction planes GL"));
76         
77         //EED: If-else statements added 30 Nov 2009
78         _ckFreePlaneX->SetValue(false);
79         _ckFreePlaneY->SetValue(false);
80         _ckFreePlaneZ->SetValue(false);
81         _ckFreePlaneInteraction->SetValue(true);
82         
83         _ckBoxX->SetValue(false);
84         _ckBoxY->SetValue(false);
85         _ckBoxZ->SetValue(false);
86         _ckBoxXYZ->SetValue(false);
87 ////EED 05Nov2012       _ckBox_BW_Color_Plane->SetValue(true);
88         _ckBoxPlane->SetValue(false);
89         _ckBoxOutline= new wxCheckBox(panel,-1,_T("Outline"));
90         _ckBoxOutline->SetValue(true);
91         _ckBoxInterpolate= new wxCheckBox(panel,-1,_T("Interpolate"));
92         _ckBoxInterpolate->SetValue(true);
93
94
95         _ckBoxBackGroundBlack= new wxCheckBox(panel,-1,_T("Background Black"));;
96         _ckBoxBackGroundBlack->SetValue(false);
97
98         _positionX->SetSize(400,20);
99         _positionY->SetSize(400,20);
100         _positionZ->SetSize(400,20);
101
102         // Stereo
103         _cbStereo = new wxComboBox(panel, -1, _T(""), wxDefaultPosition, wxDefaultSize, 0, NULL,wxCB_READONLY );        
104         _cbStereo->Append(_T(" * NO STEREO"));
105         _cbStereo->Append(_T("   STEREO CRYSTAL EYES"));
106         _cbStereo->Append(_T("   STEREO RED BLUE"));
107         _cbStereo->Append(_T("   STEREO INTERLACED"));
108         _cbStereo->Append(_T("   STEREO LEFT"));
109         _cbStereo->Append(_T("   STEREO RIGHT"));
110         _cbStereo->Append(_T("   STEREO DRESDEN"));
111         _cbStereo->Append(_T(" * STEREO ANAGLYPH"));
112         _cbStereo->Append(_T("   STEREO CHECKERBOARD"));
113         _cbStereo->Select(0);
114
115         Connect(_ckBoxX->GetId()                                , wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleAxisX     );
116         Connect(_positionX->GetId()                             , wxEVT_COMMAND_SLIDER_UPDATED,   (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnPositionX                );
117         Connect(_ckBoxY->GetId()                                , wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleAxisY     );
118         Connect(_positionY->GetId()                             , wxEVT_COMMAND_SLIDER_UPDATED,   (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnPositionY                );
119         Connect(_ckBoxZ->GetId()                                , wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleAxisZ     );
120         Connect(_positionZ->GetId()                             , wxEVT_COMMAND_SLIDER_UPDATED,   (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnPositionZ                );
121         
122         Connect(btnColorTable->GetId()                  , wxEVT_COMMAND_BUTTON_CLICKED,   (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnEditColorTable   );
123         Connect(_ckBoxXYZ->GetId()                              , wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleAxisXYZ   );
124         Connect(_ckBoxPlane->GetId()                    , wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisiblePlane     );
125         Connect(_ckFreePlaneX->GetId()          , wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleFreePlaneX);
126         Connect(_ckFreePlaneY->GetId()          , wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleFreePlaneY);
127         Connect(_ckFreePlaneZ->GetId()          , wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleFreePlaneZ);
128         Connect(btnFreePlanesOrtho->GetId()             , wxEVT_COMMAND_BUTTON_CLICKED,   (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnFreePlanesOrtho  );
129         Connect(_ckFreePlaneInteraction->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleFreePlaneInteraction );
130         Connect(_cbStereo->GetId()                              , wxEVT_COMMAND_COMBOBOX_SELECTED, (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnSetStereo               );
131         Connect(_ckBoxOutline->GetId()                  , wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnOutline                  );
132         Connect(_ckBoxBackGroundBlack->GetId()  , wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnBackGroundBlack  );
133         Connect(_ckBoxInterpolate->GetId()              , wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnInterpolate              );
134         Connect(_ckBoxFixAxis2D->GetId()                , wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnFixAxis2D                );
135         Connect(_opacityAxis->GetId()                   , wxEVT_COMMAND_SLIDER_UPDATED,   (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnOpacityAxis              );
136         
137         wxFlexGridSizer *sizer;
138         
139         //      wxBoxSizer *sizer        = new wxBoxSizer(wxVERTICAL);
140         //      wxBoxSizer *sizerH4 = new wxBoxSizer(wxHORIZONTAL);
141         
142         //CPR: If-else statements added 30 Nov 2009
143         wxFlexGridSizer *sizerV1;
144         wxFlexGridSizer *sizerH4;
145         wxFlexGridSizer *sizerH4a;
146         wxFlexGridSizer *sizerH5;
147         wxFlexGridSizer *sizerH6;
148
149         if(align)
150         {
151                 sizer   = new wxFlexGridSizer(4);
152                 sizerH4 = new wxFlexGridSizer(3);
153
154                 sizerH4a = new wxFlexGridSizer(3);
155                 
156                 sizerH4->Add( new wxStaticText(panel, -1,_T(" "))               ,1, wxALL|wxEXPAND                                              , 0);
157                 sizerH4->Add( new wxStaticText(panel, -1,_T("GL"))              ,1, wxALL|wxEXPAND                                              , 0);
158                 sizerH4->Add( new wxStaticText(panel, -1,_T("Color   ")),1, wxALL|wxEXPAND                                              , 0);
159                 sizerH4->Add( _positionX                                                                ,1,     wxGROW                                          , 0);
160                 sizerH4->Add( _ckFreePlaneX                                                             ,1, wxALL|wxEXPAND                                              , 0);
161                 sizerH4->Add( _ckBoxX                                                                   ,0,     wxALIGN_CENTER_VERTICAL|wxSHAPED        , 0);
162                 sizerH4->Add( _positionY                                                                ,1,     wxGROW                                                          , 0);
163                 sizerH4->Add( _ckFreePlaneY                                                             ,1, wxALL|wxEXPAND                                              , 0);
164                 sizerH4->Add( _ckBoxY                                                                   ,0,     wxALIGN_CENTER_VERTICAL|wxSHAPED        , 0);
165                 sizerH4->Add( _positionZ                                                                ,1,     wxGROW                                                          , 0);
166                 sizerH4->Add( _ckFreePlaneZ                                                             ,1, wxALL|wxEXPAND                                              , 0);
167                 sizerH4->Add( _ckBoxZ                                                                   ,0,     wxALIGN_CENTER_VERTICAL|wxSHAPED        , 0);
168
169 //EED 2016/02/19                
170                 sizerH4->Add( _ckBoxInterpolate                                                 ,1, wxALL|wxEXPAND                                              , 0);
171                 sizerH4->Add( new wxStaticText(panel, -1,_T(" "))               ,1, wxALL|wxEXPAND                                              , 0);
172                 sizerH4->Add( new wxStaticText(panel, -1,_T(" "))               ,1, wxALL|wxEXPAND                                              , 0);
173 //              sizerH4->Add( _ckBoxXYZ                                                                 ,1, wxALL|wxEXPAND                                              , 0);
174 //              sizerH4->Add( new wxStaticText(panel, -1,_T(" "))               ,1, wxALL|wxEXPAND                                              , 0);
175 //              sizerH4->Add( new wxStaticText(panel, -1,_T(" "))               ,1, wxALL|wxEXPAND                                              , 0);
176
177 //              sizerH4a->Add( new wxStaticText(panel, -1,_T("Axis 2D:")),1, wxALL|wxEXPAND                                             , 0);
178                 sizerH4a->Add( _ckBoxXYZ                                                                ,1, wxALL|wxEXPAND                                              , 0);
179                 sizerH4a->Add( _ckBoxFixAxis2D                                                  ,1, wxALL|wxEXPAND                                              , 0);
180                 sizerH4a->Add( _opacityAxis                                                             ,1, wxALL|wxEXPAND                                              , 0);
181
182                 sizerH4->Add( sizerH4a                                                                  ,1, wxALL|wxEXPAND                                              , 0);
183                 sizerH4->Add( new wxStaticText(panel, -1,_T(" "))               ,1, wxALL|wxEXPAND                                              , 0);
184                 sizerH4->Add( new wxStaticText(panel, -1,_T(" "))               ,1, wxALL|wxEXPAND                                              , 0);
185                 
186                         
187                 
188                 sizerH5 = new wxFlexGridSizer(1);
189                 sizerH5->Add( new wxStaticText(panel, -1,_T("      "))  , 1, wxALL|wxEXPAND                                             , 0);
190                 sizerH5->Add( _ckBoxPlane                                                               , 1, wxALL|wxEXPAND                                             , 0);           
191                 sizerH5->Add( new wxStaticText(panel, -1,_T("      "))  , 1, wxALL|wxEXPAND                                             , 0);
192 ////EED 05Nov2012               sizerH5->Add( _ckBox_BW_Color_Plane             , 1, wxALL|wxEXPAND                                             , 0);
193                 sizerH5->Add( _ckFreePlaneInteraction                                   , 1, wxALL|wxEXPAND                                             , 0);
194                 sizerH5->Add( btnFreePlanesOrtho                                        , 0, wxALIGN_CENTER_VERTICAL|wxSHAPED   , 0);
195                 sizerH5->Add( new wxStaticText(panel, -1,_T(" "))               , 1, wxALL|wxEXPAND                                             , 0);
196                 sizerH5->Add( btnColorTable                             , 0, wxALIGN_CENTER_VERTICAL|wxSHAPED   , 0);
197                 sizerH5->Add( new wxStaticText(panel, -1,_T(" "))               , 1, wxALL|wxEXPAND                                             , 0);
198                 sizerH5->Add( _cbStereo                                                                 , 1, wxALL|wxEXPAND                                             , 0);
199                 
200                 sizerH6 = new wxFlexGridSizer(1);
201                 sizerH6->Add( _ckBoxOutline                                                             , 1, wxALL|wxEXPAND                                             , 0);
202                 sizerH6->Add( _ckBoxBackGroundBlack                                             , 1, wxALL|wxEXPAND                                             , 0);
203
204                 sizer->Add( sizerH4,  1, wxALL|wxGROW,  2);
205                 sizer->Add( sizerH5,  1, wxALL|wxEXPAND,2);
206                 sizer->Add( sizerH6,  1, wxALL|wxEXPAND,2);
207                         
208         }       else    {
209                 sizer    = new wxFlexGridSizer(1);
210
211                 sizerH4 = new wxFlexGridSizer(10);
212                 sizerH5 = new wxFlexGridSizer(10);
213                 sizerH6 = new wxFlexGridSizer(10);
214
215                 sizerH4->Add( _positionX        , 1, wxGROW                          , 0 );
216                 sizerH4->Add( _ckBoxX           , 0, wxALIGN_CENTER_VERTICAL|wxSHAPED, 0 );
217                 sizerH4->Add( _positionY        , 1, wxGROW                          , 0 );
218                 sizerH4->Add( _ckBoxY           , 0, wxALIGN_CENTER_VERTICAL|wxSHAPED, 0 );
219                 sizerH4->Add( _positionZ        , 1, wxGROW                          , 0 );
220                 sizerH4->Add( _ckBoxZ           , 0, wxALIGN_CENTER_VERTICAL|wxSHAPED, 0 );
221                 sizerH4->Add( btnColorTable     , 0, wxALIGN_CENTER_VERTICAL|wxSHAPED, 0 );
222
223                 sizerH5->Add( _ckBoxXYZ                                                                 , 1, wxALL|wxEXPAND, 0);
224                 sizerH5->Add( _ckBoxPlane                                                               , 1, wxALL|wxEXPAND, 0);
225 ////EED 05Nov2012               sizerH5->Add( _ckBox_BW_Color_Plane                                             , 1, wxALL|wxEXPAND, 0);
226                 sizerH5->Add( new wxStaticText(panel, -1,_T("      "))  , 1, wxALL|wxEXPAND, 0);
227
228                 sizerH6 = new wxFlexGridSizer(10);
229                 sizerH6->Add( _ckFreePlaneX                            , 1, wxALL|wxEXPAND, 0);
230                 sizerH6->Add( new wxStaticText(panel, -1,_T(" "))      , 1, wxALL|wxEXPAND, 0);
231                 sizerH6->Add( _ckFreePlaneY                            , 1, wxALL|wxEXPAND, 0);
232                 sizerH6->Add( new wxStaticText(panel, -1,_T(" "))      , 1, wxALL|wxEXPAND, 0);
233                 sizerH6->Add( _ckFreePlaneZ                            , 1, wxALL|wxEXPAND, 0);
234                 sizerH6->Add( new wxStaticText(panel, -1,_T("  "))     , 1, wxALL|wxEXPAND, 0);
235                 sizerH6->Add( _ckFreePlaneInteraction                  , 1, wxALL|wxEXPAND, 0);
236                 sizerH6->Add( new wxStaticText(panel, -1,_T(" "))       , 1, wxALL|wxEXPAND, 0);
237                 sizerH6->Add( btnFreePlanesOrtho        , 0     , wxALIGN_CENTER_VERTICAL|wxSHAPED, 0 );
238                 sizerH6->Add( new wxStaticText(panel, -1,_T(" "))       , 1, wxALL|wxEXPAND, 0);
239                 sizerH6->Add( _cbStereo, 1, wxALL|wxEXPAND, 0);
240                 
241                 sizer->Add( sizerH4,  1, wxALL|wxGROW,  2);
242                 sizer->Add( sizerH5,  1, wxALL|wxEXPAND,2);
243                 sizer->Add( sizerH6,  1, wxALL|wxEXPAND,2);
244         }
245
246         
247
248         
249         //EED 28 sep 2006
250         //      wxFlexGridSizer *sizerH6 = new wxFlexGridSizer(10);
251         //      wxFlexGridSizer *sizerH7 = new wxFlexGridSizer(10);
252
253         //      sizerH4->Add( ckBoxX            , 1, wxALL|wxEXPAND, 0);
254         //      sizerH4->Add( new wxStaticText(panel, -1,"  ")                  , 1, wxALL|wxEXPAND, 0);
255         //      sizerH4->Add( _positionX        , 1, wxALL|wxEXPAND, 0);
256
257         //      sizerH5->Add( ckBoxY            , 1, wxALL|wxEXPAND, 0);
258         //      sizerH5->Add( new wxStaticText(panel, -1,"  ")                  , 1, wxALL|wxEXPAND, 0);
259         //      sizerH5->Add( _positionY        , 1, wxALL|wxEXPAND, 0);
260
261         //      sizerH6->Add( ckBoxZ            , 1, wxALL|wxEXPAND, 0);
262         //      sizerH6->Add( new wxStaticText(panel, -1,"  ")                  , 1, wxALL|wxEXPAND, 0);
263         //      sizerH6->Add( _positionZ        , 1, wxALL|wxEXPAND, 0);
264
265         //      sizerH7->Add( _ckBoxXYZ         , 1, wxALL|wxEXPAND, 0);
266         //      sizerH7->Add( _ckBoxPlane       , 1, wxALL|wxEXPAND, 0);
267
268         //      sizer->Add( sizerH4                     , 1, wxALL|wxEXPAND, 2);
269         //      sizer->Add( sizerH5                     , 1, wxALL|wxEXPAND, 2);
270         //      sizer->Add( sizerH6                     , 1, wxALL|wxEXPAND, 2);
271         //      sizer->Add( sizerH7                     , 1, wxALL|wxEXPAND, 2);
272
273                 
274         //      sizerH5->Add( ckBoxX                            ,  1, wxALL|wxEXPAND, 0);
275         //      sizerH5->Add( ckBoxY                            ,  1, wxALL|wxEXPAND, 0);
276         //      sizerH5->Add( ckBoxZ                            ,  1, wxALL|wxEXPAND, 0);
277
278
279         panel->ClearBackground();
280 //      panel->SetSize(400,50);
281         sizer->FitInside(panel);
282         panel->SetAutoLayout(true);
283         panel->SetSizer(sizer);
284         panel->Layout();
285
286         panel->SetEventHandler((wxEvtHandler*)this);
287         
288         //this->UpdateControlPanel();
289                 
290 }
291
292 //-------------------------------------------------------------------
293 void wxVtkMPR3DViewCntrlPanel::UpdateControlPanel(bool firsttime)
294 {
295         vtkMPRBaseData* basedata = _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData();
296         if(basedata != NULL){
297
298                 vtkImageData* img = basedata->GetImageData();
299                 int x0,x1,y0,y1,z0,z1;
300
301                 if(img)
302                 {
303                         img->GetExtent(x0,x1,y0,y1,z0,z1);
304                         _positionX->SetRange(x0,x1);
305                         _positionY->SetRange(y0,y1);
306                         _positionZ->SetRange(z0,z1);
307
308                         if (firsttime==true)
309                         {
310                                 _positionX->SetValue((x0+x1)/2);
311                                 _positionY->SetValue((y0+y1)/2);
312                                 _positionZ->SetValue((z0+z1)/2);
313                         } // if firsttime
314
315 //EED 12April2012  This make a floting window in MacOs and Linux with for windows                       
316 //                      _positionX->Update();
317 //                      _positionY->Update();
318 //                      _positionZ->Update();
319 //                      this->Update();
320                 }//img
321                 
322         }//basedata 
323         
324 }
325
326 //-------------------------------------------------------------------
327 wxVtkMPR3DViewCntrlPanel::~wxVtkMPR3DViewCntrlPanel()
328 {
329 }
330
331 //-------------------------------------------------------------------
332 void wxVtkMPR3DViewCntrlPanel::Refresh()
333 {
334 //      wxPanel::Refresh();
335         _positionX->SetValue( (int)(_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetX( )) );
336         _positionY->SetValue( (int)(_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetY( )) );
337         _positionZ->SetValue( (int)(_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetZ( )) );
338 }
339
340 /*
341 //-------------------------------------------------------------------
342 int wxVtkMPR3DViewCntrlPanel::GetIdTissue()
343 {
344         int idTissue=-1;
345         if (_surfA->GetValue()==true)
346         {
347                 idTissue=0;
348         }
349         if (_surfB->GetValue()==true)
350         {
351                 idTissue=1;
352         }
353         if (_surfC->GetValue()==true)
354         {
355                 idTissue=2;
356         }
357         if (_surfD->GetValue()==true)
358         {
359                 idTissue=3;
360         }
361
362         return idTissue;
363 }
364 */
365
366 //-------------------------------------------------------------------
367 //void wxVtkMPR3DViewCntrlPanel::On_BW_Color_Plane(wxCommandEvent& event)
368 //{
369 //      printf ("EED wxVtkMPR3DViewCntrlPanel::On_BW_Color_Plane  ...... NOT Implemented\n ");
370 //}
371
372
373 //-------------------------------------------------------------------
374 void wxVtkMPR3DViewCntrlPanel::OnEditColorTable(wxCommandEvent& event)
375 {
376         
377         vtkImageData *imagedata = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData();
378
379         if ( imagedata->GetScalarType()!=VTK_UNSIGNED_SHORT )
380         {
381                 wxMessageDialog windowMessage1(NULL,_T("This option is just available for UNSIGNED SHORT images."), _T("Alert !"), wxOK);
382                 windowMessage1.ShowModal();
383                 return;
384         }
385         
386         vtkColorTransferFunction *ctfun                 = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetvtkColorTransferFunction(); 
387         std::vector<double> *ctfunVectorPoint   = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetctFunVectorPoint();
388         std::vector<double> *ctfunVectorRed             = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetctFunVectorRed();
389         std::vector<double> *ctfunVectorGreen   = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetctFunVectorGreen();
390         std::vector<double> *ctfunVectorBlue    =   this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetctFunVectorBlue();
391
392         //void *p=this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer(); // JPRx
393
394
395         int i=0,xi,r,g,b;
396         
397         HistogramDialog* hDlg=new HistogramDialog(NULL,_T("Color table"),imagedata,2);
398         
399                 
400         hDlg->erasePointsTransferenceFunction();                
401         int ctfSize=ctfunVectorRed->size();
402         if(ctfSize>0)
403         {
404 // MACHETE  OJO Eduardo
405                 int i=0;
406                         while(i<ctfSize)
407                         {
408                                 double gr       = (*ctfunVectorPoint)[i];
409                                 double r        = (*ctfunVectorRed)[i];
410                                 double g        = (*ctfunVectorGreen)[i];
411                                 double b        = (*ctfunVectorBlue)[i];                        
412
413                                 hDlg->addColorPoint(gr,(int)(r*255),(int)(g*255),(int)(b*255));
414
415                                 i++;
416                         }
417         }
418
419         //
420         // when the user had changed the transference Function
421         //
422         
423         //setting variables if the user wants to do refresh
424         
425         hDlg->setCTF(ctfun);
426         //hDlg->setMPR3Dview(_wxvtkmpr3Dview);
427         
428         if(hDlg->ShowModal()== wxID_OK )
429         {       
430                 
431                 // -- vtkColorTransferFunction  --
432                         ctfun->RemoveAllPoints ();
433                         //clean colors
434                         ctfunVectorPoint->clear();
435                         ctfunVectorRed->clear();
436                         ctfunVectorGreen->clear();
437                         ctfunVectorBlue->clear();
438
439                         int nCTFpoints=hDlg->getSizeBarColor();
440 // Machete .. Ojo Eduardo
441                         i=0;    
442                         while(i<nCTFpoints)
443                         {
444                                 hDlg->getDataBarColorPoint(i,xi,r,g,b);
445                                 /*
446                                 if (i==0)
447                                 {
448                                         hDlg->getDataBarColorPoint(1,xi,r,g,b);
449                                 } 
450                                 if (i==nCTFpoints)
451                                 {
452                                         hDlg->getDataBarColorPoint(i-1,xi,r,g,b);
453                                 } 
454                                 */
455                                 ctfun->AddRGBPoint(xi,r/255.0,g/255.0,b/255.0 );
456                                 ctfunVectorPoint->push_back(xi);
457                                 ctfunVectorRed->push_back(r/255.0);
458                                 ctfunVectorGreen->push_back(g/255.0);
459                                 ctfunVectorBlue->push_back(b/255.0);
460                                 i++;
461                                 
462                         }
463                         
464         }
465         
466         else
467         {
468                 
469                 if(hDlg->getRefreshed())
470                 {
471                         // -- vtkColorTransferFunction  --
472                         ctfun->RemoveAllPoints ();
473                         
474                         int i=0;
475                         int size=ctfunVectorPoint->size();
476                         
477                         for(i=0;i<size;i++)
478                         {
479                                 double grey2=(*ctfunVectorPoint)[i];
480                                 double red =(*ctfunVectorRed)[i];
481                                 double green =(*ctfunVectorGreen)[i];
482                                 double blue = (*ctfunVectorBlue)[i];
483                                 ctfun->AddRGBPoint(grey2,red,green,blue);
484                         }
485                  }      
486                  
487         }
488
489  hDlg->Destroy();
490 }
491
492
493 //-------------------------------------------------------------------
494 void wxVtkMPR3DViewCntrlPanel::OnVisibleFreePlaneX(wxCommandEvent& event)
495 {
496         _wxvtkmpr3Dview->FreePlaneVisible( 1, event.IsChecked() );
497         _wxvtkmpr3Dview->FreePlaneInteraction( _ckFreePlaneInteraction->GetValue() );
498 }
499
500 //-------------------------------------------------------------------
501 void wxVtkMPR3DViewCntrlPanel::OnVisibleFreePlaneY(wxCommandEvent& event)
502 {
503         _wxvtkmpr3Dview->FreePlaneVisible(  2, event.IsChecked() );
504         _wxvtkmpr3Dview->FreePlaneInteraction( _ckFreePlaneInteraction->GetValue() );
505 }
506
507
508 //-------------------------------------------------------------------
509 void wxVtkMPR3DViewCntrlPanel::OnVisibleFreePlaneZ(wxCommandEvent& event)
510 {
511         _wxvtkmpr3Dview->FreePlaneVisible(  3, event.IsChecked() );
512         _wxvtkmpr3Dview->FreePlaneInteraction( _ckFreePlaneInteraction->GetValue() );
513 }
514
515
516 //-------------------------------------------------------------------
517 void wxVtkMPR3DViewCntrlPanel::OnVisibleFreePlaneInteraction(wxCommandEvent& event)
518 {
519         _wxvtkmpr3Dview->FreePlaneInteraction(  event.IsChecked() );
520 }
521
522 //-------------------------------------------------------------------
523 void wxVtkMPR3DViewCntrlPanel::OnFreePlanesOrtho(wxCommandEvent& event)
524 {
525         _wxvtkmpr3Dview->SetFreePlanesOrtho();
526 }
527
528 //-------------------------------------------------------------------
529 void wxVtkMPR3DViewCntrlPanel::OnSetStereo(wxCommandEvent& event)
530 {
531         this->_wxvtkmpr3Dview->GetWxvtk3Dbaseview()->SetStereo( _cbStereo->GetSelection()  );
532 }
533
534
535
536 //-------------------------------------------------------------------
537 void wxVtkMPR3DViewCntrlPanel::OnVisibleAxisX(wxCommandEvent& event)
538 {       
539         _wxvtkmpr3Dview->VisibleImageActor(0, event.IsChecked() );
540         _wxvtkmpr3Dview->Refresh();
541         
542         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
543
544         try{
545 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
546 #if wxMAJOR_VERSION <= 2
547                 _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
548 #else
549                 _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);
550 #endif
551         }catch(char* e){
552                 std::cout<<e<<std::endl;
553         }
554 }
555 //-------------------------------------------------------------------
556 void wxVtkMPR3DViewCntrlPanel::OnVisibleAxisY(wxCommandEvent& event)
557 {
558         _wxvtkmpr3Dview->VisibleImageActor(1, event.IsChecked() );
559         _wxvtkmpr3Dview->Refresh();
560
561         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
562 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
563 #if wxMAJOR_VERSION <= 2
564         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
565 #else
566         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);
567 #endif
568 }
569 //-------------------------------------------------------------------
570 void wxVtkMPR3DViewCntrlPanel::OnVisibleAxisZ(wxCommandEvent& event)
571 {
572         _wxvtkmpr3Dview->VisibleImageActor(2, event.IsChecked() );
573         _wxvtkmpr3Dview->Refresh();
574         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
575 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
576 #if wxMAJOR_VERSION <= 2
577         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
578 #else
579         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);
580 #endif
581 }
582
583 //-------------------------------------------------------------------
584 void wxVtkMPR3DViewCntrlPanel::OnVisibleAxisXYZ(wxCommandEvent& event)
585 {
586
587         _wxvtkmpr3Dview->VisiblePointWidget(event.IsChecked());
588 }
589
590 //-------------------------------------------------------------------
591 void wxVtkMPR3DViewCntrlPanel::OnVisiblePlane(wxCommandEvent& event)
592 {
593         _wxvtkmpr3Dview->VisiblePlaneWidget(event.IsChecked());
594 }
595
596 //-------------------------------------------------------------------
597 void wxVtkMPR3DViewCntrlPanel::OnPositionX(wxScrollEvent& event)
598 {
599         _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetX( _positionX->GetValue() );
600         _wxvtkmpr3Dview->RefreshView();
601
602         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
603 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
604 #if wxMAJOR_VERSION <= 2
605         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
606 #else
607         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);
608 #endif
609 }
610 //-------------------------------------------------------------------
611 void wxVtkMPR3DViewCntrlPanel::OnPositionY(wxScrollEvent& event)
612 {
613         _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetY( _positionY->GetValue() );
614         _wxvtkmpr3Dview->RefreshView();
615         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
616 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
617 #if wxMAJOR_VERSION <= 2
618         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
619 #else
620         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);
621 #endif
622 }
623 //-------------------------------------------------------------------
624 void wxVtkMPR3DViewCntrlPanel::OnPositionZ(wxScrollEvent& event)
625 {
626         _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetZ( _positionZ->GetValue() );
627         _wxvtkmpr3Dview->RefreshView();
628         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
629 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
630 #if wxMAJOR_VERSION <= 2
631         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
632 #else
633         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);
634 #endif
635 }
636
637
638
639 //-------------------------------------------------------------------
640 bool wxVtkMPR3DViewCntrlPanel::GetVisibleX()
641 {
642         return _ckBoxX->GetValue();
643 }
644
645 //-------------------------------------------------------------------
646 bool wxVtkMPR3DViewCntrlPanel::GetVisibleY()
647 {
648         return _ckBoxY->GetValue();
649 }
650
651 //-------------------------------------------------------------------
652 bool wxVtkMPR3DViewCntrlPanel::GetVisibleZ()
653 {
654         return _ckBoxZ->GetValue();
655 }
656
657 //-------------------------------------------------------------------
658 bool wxVtkMPR3DViewCntrlPanel::GetVisibleXYZ()
659 {
660         return _ckBoxXYZ->GetValue();
661 }
662
663 //-------------------------------------------------------------------
664 ////EED 05Nov2012
665 //bool wxVtkMPR3DViewCntrlPanel::Get_BW_Color_Plane()
666 //{
667 //      return _ckBox_BW_Color_Plane;
668 //}
669
670 //-------------------------------------------------------------------
671 bool wxVtkMPR3DViewCntrlPanel::GetVisiblePlane()
672 {
673         return _ckBoxPlane->GetValue();
674 }
675
676 //-------------------------------------------------------------------
677 void wxVtkMPR3DViewCntrlPanel::SetVisibleX(bool value)
678 {
679         _ckBoxX->SetValue(value);
680         
681         _wxvtkmpr3Dview->VisibleImageActor(0, value );
682         _wxvtkmpr3Dview->Refresh();
683
684         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
685 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
686 #if wxMAJOR_VERSION <= 2
687         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
688 #else
689         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);
690 #endif
691 }
692
693 //-------------------------------------------------------------------
694 void wxVtkMPR3DViewCntrlPanel::SetVisibleY(bool value)
695 {
696         _ckBoxY->SetValue(value);
697         
698         _wxvtkmpr3Dview->VisibleImageActor(1, value );
699         _wxvtkmpr3Dview->Refresh();
700
701         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
702 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
703 #if wxMAJOR_VERSION <= 2
704         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
705 #else
706         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);
707 #endif
708 }
709
710 //-------------------------------------------------------------------
711 void wxVtkMPR3DViewCntrlPanel::SetVisibleZ(bool value)
712 {
713         _ckBoxZ->SetValue(value);
714
715         _wxvtkmpr3Dview->VisibleImageActor(2, value );
716         _wxvtkmpr3Dview->Refresh();
717
718         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
719 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
720 #if wxMAJOR_VERSION <= 2
721         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
722 #else
723         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);
724 #endif
725 }
726
727 //-------------------------------------------------------------------
728 void wxVtkMPR3DViewCntrlPanel::SetVisibleXYZ(bool value)
729 {
730         _ckBoxXYZ->SetValue(value);
731         _wxvtkmpr3Dview->VisiblePointWidget(value);
732
733 }
734
735 //-------------------------------------------------------------------
736 void wxVtkMPR3DViewCntrlPanel::SetVisiblePlane(bool value)
737 {
738         _ckBoxPlane->SetValue(value);
739         _wxvtkmpr3Dview->VisiblePlaneWidget(value);
740 }
741
742
743 //-------------------------------------------------------------------
744 void wxVtkMPR3DViewCntrlPanel::OnOutline(wxCommandEvent& event)
745 {
746         _wxvtkmpr3Dview->showOutlineActor( _ckBoxOutline->GetValue() );
747         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->Refresh();
748
749 }
750
751 //-------------------------------------------------------------------
752 void wxVtkMPR3DViewCntrlPanel::OnBackGroundBlack(wxCommandEvent& event)
753 {
754         if (_ckBoxBackGroundBlack->GetValue()==true)
755         {
756                 _wxvtkmpr3Dview->SetBackGroundType(0);
757         } else {
758                 _wxvtkmpr3Dview->SetBackGroundType(1);
759         }
760 }
761
762 //-------------------------------------------------------------------
763 void wxVtkMPR3DViewCntrlPanel::OnInterpolate(wxCommandEvent& event)
764 {
765         _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetInterpolate(  _ckBoxInterpolate->GetValue() );
766         _wxvtkmpr3Dview->Refresh();
767         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
768         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
769 }
770
771 //-------------------------------------------------------------------
772 void wxVtkMPR3DViewCntrlPanel::OnFixAxis2D(wxCommandEvent& event)
773 {
774         _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetFixAxis2D(    _ckBoxFixAxis2D->GetValue() );
775         _wxvtkmpr3Dview->Refresh();
776         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
777 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
778 #if wxMAJOR_VERSION <= 2
779         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
780 #else
781         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);
782 #endif
783 }
784
785 //-------------------------------------------------------------------
786 void wxVtkMPR3DViewCntrlPanel::OnOpacityAxis(wxCommandEvent& event)
787 {
788         _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetOpacityAxis(  _opacityAxis->GetValue()/100.0 );
789         _wxvtkmpr3Dview->Refresh();
790         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
791         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
792 }
793
794