1 #include "wxMaracasRenderTabbedPanel.h"
2 #include "HistogramDialogComboBox.h"
4 #include "wxMaracasMultipleVolumeRendererPanel.h"
5 #include "wxMaracasSurfaceRenderingPanel.h"
6 #include "wxMaracasSurfaceRenderingProp3DMHD.h"
7 #include "wxMaracasMultipleVolumeRendererManagerData.h"
9 #include <wx/colordlg.h>
10 #include <wx/button.h>
12 #include <OpenImage.xpm>
15 #include <vtkProp3D.h>
20 wxMaracasRenderTabbedPanel::wxMaracasRenderTabbedPanel(wxWindow* parent, int id)
21 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize)
24 volmanager = new wxMaracasMultipleVolumeRendererManager();
25 surrendmanager1 = new wxMaracasSurfaceRenderingManager();
26 surrendmanager2 = new wxMaracasSurfaceRenderingManager();
27 surrendmanager3 = new wxMaracasSurfaceRenderingManager();
33 wxMaracasRenderTabbedPanel::~wxMaracasRenderTabbedPanel()
35 //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorV(_propid, false);
36 //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSA(_propid, false);
37 //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSB(_propid, false);
38 //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSC(_propid, false);
39 this->deleteVolume(_id);
44 ** Initializes rendered images, and creates and adds elements to the panel
46 void wxMaracasRenderTabbedPanel::createControls(vtkImageData* inImg, std::string pathfile, std::string filename)
48 wxFlexGridSizer* sizerrenderprop = new wxFlexGridSizer(1);
50 wxFlexGridSizer* sizercheck = new wxFlexGridSizer(2);
51 checkboxVol = new wxCheckBox(this,-1,wxString(_T("Volume Rendering")));
52 Connect(checkboxVol->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxVChange);
53 checkboxVol->SetValue(true);
54 sizercheck->Add(checkboxVol, wxFIXED_MINSIZE);
56 checkboxSA = new wxCheckBox(this,-1,wxString(_T("Surface Rendering A")));
57 Connect(checkboxSA->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSAChange);
58 checkboxSA->SetValue(true);
59 sizercheck->Add(checkboxSA, wxFIXED_MINSIZE);
61 checkboxSB = new wxCheckBox(this,-1,wxString(_T("Surface Rendering B")));
62 Connect(checkboxSB->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSBChange);
63 checkboxSB->SetValue(true);
64 sizercheck->Add(checkboxSB, wxFIXED_MINSIZE);
66 checkboxSC = new wxCheckBox(this,-1,wxString(_T("Surface Rendering C")));
67 Connect(checkboxSC->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSCChange);
68 checkboxSC->SetValue(true);
69 sizercheck->Add(checkboxSC, wxFIXED_MINSIZE);
71 wxButton* _openParameters = new wxButton(this, -1, wxString(_T("Apply Transformation")));
72 Connect(_openParameters->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onOpenParameters);
73 sizercheck->Add(_openParameters,wxFIXED_MINSIZE);
75 wxButton* _openCutter = new wxButton(this, -1, wxString(_T("Open Cutter View")));
76 Connect(_openCutter->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onOpenCutter);
77 sizercheck->Add(_openCutter,wxFIXED_MINSIZE);
78 sizerrenderprop->Add(sizercheck, wxFIXED_MINSIZE);
80 wxtabs = new wxNotebook(this, -1);
84 vtkImageData* img = volmanager->getImageData(pathfile);
85 //vtkImageData* img1 = surrendmanager1->getImageData(pathfile);
86 //vtkImageData* img2 = surrendmanager2->getImageData(pathfile);
87 //vtkImageData* img3 = surrendmanager3->getImageData(pathfile);
88 if(img!=NULL /*&& img1!=NULL && img2!=NULL && img3!=NULL*/)
90 addVolume(img, filename);
91 addSurface1(img, filename);
92 addSurface2(img, filename);
93 addSurface3(img, filename);
99 addVolume(inImg, filename);
100 addSurface1(inImg, filename);
101 addSurface2(inImg, filename);
102 addSurface3(inImg, filename);
106 sizerrenderprop->Add(wxtabs, wxSizerFlags().Expand().Center());
108 this->SetSizer(sizerrenderprop, true);
109 this->SetAutoLayout( true );
114 ** Sets given renderer
116 void wxMaracasRenderTabbedPanel::setRenderer(vtkRenderer* renderer)
118 volmanager->setRenderer(renderer);
119 surrendmanager1->setRenderer(renderer);
120 surrendmanager2->setRenderer(renderer);
121 surrendmanager3->setRenderer(renderer);
125 ** Adds a volume using Volume Rendering
127 void wxMaracasRenderTabbedPanel::addVolume(vtkImageData* img, std::string dataname)
131 int _propidV = volmanager->addVolume(_id, img, dataname);
134 wxMaracasMultipleVolumeRendererPanel* controlpanV = new wxMaracasMultipleVolumeRendererPanel(wxtabs, _propidV, img, true);
135 wxtabs->AddPage(controlpanV, _T("Vol Rendering"), true);
136 controlpanV->updateVolume();
141 std::cout << "Exception : " << str << '\n';
142 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
149 ** Adds a volume using surface rendering
151 void wxMaracasRenderTabbedPanel::addSurface1(vtkImageData* img, std::string dataname)
155 int _propidSA = surrendmanager1->addPropMHD(_id, img, dataname);
159 wxMaracasSurfaceRenderingPanel* controlpanSA = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, _propidSA, true, 1);
160 int maxiso = surrendmanager1->getMaxIsoValue(_propidSA);
161 ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSA)->createControls(maxiso);
162 wxtabs->AddPage(controlpanSA, _T("SR A"));
167 std::cout << "Exception : " << str << '\n';
168 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
175 ** Adds a volume using surface rendering
177 void wxMaracasRenderTabbedPanel::addSurface2(vtkImageData* img, std::string dataname)
181 int _propidSB = surrendmanager2->addPropMHD(_id, img, dataname);
184 wxMaracasSurfaceRenderingPanel* controlpanSB = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, _propidSB, true, 2);
185 int maxiso = surrendmanager2->getMaxIsoValue(_propidSB);
186 ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSB)->createControls(maxiso);
187 wxtabs->AddPage(controlpanSB, _T("SR B"));
193 std::cout << "Exception : " << str << '\n';
194 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
201 ** Adds a volume using Surface Rendering
203 void wxMaracasRenderTabbedPanel::addSurface3(vtkImageData* img, std::string dataname)
207 int _propidSC = surrendmanager3->addPropMHD(_id, img, dataname);
211 wxMaracasSurfaceRenderingPanel* controlpanSC = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, _propidSC, true, 3);
212 int maxiso = surrendmanager3->getMaxIsoValue(_propidSC);
213 ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSC)->createControls(maxiso);
214 wxtabs->AddPage(controlpanSC, _T("SR C"));
219 std::cout << "Exception : " << str << '\n';
220 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
227 ** Deletes complete volume
229 void wxMaracasRenderTabbedPanel::deleteVolume(int volid)
233 volmanager->deleteActor(volid);
234 surrendmanager1->deleteActor(volid);
235 surrendmanager2->deleteActor(volid);
236 surrendmanager3->deleteActor(volid);
240 std::cout << "Exception : " << str << '\n';
241 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
248 ** Adds or removes volume rendering actor with given ID
250 void wxMaracasRenderTabbedPanel::addRemoveActorV(int id, bool addremove)
253 volmanager->addRemoveActor(id, addremove);
256 std::cout << "Exception : " << str << '\n';
257 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
264 ** Adds or removes surface rendering actor with given ID
266 void wxMaracasRenderTabbedPanel::addRemoveActorSA(int id, bool addremove)
269 surrendmanager1->addRemoveActor(id, addremove);
272 std::cout << "Exception : " << str << '\n';
273 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
280 ** Adds or removes surface rendering actor with given ID
282 void wxMaracasRenderTabbedPanel::addRemoveActorSB(int id, bool addremove)
285 surrendmanager2->addRemoveActor(id, addremove);
288 std::cout << "Exception : " << str << '\n';
289 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
296 ** Adds or removes surface rendering actor with given ID
298 void wxMaracasRenderTabbedPanel::addRemoveActorSC(int id, bool addremove)
301 surrendmanager3->addRemoveActor(id, addremove);
304 std::cout << "Exception : " << str << '\n';
305 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
312 ** Sets color points values for the given volume rendering identified by parameter: volumeid
314 void wxMaracasRenderTabbedPanel::SetValuesColorPointsFunction(int volid, std::vector<double> greylevelcolors,std::vector<double> red,std::vector<double> green,std::vector<double> blue)
316 volmanager->setVolumeColor(volid, greylevelcolors, red, green, blue);
320 ** Sets points values for the given volume rendering identified by parameter: volumeid
322 void wxMaracasRenderTabbedPanel::SetValuesPointsFunction(int volid, std::vector<double> greylevel, std::vector<double> values)
325 volmanager->setVolumeOpacity(volid, greylevel, values);
329 wxString s( str,wxConvUTF8 );
330 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
338 ** Returns transfer function for the given volume rendering identified by parameter: volumeid
340 vtkPiecewiseFunction* wxMaracasRenderTabbedPanel::GetTransferFunction(int volumeid)
342 return volmanager->GetTransferFunction(volumeid);
346 ** Returns color function for the given volume rendering identified by parameter: volumeid
348 vtkColorTransferFunction* wxMaracasRenderTabbedPanel::GetColorFunction(int volumeid)
350 return volmanager->GetColorFunction(volumeid);
354 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
356 void wxMaracasRenderTabbedPanel::changeOpacityA(int _propid, int value)
358 surrendmanager1->changeOpacity(_propid,value);
362 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
364 void wxMaracasRenderTabbedPanel::changeIsoValueA(int propid, double value)
366 surrendmanager1->changeIsoValue(propid, value);
370 ** Changes color for the given surface rendering image identified by parameter: propid
372 void wxMaracasRenderTabbedPanel::changeColorA(int propid, double red, double green, double blue)
376 surrendmanager1->changeColor(propid, red, green, blue);
380 wxString s( str,wxConvUTF8 );
381 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
388 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
390 void wxMaracasRenderTabbedPanel::changeOpacityB(int _propid, int value)
392 surrendmanager2->changeOpacity(_propid,value);
396 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
398 void wxMaracasRenderTabbedPanel::changeIsoValueB(int propid, double value)
400 surrendmanager2->changeIsoValue(propid, value);
404 ** Changes color for the given surface rendering image identified by parameter: propid
406 void wxMaracasRenderTabbedPanel::changeColorB(int propid, double red, double green, double blue)
410 surrendmanager2->changeColor(propid, red, green, blue);
414 wxString s( str,wxConvUTF8 );
415 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
422 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
424 void wxMaracasRenderTabbedPanel::changeOpacityC(int _propid, int value)
426 surrendmanager3->changeOpacity(_propid,value);
430 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
432 void wxMaracasRenderTabbedPanel::changeIsoValueC(int propid, double value)
434 surrendmanager3->changeIsoValue(propid, value);
438 ** Changes color for the given surface rendering image identified by parameter: propid
440 void wxMaracasRenderTabbedPanel::changeColorC(int propid, double red, double green, double blue)
444 surrendmanager3->changeColor(propid, red, green, blue);
448 wxString s( str,wxConvUTF8 );
449 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
456 ** Method called when VolumeRendering checkbox status changes: Either shows or hides VolumeRendering image
458 void wxMaracasRenderTabbedPanel::onCheckBoxVChange(wxCommandEvent& event)
461 volmanager->addRemoveActor(this->getPropIdV(), checkboxVol->GetValue());
464 std::cout << "Exception : " << str << '\n';
465 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
472 ** Method called when SurfaceRendering A checkbox status changes: Either shows or hides SurfaceRendering image
474 void wxMaracasRenderTabbedPanel::onCheckBoxSAChange(wxCommandEvent& event)
477 surrendmanager1->addRemoveActor(this->getPropIdV(), checkboxSA->GetValue());
480 std::cout << "Exception : " << str << '\n';
481 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
488 ** Method called when SurfaceRendering B checkbox status changes: Either shows or hides SurfaceRendering B image
490 void wxMaracasRenderTabbedPanel::onCheckBoxSBChange(wxCommandEvent& event)
493 surrendmanager2->addRemoveActor(this->getPropIdV(), checkboxSB->GetValue());
496 std::cout << "Exception : " << str << '\n';
497 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
504 ** Method called when SurfaceRendering C checkbox status changes: Either shows or hides SurfaceRendering C image
506 void wxMaracasRenderTabbedPanel::onCheckBoxSCChange(wxCommandEvent& event)
509 surrendmanager3->addRemoveActor(this->getPropIdV(), checkboxSC->GetValue());
512 std::cout << "Exception : " << str << '\n';
513 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
522 void wxMaracasRenderTabbedPanel::onOpenParameters(wxCommandEvent& event){
524 dialog = new wxMaracasRenderImageManagementPanel(this, volmanager, surrendmanager1, surrendmanager2, surrendmanager3, this->getPropIdV());
525 dialog->SetSize(400, 580);
532 ** Gets volume rendering image asociated to the given ID
534 void wxMaracasRenderTabbedPanel::onColorChange(wxCommandEvent& event)
536 /*Temporarily disabled*/
538 //if(mwxwidget->ShowModal()==wxID_OK){
540 // mwxwidget->Show(false);
547 vtkImageData* wxMaracasRenderTabbedPanel::getVolImage()
549 return volmanager->getImageData();
553 ** Gets surface rendering A image asociated to the given ID
555 vtkImageData* wxMaracasRenderTabbedPanel::getSurfAImage()
557 return surrendmanager1->getImageData();
561 ** Gets surface rendering B image asociated to the given ID
563 vtkImageData* wxMaracasRenderTabbedPanel::getSurfBImage()
565 return surrendmanager2->getImageData();
569 ** Gets surface rendering C image asociated to the given ID
571 vtkImageData* wxMaracasRenderTabbedPanel::getSurfCImage()
573 return surrendmanager3->getImageData();
579 void wxMaracasRenderTabbedPanel::onOpenCutter(wxCommandEvent& event)
587 int wxMaracasRenderTabbedPanel::getPropIdV()