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)
27 volmanager = new wxMaracasMultipleVolumeRendererManager();
28 surrendmanager1 = new wxMaracasSurfaceRenderingManager();
29 surrendmanager2 = new wxMaracasSurfaceRenderingManager();
30 surrendmanager3 = new wxMaracasSurfaceRenderingManager();
36 wxMaracasRenderTabbedPanel::~wxMaracasRenderTabbedPanel()
38 //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorV(_propid, false);
39 //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSA(_propid, false);
40 //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSB(_propid, false);
41 //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSC(_propid, false);
42 this->deleteVolume(_id);
47 ** Initializes rendered images, and creates and adds elements to the panel
49 void wxMaracasRenderTabbedPanel::createControls(vtkImageData* inImg, std::string pathfile, std::string filename)
51 wxFlexGridSizer* sizerrenderprop = new wxFlexGridSizer(1);
53 wxFlexGridSizer* sizercheck = new wxFlexGridSizer(2);
54 checkboxVol = new wxCheckBox(this,-1,wxString(_T("Volume Rendering")));
55 Connect(checkboxVol->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxVChange);
56 checkboxVol->SetValue(true);
57 sizercheck->Add(checkboxVol, wxFIXED_MINSIZE);
59 checkboxSA = new wxCheckBox(this,-1,wxString(_T("Surface Rendering A")));
60 Connect(checkboxSA->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSAChange);
61 checkboxSA->SetValue(true);
62 sizercheck->Add(checkboxSA, wxFIXED_MINSIZE);
64 checkboxSB = new wxCheckBox(this,-1,wxString(_T("Surface Rendering B")));
65 Connect(checkboxSB->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSBChange);
66 checkboxSB->SetValue(true);
67 sizercheck->Add(checkboxSB, wxFIXED_MINSIZE);
69 checkboxSC = new wxCheckBox(this,-1,wxString(_T("Surface Rendering C")));
70 Connect(checkboxSC->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSCChange);
71 checkboxSC->SetValue(true);
72 sizercheck->Add(checkboxSC, wxFIXED_MINSIZE);
74 wxButton* _openParameters = new wxButton(this, -1, wxString(_T("Apply Transformation")));
75 Connect(_openParameters->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onOpenParameters);
76 sizercheck->Add(_openParameters,wxFIXED_MINSIZE);
78 wxButton* _openCutter = new wxButton(this, -1, wxString(_T("Open Cutter View")));
79 Connect(_openCutter->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onOpenCutter);
80 sizercheck->Add(_openCutter,wxFIXED_MINSIZE);
81 sizerrenderprop->Add(sizercheck, wxFIXED_MINSIZE);
83 wxtabs = new wxNotebook(this, -1);
87 vtkImageData* img = volmanager->getImageData(pathfile);
88 //vtkImageData* img1 = surrendmanager1->getImageData(pathfile);
89 //vtkImageData* img2 = surrendmanager2->getImageData(pathfile);
90 //vtkImageData* img3 = surrendmanager3->getImageData(pathfile);
91 if(img!=NULL /*&& img1!=NULL && img2!=NULL && img3!=NULL*/)
93 addVolume(img, filename);
94 addSurface1(img, filename);
95 addSurface2(img, filename);
96 addSurface3(img, filename);
97 volname = (wxString) filename;
103 addVolume(inImg, filename);
104 addSurface1(inImg, filename);
105 addSurface2(inImg, filename);
106 addSurface3(inImg, filename);
110 sizerrenderprop->Add(wxtabs, wxSizerFlags().Expand().Center());
112 this->SetSizer(sizerrenderprop, true);
113 this->SetAutoLayout( true );
118 ** Sets given renderer
120 void wxMaracasRenderTabbedPanel::setRenderer(vtkRenderer* renderer)
122 volmanager->setRenderer(renderer);
123 surrendmanager1->setRenderer(renderer);
124 surrendmanager2->setRenderer(renderer);
125 surrendmanager3->setRenderer(renderer);
129 ** Adds a volume using Volume Rendering
131 void wxMaracasRenderTabbedPanel::addVolume(vtkImageData* img, std::string dataname)
135 int _propidV = volmanager->addVolume(_id, img, dataname);
138 wxMaracasMultipleVolumeRendererPanel* controlpanV = new wxMaracasMultipleVolumeRendererPanel(wxtabs, _propidV, img, true);
139 wxtabs->AddPage(controlpanV, _T("Vol Rendering"), true);
140 controlpanV->updateVolume();
145 std::cout << "Exception : " << str << '\n';
146 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
153 ** Adds a volume using surface rendering
155 void wxMaracasRenderTabbedPanel::addSurface1(vtkImageData* img, std::string dataname)
159 int _propidSA = surrendmanager1->addPropMHD(_id, img, dataname);
163 wxMaracasSurfaceRenderingPanel* controlpanSA = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, _propidSA, true, 1);
164 int maxiso = surrendmanager1->getMaxIsoValue(_propidSA);
165 ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSA)->createControls(maxiso);
166 wxtabs->AddPage(controlpanSA, _T("SR A"));
171 std::cout << "Exception : " << str << '\n';
172 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
179 ** Adds a volume using surface rendering
181 void wxMaracasRenderTabbedPanel::addSurface2(vtkImageData* img, std::string dataname)
185 int _propidSB = surrendmanager2->addPropMHD(_id, img, dataname);
188 wxMaracasSurfaceRenderingPanel* controlpanSB = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, _propidSB, true, 2);
189 int maxiso = surrendmanager2->getMaxIsoValue(_propidSB);
190 ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSB)->createControls(maxiso);
191 wxtabs->AddPage(controlpanSB, _T("SR B"));
197 std::cout << "Exception : " << str << '\n';
198 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
205 ** Adds a volume using Surface Rendering
207 void wxMaracasRenderTabbedPanel::addSurface3(vtkImageData* img, std::string dataname)
211 int _propidSC = surrendmanager3->addPropMHD(_id, img, dataname);
215 wxMaracasSurfaceRenderingPanel* controlpanSC = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, _propidSC, true, 3);
216 int maxiso = surrendmanager3->getMaxIsoValue(_propidSC);
217 ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSC)->createControls(maxiso);
218 wxtabs->AddPage(controlpanSC, _T("SR C"));
223 std::cout << "Exception : " << str << '\n';
224 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
231 ** Deletes complete volume
233 void wxMaracasRenderTabbedPanel::deleteVolume(int volid)
237 volmanager->deleteActor(volid);
238 surrendmanager1->deleteActor(volid);
239 surrendmanager2->deleteActor(volid);
240 surrendmanager3->deleteActor(volid);
244 std::cout << "Exception : " << str << '\n';
245 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
252 ** Adds or removes volume rendering actor with given ID
254 void wxMaracasRenderTabbedPanel::addRemoveActorV(int id, bool addremove)
257 volmanager->addRemoveActor(id, addremove);
260 std::cout << "Exception : " << str << '\n';
261 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
268 ** Adds or removes surface rendering actor with given ID
270 void wxMaracasRenderTabbedPanel::addRemoveActorSA(int id, bool addremove)
273 surrendmanager1->addRemoveActor(id, addremove);
276 std::cout << "Exception : " << str << '\n';
277 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
284 ** Adds or removes surface rendering actor with given ID
286 void wxMaracasRenderTabbedPanel::addRemoveActorSB(int id, bool addremove)
289 surrendmanager2->addRemoveActor(id, addremove);
292 std::cout << "Exception : " << str << '\n';
293 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
300 ** Adds or removes surface rendering actor with given ID
302 void wxMaracasRenderTabbedPanel::addRemoveActorSC(int id, bool addremove)
305 surrendmanager3->addRemoveActor(id, addremove);
308 std::cout << "Exception : " << str << '\n';
309 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
316 ** Sets color points values for the given volume rendering identified by parameter: volumeid
318 void wxMaracasRenderTabbedPanel::SetValuesColorPointsFunction(int volid, std::vector<double> greylevelcolors,std::vector<double> red,std::vector<double> green,std::vector<double> blue)
320 volmanager->setVolumeColor(volid, greylevelcolors, red, green, blue);
324 ** Sets points values for the given volume rendering identified by parameter: volumeid
326 void wxMaracasRenderTabbedPanel::SetValuesPointsFunction(int volid, std::vector<double> greylevel, std::vector<double> values)
329 volmanager->setVolumeOpacity(volid, greylevel, values);
333 wxString s( str,wxConvUTF8 );
334 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
342 ** Returns transfer function for the given volume rendering identified by parameter: volumeid
344 vtkPiecewiseFunction* wxMaracasRenderTabbedPanel::GetTransferFunction(int volumeid)
346 return volmanager->GetTransferFunction(volumeid);
350 ** Returns color function for the given volume rendering identified by parameter: volumeid
352 vtkColorTransferFunction* wxMaracasRenderTabbedPanel::GetColorFunction(int volumeid)
354 return volmanager->GetColorFunction(volumeid);
358 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
360 void wxMaracasRenderTabbedPanel::changeOpacityA(int _propid, int value)
362 surrendmanager1->changeOpacity(_propid,value);
366 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
368 void wxMaracasRenderTabbedPanel::changeIsoValueA(int propid, double value)
370 surrendmanager1->changeIsoValue(propid, value);
374 ** Changes color for the given surface rendering image identified by parameter: propid
376 void wxMaracasRenderTabbedPanel::changeColorA(int propid, double red, double green, double blue)
380 surrendmanager1->changeColor(propid, red, green, blue);
384 wxString s( str,wxConvUTF8 );
385 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
392 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
394 void wxMaracasRenderTabbedPanel::changeOpacityB(int _propid, int value)
396 surrendmanager2->changeOpacity(_propid,value);
400 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
402 void wxMaracasRenderTabbedPanel::changeIsoValueB(int propid, double value)
404 surrendmanager2->changeIsoValue(propid, value);
408 ** Changes color for the given surface rendering image identified by parameter: propid
410 void wxMaracasRenderTabbedPanel::changeColorB(int propid, double red, double green, double blue)
414 surrendmanager2->changeColor(propid, red, green, blue);
418 wxString s( str,wxConvUTF8 );
419 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
426 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
428 void wxMaracasRenderTabbedPanel::changeOpacityC(int _propid, int value)
430 surrendmanager3->changeOpacity(_propid,value);
434 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
436 void wxMaracasRenderTabbedPanel::changeIsoValueC(int propid, double value)
438 surrendmanager3->changeIsoValue(propid, value);
442 ** Changes color for the given surface rendering image identified by parameter: propid
444 void wxMaracasRenderTabbedPanel::changeColorC(int propid, double red, double green, double blue)
448 surrendmanager3->changeColor(propid, red, green, blue);
452 wxString s( str,wxConvUTF8 );
453 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
460 ** Method called when VolumeRendering checkbox status changes: Either shows or hides VolumeRendering image
462 void wxMaracasRenderTabbedPanel::onCheckBoxVChange(wxCommandEvent& event)
465 volmanager->addRemoveActor(this->getPropIdV(), checkboxVol->GetValue());
468 std::cout << "Exception : " << str << '\n';
469 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
476 ** Method called when SurfaceRendering A checkbox status changes: Either shows or hides SurfaceRendering image
478 void wxMaracasRenderTabbedPanel::onCheckBoxSAChange(wxCommandEvent& event)
481 surrendmanager1->addRemoveActor(this->getPropIdV(), checkboxSA->GetValue());
484 std::cout << "Exception : " << str << '\n';
485 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
492 ** Method called when SurfaceRendering B checkbox status changes: Either shows or hides SurfaceRendering B image
494 void wxMaracasRenderTabbedPanel::onCheckBoxSBChange(wxCommandEvent& event)
497 surrendmanager2->addRemoveActor(this->getPropIdV(), checkboxSB->GetValue());
500 std::cout << "Exception : " << str << '\n';
501 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
508 ** Method called when SurfaceRendering C checkbox status changes: Either shows or hides SurfaceRendering C image
510 void wxMaracasRenderTabbedPanel::onCheckBoxSCChange(wxCommandEvent& event)
513 surrendmanager3->addRemoveActor(this->getPropIdV(), checkboxSC->GetValue());
516 std::cout << "Exception : " << str << '\n';
517 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
526 void wxMaracasRenderTabbedPanel::onOpenParameters(wxCommandEvent& event){
529 dialog = new wxMaracasRenderImageManagementPanel(this, volmanager, surrendmanager1, surrendmanager2, surrendmanager3, volname, _id);
530 dialog->SetSize(400, 580);
533 else if(dialog != NULL)
540 ** Gets volume rendering image asociated to the given ID
542 void wxMaracasRenderTabbedPanel::onColorChange(wxCommandEvent& event)
544 /*Temporarily disabled*/
546 //if(mwxwidget->ShowModal()==wxID_OK){
548 // mwxwidget->Show(false);
555 vtkImageData* wxMaracasRenderTabbedPanel::getVolImage()
557 return volmanager->getImageData();
561 ** Gets surface rendering A image asociated to the given ID
563 vtkImageData* wxMaracasRenderTabbedPanel::getSurfAImage()
565 return surrendmanager1->getImageData();
569 ** Gets surface rendering B image asociated to the given ID
571 vtkImageData* wxMaracasRenderTabbedPanel::getSurfBImage()
573 return surrendmanager2->getImageData();
577 ** Gets surface rendering C image asociated to the given ID
579 vtkImageData* wxMaracasRenderTabbedPanel::getSurfCImage()
581 return surrendmanager3->getImageData();
587 void wxMaracasRenderTabbedPanel::onOpenCutter(wxCommandEvent& event)
595 int wxMaracasRenderTabbedPanel::getPropIdV()