00001 #include "wxVtkMPR3DViewCntrlPanel.h"
00002
00003 #include "HistogramDialog.h"
00004
00005 wxVtkMPR3DViewCntrlPanel::wxVtkMPR3DViewCntrlPanel(wxWindow *parent, wxVtkMPR3DView *wxvtkmpr3Dview )
00006 : wxPanel(parent, -1)
00007 {
00008
00009 wxPanel *panel = this;
00010 _wxvtkmpr3Dview = wxvtkmpr3Dview;
00011
00012
00013
00014
00015
00016 int maxX = 1;
00017 int maxY = 1;
00018 int maxZ = 1;
00019
00020 wxCheckBox *ckBoxX = new wxCheckBox(panel,-1,_T("X "));
00021 _positionX = new wxSlider(panel,-1,maxX/2,0,maxX, wxDefaultPosition, wxSize(150,40), wxSL_HORIZONTAL | wxSL_LABELS);
00022 wxCheckBox *ckBoxY = new wxCheckBox(panel,-1,_T("Y "));
00023 _positionY = new wxSlider(panel,-1,maxY/2,0,maxY, wxDefaultPosition, wxSize(150,40), wxSL_HORIZONTAL | wxSL_LABELS);
00024 wxCheckBox *ckBoxZ = new wxCheckBox(panel,-1,_T("Z "));
00025 _positionZ = new wxSlider(panel,-1,maxZ/2,0,maxZ, wxDefaultPosition, wxSize(150,40), wxSL_HORIZONTAL | wxSL_LABELS);
00026 wxButton *btnColorTable = new wxButton (panel, -1, _T("Edit Color Table") );
00027
00028 _ckBoxXYZ = new wxCheckBox(panel,-1,_T("XYZ "));
00029 _ckBoxPlane = new wxCheckBox(panel,-1,_T("Plane"));
00030
00031 ckBoxX->SetValue(false);
00032 ckBoxY->SetValue(false);
00033 ckBoxZ->SetValue(false);
00034 _ckBoxXYZ->SetValue(false);
00035 _ckBoxPlane->SetValue(false);
00036
00037 _positionX->SetSize(400,20);
00038 _positionY->SetSize(400,20);
00039 _positionZ->SetSize(400,20);
00040
00041 Connect(ckBoxX->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleAxisX );
00042 Connect(_positionX->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnPositionX );
00043 Connect(ckBoxY->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleAxisY );
00044 Connect(_positionY->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnPositionY );
00045 Connect(ckBoxZ->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleAxisZ );
00046 Connect(_positionZ->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnPositionZ );
00047 Connect(btnColorTable->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnEditColorTable );
00048
00049 Connect(_ckBoxXYZ->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisibleAxisXYZ );
00050 Connect(_ckBoxPlane->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxVtkMPR3DViewCntrlPanel::OnVisiblePlane );
00051
00052
00053 wxFlexGridSizer *sizer = new wxFlexGridSizer(1);
00054
00055
00056
00057 wxFlexGridSizer *sizerH4 = new wxFlexGridSizer(10);
00058 wxFlexGridSizer *sizerH5 = new wxFlexGridSizer(10);
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086 sizerH4->Add( _positionX ,1,wxGROW , 0 );
00087 sizerH4->Add( ckBoxX ,0,wxALIGN_CENTER_VERTICAL|wxSHAPED , 0 );
00088 sizerH4->Add( _positionY ,1,wxGROW , 0 );
00089 sizerH4->Add( ckBoxY ,0,wxALIGN_CENTER_VERTICAL|wxSHAPED , 0 );
00090 sizerH4->Add( _positionZ ,1,wxGROW , 0 );
00091 sizerH4->Add( ckBoxZ ,0,wxALIGN_CENTER_VERTICAL|wxSHAPED , 0 );
00092 sizerH4->Add( btnColorTable ,0,wxALIGN_CENTER_VERTICAL|wxSHAPED , 0 );
00093
00094 sizerH5->Add( _ckBoxXYZ , 1, wxALL|wxEXPAND, 0);
00095 sizerH5->Add( _ckBoxPlane , 1, wxALL|wxEXPAND, 0);
00096 sizerH5->Add( new wxStaticText(panel, -1,_T(" ")) , 1, wxALL|wxEXPAND, 0);
00097
00098
00099
00100
00101 sizer->Add( sizerH4 , 1, wxALL|wxGROW, 2);
00102 sizer->Add( sizerH5 , 1, wxALL|wxEXPAND, 2);
00103
00104
00105 panel->SetSize(400,50);
00106 panel->SetAutoLayout(true);
00107 panel->SetSizer(sizer);
00108 panel->Layout();
00109
00110 panel->SetEventHandler((wxEvtHandler*)this);
00111
00112
00113
00114 }
00115 void wxVtkMPR3DViewCntrlPanel::UpdateControlPanel()
00116 {
00117
00118 vtkMPRBaseData* basedata = _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData();
00119 if(basedata != NULL){
00120
00121
00122
00123
00124 int x0,x1,y0,y1,z0,z1;
00125
00126 basedata->GetDimensionExtention(&x0,&x1,&y0,&y1,&z0,&z1);
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137 _positionX->SetRange(x0,x1);
00138 _positionY->SetRange(y0,y1);
00139 _positionZ->SetRange(z0,z1);
00140
00141 _positionX->SetValue((x0+x1)/2);
00142 _positionY->SetValue((y0+y1)/2);
00143 _positionZ->SetValue((z0+z1)/2);
00144
00145 _positionX->Update();
00146 _positionY->Update();
00147 _positionZ->Update();
00148 this->Update();
00149 }
00150
00151 }
00152
00153 wxVtkMPR3DViewCntrlPanel::~wxVtkMPR3DViewCntrlPanel()
00154 {
00155 }
00156
00157 void wxVtkMPR3DViewCntrlPanel::Refresh()
00158 {
00159
00160 _positionX->SetValue( (int)(_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetX( )) );
00161 _positionY->SetValue( (int)(_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetY( )) );
00162 _positionZ->SetValue( (int)(_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetZ( )) );
00163 }
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191 void wxVtkMPR3DViewCntrlPanel::OnEditColorTable(wxCommandEvent& event)
00192 {
00193
00194 vtkColorTransferFunction *ctfun = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetvtkColorTransferFunction();
00195 std::vector<double> *ctfunVectorPoint = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetctFunVectorPoint();
00196 std::vector<double> *ctfunVectorRed = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetctFunVectorRed();
00197 std::vector<double> *ctfunVectorGreen = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetctFunVectorGreen();
00198 std::vector<double> *ctfunVectorBlue = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetctFunVectorBlue();
00199
00200
00201
00202
00203 int i=0,xi,r,g,b;
00204
00205 vtkImageData *imagedata = this->_wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData();
00206
00207 HistogramDialog* hDlg=new HistogramDialog(NULL,_T("Color table"),imagedata,2);
00208
00209
00210 hDlg->erasePointsTransferenceFunction();
00211 int ctfSize=ctfunVectorRed->size();
00212 if(ctfSize>0)
00213 {
00214
00215 int i=0;
00216 while(i<ctfSize)
00217 {
00218 double gr = (*ctfunVectorPoint)[i];
00219 double r = (*ctfunVectorRed)[i];
00220 double g = (*ctfunVectorGreen)[i];
00221 double b = (*ctfunVectorBlue)[i];
00222
00223 hDlg->addColorPoint(gr,(int)(r*255),(int)(g*255),(int)(b*255));
00224 i++;
00225 }
00226 }
00227
00228
00229
00230
00231
00232
00233
00234 hDlg->setCTF(ctfun);
00235 hDlg->setMPR3Dview(_wxvtkmpr3Dview);
00236
00237 if(hDlg->ShowModal()== wxID_OK )
00238 {
00239
00240
00241 ctfun->RemoveAllPoints ();
00242
00243 ctfunVectorPoint->clear();
00244 ctfunVectorRed->clear();
00245 ctfunVectorGreen->clear();
00246 ctfunVectorBlue->clear();
00247
00248 int nCTFpoints=hDlg->getSizeBarColor();
00249
00250 i=0;
00251 while(i<nCTFpoints)
00252 {
00253 hDlg->getDataBarColorPoint(i,xi,r,g,b);
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264 ctfun->AddRGBPoint(xi,r/255.0,g/255.0,b/255.0 );
00265 ctfunVectorPoint->push_back(xi);
00266 ctfunVectorRed->push_back(r/255.0);
00267 ctfunVectorGreen->push_back(g/255.0);
00268 ctfunVectorBlue->push_back(b/255.0);
00269 i++;
00270
00271 }
00272
00273 }
00274
00275 else
00276 {
00277
00278 if(hDlg->getRefreshed())
00279 {
00280
00281 ctfun->RemoveAllPoints ();
00282
00283 int i=0;
00284 int size=ctfunVectorPoint->size();
00285
00286 for(i=0;i<size;i++)
00287 {
00288 double grey2=(*ctfunVectorPoint)[i];
00289 double red =(*ctfunVectorRed)[i];
00290 double green =(*ctfunVectorGreen)[i];
00291 double blue = (*ctfunVectorBlue)[i];
00292 ctfun->AddRGBPoint(grey2,red,green,blue);
00293 }
00294 }
00295
00296 }
00297
00298 hDlg->Destroy();
00299 }
00300
00301
00302
00303 void wxVtkMPR3DViewCntrlPanel::OnVisibleAxisX(wxCommandEvent& event)
00304 {
00305 _wxvtkmpr3Dview->VisibleImageActor(0, event.IsChecked() );
00306 _wxvtkmpr3Dview->Refresh();
00307
00308 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);
00309
00310 try{
00311 _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
00312 }catch(char* e){
00313 std::cout<<e<<std::endl;
00314 }
00315
00316 }
00317
00318 void wxVtkMPR3DViewCntrlPanel::OnVisibleAxisY(wxCommandEvent& event)
00319 {
00320 _wxvtkmpr3Dview->VisibleImageActor(1, event.IsChecked() );
00321 _wxvtkmpr3Dview->Refresh();
00322
00323 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);
00324 _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
00325
00326 }
00327
00328 void wxVtkMPR3DViewCntrlPanel::OnVisibleAxisZ(wxCommandEvent& event)
00329 {
00330 _wxvtkmpr3Dview->VisibleImageActor(2, event.IsChecked() );
00331 _wxvtkmpr3Dview->Refresh();
00332
00333 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);
00334 _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
00335 }
00336
00337
00338 void wxVtkMPR3DViewCntrlPanel::OnVisibleAxisXYZ(wxCommandEvent& event)
00339 {
00340 _wxvtkmpr3Dview->VisiblePointWidget(event.IsChecked());
00341 }
00342
00343
00344 void wxVtkMPR3DViewCntrlPanel::OnVisiblePlane(wxCommandEvent& event)
00345 {
00346 _wxvtkmpr3Dview->VisiblePlaneWidget(event.IsChecked());
00347 }
00348
00349
00350
00351 void wxVtkMPR3DViewCntrlPanel::OnPositionX(wxScrollEvent& event)
00352 {
00353 _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetX( _positionX->GetValue() );
00354 _wxvtkmpr3Dview->RefreshView();
00355 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);
00356 _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
00357 }
00358
00359 void wxVtkMPR3DViewCntrlPanel::OnPositionY(wxScrollEvent& event)
00360 {
00361 _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetY( _positionY->GetValue() );
00362 _wxvtkmpr3Dview->RefreshView();
00363 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);
00364 _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
00365 }
00366
00367 void wxVtkMPR3DViewCntrlPanel::OnPositionZ(wxScrollEvent& event)
00368 {
00369 _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetZ( _positionZ->GetValue() );
00370 _wxvtkmpr3Dview->RefreshView();
00371 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);
00372 _wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
00373 }