1 #include "wxVtkMPR3DViewCntrlPanel.h"
3 #include "HistogramDialog.h"
5 wxVtkMPR3DViewCntrlPanel::wxVtkMPR3DViewCntrlPanel(wxWindow *parent, wxVtkMPR3DView *wxvtkmpr3Dview, bool align )
10 _wxvtkmpr3Dview = wxvtkmpr3Dview;
12 /*int maxX = _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetMaxPositionX();
13 int maxY = _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetMaxPositionY();
14 int maxZ = _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetMaxPositionZ();*/
20 //CPR: Modified 30 Nov 2009
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") );
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") );
39 _ckBoxXYZ = new wxCheckBox(panel,-1,_T("XYZ "));
40 _ckBoxPlane = new wxCheckBox(panel,-1,_T("Plane"));
42 ckBoxX->SetValue(false);
43 ckBoxY->SetValue(false);
44 ckBoxZ->SetValue(false);
45 _ckBoxXYZ->SetValue(false);
46 _ckBoxPlane->SetValue(false);
48 _positionX->SetSize(400,20);
49 _positionY->SetSize(400,20);
50 _positionZ->SetSize(400,20);
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 );
60 Connect(_ckBoxXYZ->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleAxisXYZ );
61 Connect(_ckBoxPlane->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisiblePlane );
63 wxFlexGridSizer *sizer;
65 // wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
66 // wxBoxSizer *sizerH4 = new wxBoxSizer(wxHORIZONTAL);
68 //CPR: If-else statements added 30 Nov 2009
69 wxFlexGridSizer *sizerH4;
70 wxFlexGridSizer *sizerH5;
73 sizer = new wxFlexGridSizer(2);
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 );
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);
94 sizer = new wxFlexGridSizer(1);
96 sizerH4 = new wxFlexGridSizer(10);
97 sizerH5 = new wxFlexGridSizer(10);
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 );
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);
114 // wxFlexGridSizer *sizerH6 = new wxFlexGridSizer(10);
115 // wxFlexGridSizer *sizerH7 = new wxFlexGridSizer(10);
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);
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);
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);
129 // sizerH7->Add( _ckBoxXYZ , 1, wxALL|wxEXPAND, 0);
130 // sizerH7->Add( _ckBoxPlane , 1, wxALL|wxEXPAND, 0);
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);
138 // sizerH5->Add( ckBoxX , 1, wxALL|wxEXPAND, 0);
139 // sizerH5->Add( ckBoxY , 1, wxALL|wxEXPAND, 0);
140 // sizerH5->Add( ckBoxZ , 1, wxALL|wxEXPAND, 0);
142 sizer->Add( sizerH4, 1, wxALL|wxGROW, 2);
143 sizer->Add( sizerH5, 1, wxALL|wxEXPAND,2);
145 panel->SetSize(400,50);
146 panel->SetAutoLayout(true);
147 panel->SetSizer(sizer);
150 panel->SetEventHandler((wxEvtHandler*)this);
152 //this->UpdateControlPanel();
154 void wxVtkMPR3DViewCntrlPanel::UpdateControlPanel()
157 vtkMPRBaseData* basedata = _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData();
158 if(basedata != NULL){
160 /*int maxX = basedata->GetMaxPositionX();
161 int maxY = basedata->GetMaxPositionY();
162 int maxZ = basedata->GetMaxPositionZ();*/
163 int x0,x1,y0,y1,z0,z1;
165 basedata->GetDimensionExtention(&x0,&x1,&y0,&y1,&z0,&z1);
166 /*int maxX = x1-x0;//basedata->GetMaxPositionX();
167 int maxY = y1-y0;//basedata->GetMaxPositionY();
168 int maxZ = z1-z0;//basedata->GetMaxPositionZ();*/
172 //std::cout<<"wxVtkMPR3DViewCntrlPanel::UpdateControlPanel() maxX="<<maxX<<" maxY="<<maxY<<" maxZ="<<maxZ<<std::endl;
173 /*_positionX->SetRange(0,maxX);
174 _positionY->SetRange(0,maxY);
175 _positionZ->SetRange(0,maxZ);*/
176 _positionX->SetRange(x0,x1);
177 _positionY->SetRange(y0,y1);
178 _positionZ->SetRange(z0,z1);
180 _positionX->SetValue((x0+x1)/2);
181 _positionY->SetValue((y0+y1)/2);
182 _positionZ->SetValue((z0+z1)/2);
184 _positionX->Update();
185 _positionY->Update();
186 _positionZ->Update();
191 //-------------------------------------------------------------------
192 wxVtkMPR3DViewCntrlPanel::~wxVtkMPR3DViewCntrlPanel()
195 //-------------------------------------------------------------------
196 void wxVtkMPR3DViewCntrlPanel::Refresh()
198 // wxPanel::Refresh();
199 _positionX->SetValue( (int)(_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetX( )) );
200 _positionY->SetValue( (int)(_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetY( )) );
201 _positionZ->SetValue( (int)(_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetZ( )) );
204 //-------------------------------------------------------------------
205 int wxVtkMPR3DViewCntrlPanel::GetIdTissue()
208 if (_surfA->GetValue()==true)
212 if (_surfB->GetValue()==true)
216 if (_surfC->GetValue()==true)
220 if (_surfD->GetValue()==true)
229 //-------------------------------------------------------------------
230 void wxVtkMPR3DViewCntrlPanel::OnEditColorTable(wxCommandEvent& event)
233 vtkColorTransferFunction *ctfun = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetvtkColorTransferFunction();
234 std::vector<double> *ctfunVectorPoint = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetctFunVectorPoint();
235 std::vector<double> *ctfunVectorRed = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetctFunVectorRed();
236 std::vector<double> *ctfunVectorGreen = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetctFunVectorGreen();
237 std::vector<double> *ctfunVectorBlue = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetctFunVectorBlue();
239 //void *p=this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer(); // JPRx
244 vtkImageData *imagedata = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData();
246 HistogramDialog* hDlg=new HistogramDialog(NULL,_T("Color table"),imagedata,2);
249 hDlg->erasePointsTransferenceFunction();
250 int ctfSize=ctfunVectorRed->size();
253 // MACHETE OJO Eduardo
257 double gr = (*ctfunVectorPoint)[i];
258 double r = (*ctfunVectorRed)[i];
259 double g = (*ctfunVectorGreen)[i];
260 double b = (*ctfunVectorBlue)[i];
262 hDlg->addColorPoint(gr,(int)(r*255),(int)(g*255),(int)(b*255));
268 // when the user had changed the transference Function
271 //setting variables if the user wants to do refresh
274 //hDlg->setMPR3Dview(_wxvtkmpr3Dview);
276 if(hDlg->ShowModal()== wxID_OK )
279 // -- vtkColorTransferFunction --
280 ctfun->RemoveAllPoints ();
282 ctfunVectorPoint->clear();
283 ctfunVectorRed->clear();
284 ctfunVectorGreen->clear();
285 ctfunVectorBlue->clear();
287 int nCTFpoints=hDlg->getSizeBarColor();
288 // Machete .. Ojo Eduardo
292 hDlg->getDataBarColorPoint(i,xi,r,g,b);
296 hDlg->getDataBarColorPoint(1,xi,r,g,b);
300 hDlg->getDataBarColorPoint(i-1,xi,r,g,b);
303 ctfun->AddRGBPoint(xi,r/255.0,g/255.0,b/255.0 );
304 ctfunVectorPoint->push_back(xi);
305 ctfunVectorRed->push_back(r/255.0);
306 ctfunVectorGreen->push_back(g/255.0);
307 ctfunVectorBlue->push_back(b/255.0);
317 if(hDlg->getRefreshed())
319 // -- vtkColorTransferFunction --
320 ctfun->RemoveAllPoints ();
323 int size=ctfunVectorPoint->size();
327 double grey2=(*ctfunVectorPoint)[i];
328 double red =(*ctfunVectorRed)[i];
329 double green =(*ctfunVectorGreen)[i];
330 double blue = (*ctfunVectorBlue)[i];
331 ctfun->AddRGBPoint(grey2,red,green,blue);
341 //-------------------------------------------------------------------
342 void wxVtkMPR3DViewCntrlPanel::OnVisibleAxisX(wxCommandEvent& event)
345 _wxvtkmpr3Dview->VisibleImageActor(0, event.IsChecked() );
346 _wxvtkmpr3Dview->Refresh();
348 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
351 _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
353 std::cout<<e<<std::endl;
356 //-------------------------------------------------------------------
357 void wxVtkMPR3DViewCntrlPanel::OnVisibleAxisY(wxCommandEvent& event)
359 _wxvtkmpr3Dview->VisibleImageActor(1, event.IsChecked() );
360 _wxvtkmpr3Dview->Refresh();
362 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
363 _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
366 //-------------------------------------------------------------------
367 void wxVtkMPR3DViewCntrlPanel::OnVisibleAxisZ(wxCommandEvent& event)
369 _wxvtkmpr3Dview->VisibleImageActor(2, event.IsChecked() );
370 _wxvtkmpr3Dview->Refresh();
372 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
373 _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
376 //-------------------------------------------------------------------
377 void wxVtkMPR3DViewCntrlPanel::OnVisibleAxisXYZ(wxCommandEvent& event)
380 _wxvtkmpr3Dview->VisiblePointWidget(event.IsChecked());
383 //-------------------------------------------------------------------
384 void wxVtkMPR3DViewCntrlPanel::OnVisiblePlane(wxCommandEvent& event)
386 _wxvtkmpr3Dview->VisiblePlaneWidget(event.IsChecked());
390 //-------------------------------------------------------------------
391 void wxVtkMPR3DViewCntrlPanel::OnPositionX(wxScrollEvent& event)
393 _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetX( _positionX->GetValue() );
394 _wxvtkmpr3Dview->RefreshView();
396 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
397 _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
399 //-------------------------------------------------------------------
400 void wxVtkMPR3DViewCntrlPanel::OnPositionY(wxScrollEvent& event)
402 _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetY( _positionY->GetValue() );
403 _wxvtkmpr3Dview->RefreshView();
404 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
405 _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
407 //-------------------------------------------------------------------
408 void wxVtkMPR3DViewCntrlPanel::OnPositionZ(wxScrollEvent& event)
410 _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetZ( _positionZ->GetValue() );
411 _wxvtkmpr3Dview->RefreshView();
412 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
413 _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
416 //-------------------------------------------------------------------
417 bool wxVtkMPR3DViewCntrlPanel::GetVisibleX()
419 return ckBoxX->GetValue();
422 //-------------------------------------------------------------------
423 bool wxVtkMPR3DViewCntrlPanel::GetVisibleY()
425 return ckBoxY->GetValue();
428 //-------------------------------------------------------------------
429 bool wxVtkMPR3DViewCntrlPanel::GetVisibleZ()
431 return ckBoxZ->GetValue();
434 //-------------------------------------------------------------------
435 bool wxVtkMPR3DViewCntrlPanel::GetVisibleXYZ()
437 return _ckBoxXYZ->GetValue();
440 //-------------------------------------------------------------------
441 bool wxVtkMPR3DViewCntrlPanel::GetVisiblePlane()
443 return _ckBoxPlane->GetValue();
446 //-------------------------------------------------------------------
447 void wxVtkMPR3DViewCntrlPanel::SetVisibleX(bool value)
449 ckBoxX->SetValue(value);
451 _wxvtkmpr3Dview->VisibleImageActor(0, value );
452 _wxvtkmpr3Dview->Refresh();
454 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
455 _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
458 //-------------------------------------------------------------------
459 void wxVtkMPR3DViewCntrlPanel::SetVisibleY(bool value)
461 ckBoxY->SetValue(value);
463 _wxvtkmpr3Dview->VisibleImageActor(1, value );
464 _wxvtkmpr3Dview->Refresh();
466 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
467 _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
470 //-------------------------------------------------------------------
471 void wxVtkMPR3DViewCntrlPanel::SetVisibleZ(bool value)
473 ckBoxZ->SetValue(value);
475 _wxvtkmpr3Dview->VisibleImageActor(2, value );
476 _wxvtkmpr3Dview->Refresh();
478 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
479 _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
482 //-------------------------------------------------------------------
483 void wxVtkMPR3DViewCntrlPanel::SetVisibleXYZ(bool value)
485 _ckBoxXYZ->SetValue(value);
486 _wxvtkmpr3Dview->VisiblePointWidget(value);
490 //-------------------------------------------------------------------
491 void wxVtkMPR3DViewCntrlPanel::SetVisiblePlane(bool value)
493 _ckBoxPlane->SetValue(value);
494 _wxvtkmpr3Dview->VisiblePlaneWidget(value);