1 #include "wxMaracasMultipleVolumeRendererPanel.h"
2 #include "wxMaracasMultipleVolumeRendererView.h"
3 #include "wxMaracasRendererView.h"
5 #include <wx/colordlg.h>
7 #include "vtkImageData.h"
8 #include "vtkRenderer.h"
10 #include <OpenImage.xpm>
13 //#include <vtkImageCast.h>
15 ** Implementation of viewProp3D
21 wxMaracasMultipleVolumeRendererPanel::wxMaracasMultipleVolumeRendererPanel(wxWindow* parent,int propid, vtkImageData* img, bool _isComplexBox)
22 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize)
25 isComplexBox = _isComplexBox;
33 wxMaracasMultipleVolumeRendererPanel::~wxMaracasMultipleVolumeRendererPanel(){
36 //((wxMaracasRenderTabbedPanel*)(wxMaracasRendererView::getInstance())->getTabbedPanel())->deleteVolume(_propid);
38 //wxMaracasMultipleVolumeRendererView::getInstance()->deleteVolume(_propid);
43 ** Sets panel elements
45 void wxMaracasMultipleVolumeRendererPanel::createControls(vtkImageData* img){
47 wxFlexGridSizer* sizerirmprop = new wxFlexGridSizer(3);
51 wxStaticText* label = new wxStaticText(this, -1, wxString(_T("")));
52 wxStaticText* label2 = new wxStaticText(this, -1, wxString(_T("")));
53 checkbox = new wxCheckBox(this,-1,wxString(_T("Show Actor")));
54 Connect(checkbox->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onCheckBoxChange);
55 checkbox->SetValue(true);
57 sizerirmprop->Add(checkbox,wxFIXED_MINSIZE);
58 sizerirmprop->Add(label,wxFIXED_MINSIZE);
59 sizerirmprop->Add(label2,wxFIXED_MINSIZE);
61 //wxBitmap bitmap(Color_xpm);
62 //_colorchoose = new wxBitmapButton(this, -1, bitmap,wxDefaultPosition,wxSize(30,30));
63 //Connect(_colorchoose->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onColorChange);
65 mwxwidget = new HistogramDialogComboBox(this);
66 mwxwidget->setImageData(img);
67 //mwxwidget->PushEventHandler(this);
68 Connect(mwxwidget->GetId(), wxEVT_COMMAND_COMBOBOX_SELECTED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onColorChange);
69 sizerirmprop->Add(mwxwidget,wxFIXED_MINSIZE);
71 wxBitmap bitmap0(Add_xpm);
72 _viewimage = new wxBitmapButton(this, -1, bitmap0, wxDefaultPosition, wxSize(30,30));
73 Connect(_viewimage->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onViewImage);
74 sizerirmprop->Add(_viewimage,wxFIXED_MINSIZE);
76 //std::string iconsdir = wxMaracasMultipleVolumeRendererView::getInstance()->getPath();
77 //iconsdir+="/data/Icons/Add.xmp";
78 //wxBitmap* bitmap = new wxBitmap(wxString(iconsdir.c_str(),wxConvUTF8), wxBITMAP_TYPE_XPM);
80 this->SetSizer(sizerirmprop, true);
81 this->SetAutoLayout( true );
83 //_frame = new wxFrame(this, 10, _T("Configure Transfer Functions"));
85 /*wxButton* button1 = new wxButton(_frame,20,_T("OK"));
86 Connect(button1->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onOK);
87 wxButton* button2 = new wxButton(_frame,30,_T("Cancel") );
88 Connect(button2->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onCancel);
89 wxButton* button3 = new wxButton(_frame,40,_T("Update"));
90 Connect(button3->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onUpdate); */
92 /*mwxwidget->erasePointsTransferenceFunction();
94 img->GetScalarRange(range);
95 double max = range[1];
99 mwxwidget->addPointToTransferenceFunction(max * 0/2,0.0);
100 mwxwidget->addPointToTransferenceFunction(max * 1/2,100.0);
101 mwxwidget->addPointToTransferenceFunction(max * 2/2,100.0);
103 mwxwidget->addColorPoint(max*0/4,(int)(0.0*255),(int)(0.0*255),(int)(0.0*255));
104 mwxwidget->addColorPoint(max*1/4,(int)(1.0*255),(int)(0.0*255),(int)(0.0*255));
105 mwxwidget->addColorPoint(max*2/4,(int)(0.0*255),(int)(0.0*255),(int)(1.0*255));
106 mwxwidget->addColorPoint(max*3/4,(int)(0.0*255),(int)(1.0*255),(int)(0.0*255));
107 mwxwidget->addColorPoint(max*4/4,(int)(0.0*255),(int)(0.0*255),(int)(0.2*255)); */
109 /*wxBoxSizer* boxSizer0 = new wxBoxSizer(wxHORIZONTAL);
110 boxSizer0->Add(mwxwidget, 4, wxGROW);
112 wxBoxSizer* boxSizer = new wxBoxSizer(wxHORIZONTAL);
113 boxSizer->AddSpacer(40);
114 boxSizer->Add(button1, wxCENTER);
115 boxSizer->AddSpacer(40);
116 boxSizer->Add(button2, wxCENTER);
117 boxSizer->AddSpacer(40);
118 boxSizer->Add(button3, wxCENTER);
120 wxBoxSizer* boxsizer2 = new wxBoxSizer(wxVERTICAL);
121 boxsizer2->Add(boxSizer0,1,wxEXPAND);
122 boxsizer2->Add(boxSizer,0,wxCENTER);
124 _frame->SetAutoLayout(true);
127 _frame->SetSizer(boxsizer2);
131 //mwxwidget->SetFunctions(wxMaracasMultipleVolumeRendererView::getInstance()->GetTransferFunction(getPropId()),
132 // wxMaracasMultipleVolumeRendererView::getInstance()->GetColorFunction(getPropId()));
133 mwxwidget->Refresh();
139 void wxMaracasMultipleVolumeRendererPanel::onOK(wxCommandEvent& event){
141 //_frame->Show(false);
147 void wxMaracasMultipleVolumeRendererPanel::onCancel(wxCommandEvent& event){
148 //_frame->Show(false);
154 void wxMaracasMultipleVolumeRendererPanel::onUpdate(wxCommandEvent& event){
161 void wxMaracasMultipleVolumeRendererPanel::updateVolume(){
162 std::vector<double> greylevelcolors;
163 std::vector<double> red;
164 std::vector<double> green;
165 std::vector<double> blue;
167 std::vector<double> greylevel;
168 std::vector<double> values;
170 mwxwidget->GetValuesColorPointsFunction(greylevelcolors, red, green, blue);
171 mwxwidget->GetValuesPointsFunction(greylevel, values);
173 if(this->isComplexBox)
175 ( (wxMaracasRendererView::getInstance())->getTabbedPanel(this->_propid) )->SetValuesColorPointsFunction(this->_propid,greylevelcolors, red, green, blue);
176 ( (wxMaracasRendererView::getInstance())->getTabbedPanel(this->_propid) )->SetValuesPointsFunction(this->_propid, greylevel, values);
180 wxMaracasMultipleVolumeRendererView::getInstance()->SetValuesColorPointsFunction(this->_propid, greylevelcolors, red, green, blue);
181 wxMaracasMultipleVolumeRendererView::getInstance()->SetValuesPointsFunction(this->_propid, greylevel, values);
186 ** Updates the volume visualization
188 void wxMaracasMultipleVolumeRendererPanel::onColorChange(wxCommandEvent& event){
190 //if(mwxwidget->ShowModal()==wxID_OK){
192 // mwxwidget->Show(false);
199 void wxMaracasMultipleVolumeRendererPanel::onViewImage(wxCommandEvent& event)
201 printf("wxMaracasMultipleVolumeRendererPanel->onViewImage: Test View Image /n");
202 vtkImageData* img = (wxMaracasRendererView::getInstance())->getTabbedPanel(_propid)->getVolImage();
203 /*wxMaracasDialog_NViewers* dialog = new wxMaracasDialog_NViewers(this);
205 std::vector<int> type;
206 std::vector<int> point;
210 dialog->SetType(type);
213 point.push_back((int)dialog->GetX());
214 point.push_back((int)dialog->GetY());
215 point.push_back((int)dialog->GetZ());
217 wxVtkBaseView *wvbv1 = dialog->GetwxVtkBaseView(1);
218 wxVtkBaseView *wvbv2 = dialog->GetwxVtkBaseView(2);
219 wxVtkBaseView *wvbv3 = dialog->GetwxVtkBaseView(3);
220 wxVtkBaseView *wvbv4 = dialog->GetwxVtkBaseView(4);*/
226 void wxMaracasMultipleVolumeRendererPanel::onCheckBoxChange(wxCommandEvent& event){
227 if(this->isComplexBox)
228 ( (wxMaracasRendererView::getInstance())->getTabbedPanel(this->_propid) )->addRemoveActorV(this->getPropId(), checkbox->GetValue());
230 wxMaracasMultipleVolumeRendererView::getInstance()->addRemoveActor(this->getPropId(), checkbox->GetValue());
236 int wxMaracasMultipleVolumeRendererPanel::getPropId(){
241 ** Carolina Perez: Recently added method
243 HistogramDialogComboBox* wxMaracasMultipleVolumeRendererPanel::getMwxwidget()