1 //-------------------------------------------------------------------
2 //RaC 03-2010 Divides in two panels thje last tab Surface/Volume
3 //-------------------------------------------------------------------
5 #include "wxVtkClipping3DViewVolCntrlPanel.h"
6 #include "wx/colordlg.h"
7 #include "vtkTriangleFilter.h"
8 #include "vtkPolyDataConnectivityFilter.h"
9 #include "vtkClosePolyData.h"
10 #include "vtkSTLWriter.h"
11 #include "HistogramDialog.h"
12 #include "marDicomBase.h"
14 wxVtkClipping3DViewVolCntrlPanel::wxVtkClipping3DViewVolCntrlPanel(wxWindow *parent, wxVtkClipping3DView *wxvtkclipping3Dview )
17 wxPanel *panel = this;
18 _wxvtkclipping3Dview = wxvtkclipping3Dview;
21 ckVolum = new wxCheckBox(panel,-1,_T("Volume"));
22 ckBoxVolume = new wxCheckBox(panel,-1,_T("Volume Box"));
24 ckBoxVolume->Disable();
26 rbRayCasting = new wxRadioButton(panel, -1, _T("Ray Casting"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP);
27 rbMIP = new wxRadioButton(panel, -1, _T("MIP"));
29 ckInterpolation = new wxCheckBox(panel, -1, _T("Interpolation"));
30 ckShade = new wxCheckBox(panel, -1, _T("Shade"));
32 rbRayCasting->Disable();
35 ckInterpolation->Disable();
39 wxButton *btnVolumeFunctions = new wxButton(panel,-1,_T("Read Volume Functions"));
41 Connect(btnVolumeFunctions->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &wxVtkClipping3DViewVolCntrlPanel::OnBtnVolumeFunctions );
43 ckBoxVolume->SetValue(false);
45 Connect(ckVolum->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxVtkClipping3DViewVolCntrlPanel::OnVisibleVolume );
46 Connect(ckBoxVolume->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxVtkClipping3DViewVolCntrlPanel::OnVisibleBoxVolume );
48 Connect(rbRayCasting->GetId() , wxEVT_COMMAND_RADIOBUTTON_SELECTED , (wxObjectEventFunction) &wxVtkClipping3DViewVolCntrlPanel::OnRayCastingActive );
49 Connect(rbMIP->GetId() , wxEVT_COMMAND_RADIOBUTTON_SELECTED , (wxObjectEventFunction) &wxVtkClipping3DViewVolCntrlPanel::OnMIPActive );
51 Connect(ckInterpolation->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxVtkClipping3DViewVolCntrlPanel::OnInterpolationActive );
52 Connect(ckShade->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxVtkClipping3DViewVolCntrlPanel::OnShadeActive );
56 wxFlexGridSizer *sizer = new wxFlexGridSizer(1);
57 wxFlexGridSizer *sizerH0 = new wxFlexGridSizer(20);
58 wxFlexGridSizer *sizerH1 = new wxFlexGridSizer(20);
59 wxFlexGridSizer *sizerH2 = new wxFlexGridSizer(20);
61 sizerH0->Add( ckVolum , 1, wxALL|wxEXPAND, 0);
62 sizerH0->Add( new wxStaticText(panel, -1,_T(" ")) , 1, wxALL|wxEXPAND, 0);
63 sizerH0->Add( ckBoxVolume , 1, wxALL|wxEXPAND, 0);
64 sizerH0->Add( new wxStaticText(panel, -1,_T(" ")) , 1, wxALL|wxEXPAND, 0);
65 sizerH0->Add( btnVolumeFunctions , 1, wxALL|wxEXPAND, 0);
67 sizerH1->Add(rbRayCasting, 1, wxALL|wxEXPAND, 0 );
68 sizerH1->Add(rbMIP, 1, wxALL|wxEXPAND, 0 );
70 sizerH2->Add(ckInterpolation, 1, wxALL|wxEXPAND, 0 );
71 sizerH2->Add(ckShade, 1, wxALL|wxEXPAND, 0 );
74 sizer->Add( sizerH0 , 1, wxALL|wxEXPAND, 2);
75 sizer->Add( sizerH1 , 1, wxALL|wxEXPAND, 2);
76 sizer->Add( sizerH2 , 1, wxALL|wxEXPAND, 2);
78 panel->SetSize(300,60);
79 panel->SetAutoLayout(true);
80 panel->SetSizer(sizer);
83 panel->SetEventHandler((wxEvtHandler*)this);
85 rbRayCasting->SetValue(true);
87 // _volumerendererdata = VolumeRendererData::New();
88 // _volumerendererdata->SetImageData(_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetVtkMPRBaseData()->GetImageData());
91 //-------------------------------------------------------------------
92 wxVtkClipping3DViewVolCntrlPanel::~wxVtkClipping3DViewVolCntrlPanel()
95 //-------------------------------------------------------------------
96 void wxVtkClipping3DViewVolCntrlPanel::Refresh()
100 //-------------------------------------------------------------------
101 void wxVtkClipping3DViewVolCntrlPanel::OnVisibleVolume(wxCommandEvent& event)
106 if(event.IsChecked())
108 ckBoxVolume->Enable();
111 ckBoxVolume->Disable();
114 // _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetRenderer()->RemoveAllViewProps();
118 _wxvtkclipping3Dview->VisibleVolumeActor( event.IsChecked() );
119 if(event.IsChecked())
121 rbRayCasting->Enable();
123 ckInterpolation->Enable();
128 rbRayCasting->Disable();
130 ckInterpolation->Disable();
132 if(ckBoxVolume->IsChecked())
134 ckBoxVolume->SetValue(false);
138 _wxvtkclipping3Dview->Refresh();
141 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
142 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
145 //-------------------------------------------------------------------
146 void wxVtkClipping3DViewVolCntrlPanel::OnVisibleBoxVolume(wxCommandEvent& event)
149 //cout<<"JPRG::wxVtkClipping3DViewVolCntrlPanel::OnVisibleVolume::event_value::"<<event.IsChecked()<<endl;
152 if(event.IsChecked())
154 // rbRayCasting->Disable();
156 ckInterpolation->Disable();
161 //rbRayCasting->Enable();
163 ckInterpolation->Enable();
168 _wxvtkclipping3Dview->VisibleVolumeBoxActor(event.IsChecked());
170 _wxvtkclipping3Dview->Refresh();
171 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
172 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
176 //EED 22 Fevrier 2007
177 //-------------------------------------------------------------------
178 void wxVtkClipping3DViewVolCntrlPanel::OnBtnVolumeFunctions(wxCommandEvent& event)
181 int /*i=0,*/ xi,yi,r,g,b; // JPRx
182 vtkColorTransferFunction* ctfun = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetColorTransferenceFunction();
183 vtkPiecewiseFunction* tfun = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetTransferencefunction();
184 std::vector<double>* gtf = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetGreyValuesTransferenceFVector();
185 std::vector<double>* itf = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetIntensityValuesTransferenceFVector();
186 std::vector<double>* greyctf = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetGreyValueColorsOfColorTransferenceFVector();
187 std::vector<double>* rctf = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetRedColorsOfColorTransferenceFVector();
188 std::vector<double>* gctf = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetGreenColorsOfColorTransferenceFVector();
189 std::vector<double>* bctf = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetBlueColorsOfColorTransferenceFVector();
190 vtkImageData *imagedata = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetVtkMPRBaseData()->GetImageData();
192 //use for update in the refresh
194 vtkVolumeRayCastMapper* volumeMapper = this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetVolumeMapper();
195 vtkVolume* newvol =this->_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->GetVolumeActor();
200 wxFileDialog dialog(this, _T("Choose a file"), _T("c:/Maracas_configuration"),_T(""), _T("*.MarVolConf"), wxOPEN);
201 if (dialog.ShowModal() == wxID_OK)
203 _wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->ReadVolumeFunctions( (char *)dialog.GetPath().c_str() );
209 HistogramDialog* hDlg=new HistogramDialog(NULL,_T("Histogram Dialog"),imagedata,1);
213 int tfSize=gtf->size();
217 hDlg->erasePointsTransferenceFunction();
222 hDlg->addPointToTransferenceFunction(g,in*100);
228 int ctfSize=rctf->size();
234 double gr=(*greyctf)[i];
238 hDlg->addColorPoint(gr,(int)(r*255),(int)(g*255),(int)(b*255));
242 //setting variables if the user wants to do refresh
245 //hDlg->setClipping3DView(_wxvtkclipping3Dview);
247 hDlg->setVolume(newvol);
248 hDlg->setVolumeMapper(volumeMapper);
251 // when the user had changed the transference Function
253 if(hDlg->ShowModal()== wxID_OK )
255 // -- vtkPiecewiseFunction --
256 tfun->RemoveAllPoints();
260 int nTFPoints=hDlg->getSizeTransferenceFunction();
264 hDlg->getTransferenceFunctionPoint(i,xi,yi);
265 tfun->AddPoint( xi , yi/100.0 );
267 itf->push_back(yi/100.0);
270 // -- vtkColorTransferFunction --
271 ctfun->RemoveAllPoints ();
278 int nCTFpoints=hDlg->getSizeBarColor();
282 hDlg->getDataBarColorPoint(i,xi,r,g,b);
283 ctfun->AddRGBPoint(xi,r/255.0,g/255.0,b/255.0 );
284 rctf->push_back(r/255.0);
285 gctf->push_back(g/255.0);
286 bctf->push_back(b/255.0);
287 greyctf->push_back(xi);
290 //---------------------------------
291 // Refreshing and sending the event
292 //---------------------------------
293 //_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->ReadVolumeFunctions();
298 // _volumerendererdata->OpacityChanged(*gtf, *itf);
299 _wxvtkclipping3Dview->UpdateVolumeBox(*gtf, *itf, ctfun);
303 _wxvtkclipping3Dview->Refresh();
304 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
305 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
308 volumeMapper->Update();
312 if(hDlg->getRefreshed())
315 //--Transference Function----
316 tfun->RemoveAllPoints();
321 double grey1=(*gtf)[i];
322 double in2=(*itf)[i];
323 tfun->AddPoint( grey1 , in2 );
326 // -- vtkColorTransferFunction --
327 ctfun->RemoveAllPoints ();
330 size=greyctf->size();
333 double grey2=(*greyctf)[i];
334 double red =(*rctf)[i];
335 double green =(*gctf)[i];
336 double blue = (*bctf)[i];
337 ctfun->AddRGBPoint(grey2,red,green,blue);
340 //---------------------------------
341 // Refreshing and sending the event
342 //---------------------------------
343 //_wxvtkclipping3Dview->GetVtkClipping3DDataViewer()->ReadVolumeFunctions();
345 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
346 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
348 _wxvtkclipping3Dview->Refresh();
351 volumeMapper->Update();
362 void wxVtkClipping3DViewVolCntrlPanel::OnRayCastingActive(wxCommandEvent& event){
363 //If Ray Casting is active, others options are disabled. Only RayCasting is true
364 _wxvtkclipping3Dview->SetRayCasting(true);
365 _wxvtkclipping3Dview->SetMIPActive(false);
367 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
369 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
370 _wxvtkclipping3Dview->Refresh();
373 void wxVtkClipping3DViewVolCntrlPanel::OnMIPActive(wxCommandEvent& event){
374 //If MIP is active, others options are disabled. Only MIP is true
375 _wxvtkclipping3Dview->SetMIPActive(true);
376 _wxvtkclipping3Dview->SetRayCasting(false);
378 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
379 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
381 _wxvtkclipping3Dview->Refresh();
386 void wxVtkClipping3DViewVolCntrlPanel::OnInterpolationActive(wxCommandEvent& event){
387 _wxvtkclipping3Dview->SetInterpolation(event.IsChecked());
389 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
390 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
391 _wxvtkclipping3Dview->Refresh();
394 void wxVtkClipping3DViewVolCntrlPanel::OnShadeActive(wxCommandEvent& event){
395 _wxvtkclipping3Dview->SetShade(event.IsChecked());
397 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121); // Refresh
398 _wxvtkclipping3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
399 _wxvtkclipping3Dview->Refresh();