]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR3DViewCntrlPanel.cxx
*** empty log message ***
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxVtkMPR3DViewCntrlPanel.cxx
1 #include "wxVtkMPR3DViewCntrlPanel.h"
2
3 #include "HistogramDialog.h"
4
5 wxVtkMPR3DViewCntrlPanel::wxVtkMPR3DViewCntrlPanel(wxWindow *parent, wxVtkMPR3DView *wxvtkmpr3Dview, bool align )
6 : wxPanel(parent, -1)
7 {
8
9         wxPanel *panel  = this;
10         _wxvtkmpr3Dview = wxvtkmpr3Dview;
11
12         /*int maxX = _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetMaxPositionX();
13         int maxY = _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetMaxPositionY();
14         int maxZ = _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetMaxPositionZ();*/
15
16         int maxX = 1;
17         int maxY = 1;
18         int maxZ = 1;
19
20         //CPR: Modified 30 Nov 2009
21         /*
22         wxCheckBox              *ckBoxX                 = new wxCheckBox(panel,-1,_T("X           "));
23                                         _positionX              = new wxSlider(panel,-1,maxX/2,0,maxX, wxDefaultPosition, wxSize(150,40), wxSL_HORIZONTAL | wxSL_LABELS);
24         wxCheckBox              *ckBoxY                 = new wxCheckBox(panel,-1,_T("Y           "));
25                                         _positionY              = new wxSlider(panel,-1,maxY/2,0,maxY, wxDefaultPosition, wxSize(150,40), wxSL_HORIZONTAL | wxSL_LABELS);
26         wxCheckBox              *ckBoxZ                 = new wxCheckBox(panel,-1,_T("Z           "));
27                                         _positionZ              = new wxSlider(panel,-1,maxZ/2,0,maxZ, wxDefaultPosition, wxSize(150,40), wxSL_HORIZONTAL | wxSL_LABELS);
28         wxButton                *btnColorTable  = new wxButton (panel, -1, _T("Edit Color Table") );
29         */
30
31         ckBoxX                  = new wxCheckBox(panel,-1,_T("X           "));
32         _positionX              = new wxSlider(panel,-1,maxX/2,0,maxX, wxDefaultPosition, wxSize(150,40), wxSL_HORIZONTAL | wxSL_LABELS);
33         ckBoxY                  = new wxCheckBox(panel,-1,_T("Y           "));
34         _positionY              = new wxSlider(panel,-1,maxY/2,0,maxY, wxDefaultPosition, wxSize(150,40), wxSL_HORIZONTAL | wxSL_LABELS);
35         ckBoxZ                  = new wxCheckBox(panel,-1,_T("Z           "));
36         _positionZ              = new wxSlider(panel,-1,maxZ/2,0,maxZ, wxDefaultPosition, wxSize(150,40), wxSL_HORIZONTAL | wxSL_LABELS);
37         wxButton                *btnColorTable  = new wxButton (panel, -1, _T("Edit Color Table") );
38
39         _ckBoxXYZ               = new wxCheckBox(panel,-1,_T("XYZ                  "));
40         _ckBoxPlane             = new wxCheckBox(panel,-1,_T("Plane"));
41
42         ckBoxX->SetValue(false);
43         ckBoxY->SetValue(false);
44         ckBoxZ->SetValue(false);
45         _ckBoxXYZ->SetValue(false);
46         _ckBoxPlane->SetValue(false);
47
48         _positionX->SetSize(400,20);
49         _positionY->SetSize(400,20);
50         _positionZ->SetSize(400,20);
51
52         Connect(ckBoxX->GetId()                 , wxEVT_COMMAND_CHECKBOX_CLICKED          , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleAxisX   );
53         Connect(_positionX->GetId()             , wxEVT_COMMAND_SLIDER_UPDATED            , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnPositionX              );
54         Connect(ckBoxY->GetId()                 , wxEVT_COMMAND_CHECKBOX_CLICKED          , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleAxisY   );
55         Connect(_positionY->GetId()             , wxEVT_COMMAND_SLIDER_UPDATED            , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnPositionY              );
56         Connect(ckBoxZ->GetId()                 , wxEVT_COMMAND_CHECKBOX_CLICKED          , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleAxisZ   );
57         Connect(_positionZ->GetId()             , wxEVT_COMMAND_SLIDER_UPDATED            , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnPositionZ              );
58         Connect(btnColorTable->GetId()  , wxEVT_COMMAND_BUTTON_CLICKED            , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnEditColorTable );
59
60         Connect(_ckBoxXYZ->GetId()  , wxEVT_COMMAND_CHECKBOX_CLICKED      , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleAxisXYZ );
61         Connect(_ckBoxPlane->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED      , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisiblePlane   );
62
63         wxFlexGridSizer *sizer;
64         
65         //      wxBoxSizer *sizer        = new wxBoxSizer(wxVERTICAL);
66         //      wxBoxSizer *sizerH4 = new wxBoxSizer(wxHORIZONTAL);
67         
68         //CPR: If-else statements added 30 Nov 2009
69         wxFlexGridSizer *sizerH4;
70         wxFlexGridSizer *sizerH5;
71         if(align)
72         {
73                 sizer    = new wxFlexGridSizer(2);
74
75                 sizerH4 = new wxFlexGridSizer(2);
76                 sizerH4->Add( _positionX                        ,1,wxGROW                                       , 0 );
77                 sizerH4->Add( ckBoxX                            ,0,wxALIGN_CENTER_VERTICAL|wxSHAPED , 0 );
78                 sizerH4->Add( _positionY                        ,1,wxGROW                                       , 0 );
79                 sizerH4->Add( ckBoxY                            ,0,wxALIGN_CENTER_VERTICAL|wxSHAPED     , 0 );
80                 sizerH4->Add( _positionZ                        ,1,wxGROW                                       , 0 );
81                 sizerH4->Add( ckBoxZ                            ,0,wxALIGN_CENTER_VERTICAL|wxSHAPED     , 0 );
82                 
83                 sizerH5 = new wxFlexGridSizer(1);
84                 sizerH5->Add( new wxStaticText(panel, -1,_T("      "))                  , 1, wxALL|wxEXPAND, 0);
85                 sizerH5->Add( _ckBoxXYZ                         ,  1, wxALL|wxEXPAND, 0);
86                 sizerH5->Add( new wxStaticText(panel, -1,_T("      "))                  , 1, wxALL|wxEXPAND, 0);
87                 sizerH5->Add( _ckBoxPlane                       ,  1, wxALL|wxEXPAND, 0);
88                 sizerH5->Add( new wxStaticText(panel, -1,_T("      "))                  , 1, wxALL|wxEXPAND, 0);
89                 sizerH5->Add( btnColorTable                                                             ,0,wxALIGN_CENTER_VERTICAL|wxSHAPED     , 0 );
90                 //sizerH5->Add( new wxStaticText(panel, -1,_T("      "))                        , 1, wxALL|wxEXPAND, 0);
91         }
92         else
93         {
94                 sizer    = new wxFlexGridSizer(1);
95
96                 sizerH4 = new wxFlexGridSizer(10);
97                 sizerH5 = new wxFlexGridSizer(10);
98
99                 sizerH4->Add( _positionX                        ,1,wxGROW                                       , 0 );
100                 sizerH4->Add( ckBoxX                            ,0,wxALIGN_CENTER_VERTICAL|wxSHAPED     , 0 );
101                 sizerH4->Add( _positionY                        ,1,wxGROW                                       , 0 );
102                 sizerH4->Add( ckBoxY                            ,0,wxALIGN_CENTER_VERTICAL|wxSHAPED     , 0 );
103                 sizerH4->Add( _positionZ                        ,1,wxGROW                                       , 0 );
104                 sizerH4->Add( ckBoxZ                            ,0,wxALIGN_CENTER_VERTICAL|wxSHAPED     , 0 );
105                 sizerH4->Add( btnColorTable                     ,0,wxALIGN_CENTER_VERTICAL|wxSHAPED     , 0 );
106
107                 sizerH5->Add( _ckBoxXYZ                         ,  1, wxALL|wxEXPAND, 0);
108                 sizerH5->Add( _ckBoxPlane                       ,  1, wxALL|wxEXPAND, 0);
109                 sizerH5->Add( new wxStaticText(panel, -1,_T("      "))                  , 1, wxALL|wxEXPAND, 0);
110         }
111         
112
113         //EED 28 sep 2006
114         //      wxFlexGridSizer *sizerH6 = new wxFlexGridSizer(10);
115         //      wxFlexGridSizer *sizerH7 = new wxFlexGridSizer(10);
116
117         //      sizerH4->Add( ckBoxX            , 1, wxALL|wxEXPAND, 0);
118         //      sizerH4->Add( new wxStaticText(panel, -1,"  ")                  , 1, wxALL|wxEXPAND, 0);
119         //      sizerH4->Add( _positionX        , 1, wxALL|wxEXPAND, 0);
120
121         //      sizerH5->Add( ckBoxY            , 1, wxALL|wxEXPAND, 0);
122         //      sizerH5->Add( new wxStaticText(panel, -1,"  ")                  , 1, wxALL|wxEXPAND, 0);
123         //      sizerH5->Add( _positionY        , 1, wxALL|wxEXPAND, 0);
124
125         //      sizerH6->Add( ckBoxZ            , 1, wxALL|wxEXPAND, 0);
126         //      sizerH6->Add( new wxStaticText(panel, -1,"  ")                  , 1, wxALL|wxEXPAND, 0);
127         //      sizerH6->Add( _positionZ        , 1, wxALL|wxEXPAND, 0);
128
129         //      sizerH7->Add( _ckBoxXYZ         , 1, wxALL|wxEXPAND, 0);
130         //      sizerH7->Add( _ckBoxPlane       , 1, wxALL|wxEXPAND, 0);
131
132         //      sizer->Add( sizerH4                     , 1, wxALL|wxEXPAND, 2);
133         //      sizer->Add( sizerH5                     , 1, wxALL|wxEXPAND, 2);
134         //      sizer->Add( sizerH6                     , 1, wxALL|wxEXPAND, 2);
135         //      sizer->Add( sizerH7                     , 1, wxALL|wxEXPAND, 2);
136
137                 
138         //      sizerH5->Add( ckBoxX                            ,  1, wxALL|wxEXPAND, 0);
139         //      sizerH5->Add( ckBoxY                            ,  1, wxALL|wxEXPAND, 0);
140         //      sizerH5->Add( ckBoxZ                            ,  1, wxALL|wxEXPAND, 0);
141
142         sizer->Add( sizerH4                                     ,  1, wxALL|wxGROW, 2);
143         sizer->Add( sizerH5                                     ,  1, wxALL|wxEXPAND, 2);
144
145         panel->SetSize(400,50);
146         panel->SetAutoLayout(true);
147         panel->SetSizer(sizer);
148         panel->Layout();
149
150         panel->SetEventHandler((wxEvtHandler*)this);
151
152         //this->UpdateControlPanel();
153
154 }
155 void wxVtkMPR3DViewCntrlPanel::UpdateControlPanel()
156 {
157
158         vtkMPRBaseData* basedata = _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData();
159         if(basedata != NULL){
160
161                 /*int maxX = basedata->GetMaxPositionX();
162                 int maxY = basedata->GetMaxPositionY();
163                 int maxZ = basedata->GetMaxPositionZ();*/
164                 int x0,x1,y0,y1,z0,z1;
165
166                 basedata->GetDimensionExtention(&x0,&x1,&y0,&y1,&z0,&z1);
167                 /*int maxX = x1-x0;//basedata->GetMaxPositionX();
168                 int maxY = y1-y0;//basedata->GetMaxPositionY();
169                 int maxZ = z1-z0;//basedata->GetMaxPositionZ();*/
170
171                 
172
173                 //std::cout<<"wxVtkMPR3DViewCntrlPanel::UpdateControlPanel() maxX="<<maxX<<" maxY="<<maxY<<" maxZ="<<maxZ<<std::endl;
174                 /*_positionX->SetRange(0,maxX);
175                 _positionY->SetRange(0,maxY);
176                 _positionZ->SetRange(0,maxZ);*/
177                 _positionX->SetRange(x0,x1);
178                 _positionY->SetRange(y0,y1);
179                 _positionZ->SetRange(z0,z1);
180
181                 _positionX->SetValue((x0+x1)/2);
182                 _positionY->SetValue((y0+y1)/2);
183                 _positionZ->SetValue((z0+z1)/2);
184
185                 _positionX->Update();
186                 _positionY->Update();
187                 _positionZ->Update();
188                 this->Update();
189         }
190         
191 }
192 //-------------------------------------------------------------------
193 wxVtkMPR3DViewCntrlPanel::~wxVtkMPR3DViewCntrlPanel()
194 {
195 }
196 //-------------------------------------------------------------------
197 void wxVtkMPR3DViewCntrlPanel::Refresh()
198 {
199 //      wxPanel::Refresh();
200         _positionX->SetValue( (int)(_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetX( )) );
201         _positionY->SetValue( (int)(_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetY( )) );
202         _positionZ->SetValue( (int)(_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetZ( )) );
203 }
204 /*
205 //-------------------------------------------------------------------
206 int wxVtkMPR3DViewCntrlPanel::GetIdTissue()
207 {
208         int idTissue=-1;
209         if (_surfA->GetValue()==true)
210         {
211                 idTissue=0;
212         }
213         if (_surfB->GetValue()==true)
214         {
215                 idTissue=1;
216         }
217         if (_surfC->GetValue()==true)
218         {
219                 idTissue=2;
220         }
221         if (_surfD->GetValue()==true)
222         {
223                 idTissue=3;
224         }
225
226         return idTissue;
227 }
228 */
229
230 //-------------------------------------------------------------------
231 void wxVtkMPR3DViewCntrlPanel::OnEditColorTable(wxCommandEvent& event)
232 {
233         
234         vtkColorTransferFunction *ctfun                 = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetvtkColorTransferFunction(); 
235         std::vector<double> *ctfunVectorPoint   = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetctFunVectorPoint();
236         std::vector<double> *ctfunVectorRed             = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetctFunVectorRed();
237         std::vector<double> *ctfunVectorGreen   = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetctFunVectorGreen();
238         std::vector<double> *ctfunVectorBlue    =   this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetctFunVectorBlue();
239
240         //void *p=this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer(); // JPRx
241
242
243         int i=0,xi,r,g,b;
244         
245         vtkImageData *imagedata = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData();
246
247         HistogramDialog* hDlg=new HistogramDialog(NULL,_T("Color table"),imagedata,2);
248         
249                 
250         hDlg->erasePointsTransferenceFunction();        
251         int ctfSize=ctfunVectorRed->size();
252         if(ctfSize>0)
253         {
254 // MACHETE  OJO Eduardo
255                 int i=0;
256                         while(i<ctfSize)
257                         {
258                                 double gr       = (*ctfunVectorPoint)[i];
259                                 double r        = (*ctfunVectorRed)[i];
260                                 double g        = (*ctfunVectorGreen)[i];
261                                 double b        = (*ctfunVectorBlue)[i];
262                         
263                                 hDlg->addColorPoint(gr,(int)(r*255),(int)(g*255),(int)(b*255));
264                                 i++;
265                         }
266         }
267
268         //
269         // when the user had changed the transference Function
270         //
271         
272         //setting variables if the user wants to do refresh
273         
274         hDlg->setCTF(ctfun);
275         //hDlg->setMPR3Dview(_wxvtkmpr3Dview);
276         
277         if(hDlg->ShowModal()== wxID_OK )
278         {       
279                 
280                 // -- vtkColorTransferFunction  --
281                         ctfun->RemoveAllPoints ();
282                         //clean colors
283                         ctfunVectorPoint->clear();
284                         ctfunVectorRed->clear();
285                         ctfunVectorGreen->clear();
286                         ctfunVectorBlue->clear();
287
288                         int nCTFpoints=hDlg->getSizeBarColor();
289 // Machete .. Ojo Eduardo
290                         i=0;    
291                         while(i<nCTFpoints)
292                         {
293                                 hDlg->getDataBarColorPoint(i,xi,r,g,b);
294                                 /*
295                                 if (i==0)
296                                 {
297                                         hDlg->getDataBarColorPoint(1,xi,r,g,b);
298                                 } 
299                                 if (i==nCTFpoints)
300                                 {
301                                         hDlg->getDataBarColorPoint(i-1,xi,r,g,b);
302                                 } 
303                                 */
304                                 ctfun->AddRGBPoint(xi,r/255.0,g/255.0,b/255.0 );
305                                 ctfunVectorPoint->push_back(xi);
306                                 ctfunVectorRed->push_back(r/255.0);
307                                 ctfunVectorGreen->push_back(g/255.0);
308                                 ctfunVectorBlue->push_back(b/255.0);
309                                 i++;
310                                 
311                         }
312                         
313         }
314         
315         else
316         {
317                 
318                 if(hDlg->getRefreshed())
319                 {
320                         // -- vtkColorTransferFunction  --
321                         ctfun->RemoveAllPoints ();
322                         
323                         int i=0;
324                         int size=ctfunVectorPoint->size();
325                         
326                         for(i=0;i<size;i++)
327                         {
328                                 double grey2=(*ctfunVectorPoint)[i];
329                                 double red =(*ctfunVectorRed)[i];
330                                 double green =(*ctfunVectorGreen)[i];
331                                 double blue = (*ctfunVectorBlue)[i];
332                                 ctfun->AddRGBPoint(grey2,red,green,blue);
333                         }
334                  }      
335                  
336         }
337
338  hDlg->Destroy();
339 }
340
341
342 //-------------------------------------------------------------------
343 void wxVtkMPR3DViewCntrlPanel::OnVisibleAxisX(wxCommandEvent& event)
344 {
345         
346         _wxvtkmpr3Dview->VisibleImageActor(0, event.IsChecked() );
347         _wxvtkmpr3Dview->Refresh();
348         
349         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
350
351         try{
352                 _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
353         }catch(char* e){
354                 std::cout<<e<<std::endl;
355         }
356
357 }
358 //-------------------------------------------------------------------
359 void wxVtkMPR3DViewCntrlPanel::OnVisibleAxisY(wxCommandEvent& event)
360 {
361         _wxvtkmpr3Dview->VisibleImageActor(1, event.IsChecked() );
362         _wxvtkmpr3Dview->Refresh();
363
364         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
365         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
366
367 }
368 //-------------------------------------------------------------------
369 void wxVtkMPR3DViewCntrlPanel::OnVisibleAxisZ(wxCommandEvent& event)
370 {
371         _wxvtkmpr3Dview->VisibleImageActor(2, event.IsChecked() );
372         _wxvtkmpr3Dview->Refresh();
373
374         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
375         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
376 }
377
378 //-------------------------------------------------------------------
379 void wxVtkMPR3DViewCntrlPanel::OnVisibleAxisXYZ(wxCommandEvent& event)
380 {
381
382         _wxvtkmpr3Dview->VisiblePointWidget(event.IsChecked());
383 }
384
385 //-------------------------------------------------------------------
386 void wxVtkMPR3DViewCntrlPanel::OnVisiblePlane(wxCommandEvent& event)
387 {
388         _wxvtkmpr3Dview->VisiblePlaneWidget(event.IsChecked());
389 }
390
391
392 //-------------------------------------------------------------------
393 void wxVtkMPR3DViewCntrlPanel::OnPositionX(wxScrollEvent& event)
394 {
395         _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetX( _positionX->GetValue() );
396         _wxvtkmpr3Dview->RefreshView();
397
398         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
399         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
400 }
401 //-------------------------------------------------------------------
402 void wxVtkMPR3DViewCntrlPanel::OnPositionY(wxScrollEvent& event)
403 {
404         _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetY( _positionY->GetValue() );
405         _wxvtkmpr3Dview->RefreshView();
406         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
407         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
408 }
409 //-------------------------------------------------------------------
410 void wxVtkMPR3DViewCntrlPanel::OnPositionZ(wxScrollEvent& event)
411 {
412         _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetZ( _positionZ->GetValue() );
413         _wxvtkmpr3Dview->RefreshView();
414         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
415         _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
416 }
417
418 //-------------------------------------------------------------------
419 bool wxVtkMPR3DViewCntrlPanel::GetVisibleX()
420 {
421         return ckBoxX->GetValue();
422 }
423
424 //-------------------------------------------------------------------
425 bool wxVtkMPR3DViewCntrlPanel::GetVisibleY()
426 {
427         return ckBoxY->GetValue();
428 }
429
430 //-------------------------------------------------------------------
431 bool wxVtkMPR3DViewCntrlPanel::GetVisibleZ()
432 {
433         return ckBoxZ->GetValue();
434 }