]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasMultipleVolumeRendererPanel.cxx
MIP function
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracasMultipleVolumeRendererPanel.cxx
1 #include "wxMaracasMultipleVolumeRendererPanel.h"
2 #include "wxMaracasMultipleVolumeRendererView.h"
3 #include "wxMaracasRendererView.h"
4
5 #include <wx/colordlg.h>
6
7 #include "vtkImageData.h"
8 #include "vtkRenderer.h"
9
10 #include <OpenImage.xpm>
11 #include <Add.xpm>
12 #include "Color.xpm"
13 //#include <vtkImageCast.h>
14 /**
15 **      Implementation of viewProp3D
16 **/
17
18 /**
19 ** Class constructor
20 **/
21 wxMaracasMultipleVolumeRendererPanel::wxMaracasMultipleVolumeRendererPanel(wxWindow* parent,int propid, vtkImageData* img, bool _isComplexBox)
22 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize)
23 {
24         _propid = propid;
25         isComplexBox = _isComplexBox;
26         
27         createControls(img);
28 }
29
30 /**
31 ** Class destructor
32 **/
33 wxMaracasMultipleVolumeRendererPanel::~wxMaracasMultipleVolumeRendererPanel(){  
34         
35         //if(isComplexBox)
36                 //((wxMaracasRenderTabbedPanel*)(wxMaracasRendererView::getInstance())->getTabbedPanel())->deleteVolume(_propid);
37         //else
38                 //wxMaracasMultipleVolumeRendererView::getInstance()->deleteVolume(_propid);
39         delete mwxwidget;
40 }
41
42 /**
43 ** Sets panel elements
44 **/
45 void wxMaracasMultipleVolumeRendererPanel::createControls(vtkImageData* img){
46
47         wxFlexGridSizer* sizerirmprop = new wxFlexGridSizer(3);
48         
49         if(!isComplexBox)
50         {
51                 wxStaticText* label = new wxStaticText(this, -1, wxString(_T("")));     
52                 wxStaticText* label2 = new wxStaticText(this, -1, wxString(_T("")));
53
54
55                 checkbox = new  wxCheckBox(this,-1,wxString(_T("Show Actor")));
56                 Connect(checkbox->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onCheckBoxChange);     
57                 checkbox->SetValue(true);       
58
59                 wxString choices[] = {_T("Composite"), _T("MIP")};
60                 _radiobox = new wxRadioBox(this, -1, wxString(_T("Function")), wxDefaultPosition, wxDefaultSize, 2, choices);
61                 Connect(_radiobox->GetId(), wxEVT_COMMAND_RADIOBOX_SELECTED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onRadioBoxSelectFunction);
62
63                 sizerirmprop->Add(checkbox,wxFIXED_MINSIZE);
64                 sizerirmprop->AddSpacer(5);
65                 sizerirmprop->Add(_radiobox,wxFIXED_MINSIZE);
66                 //sizerirmprop->Add(label2,wxFIXED_MINSIZE);
67         }
68         //wxBitmap bitmap(Color_xpm);
69         //_colorchoose = new wxBitmapButton(this, -1, bitmap,wxDefaultPosition,wxSize(30,30));  
70         //Connect(_colorchoose->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onColorChange);                    
71
72         mwxwidget = new HistogramDialogComboBox(this);
73         mwxwidget->setImageData(img);
74     //mwxwidget->PushEventHandler(this);
75         Connect(mwxwidget->GetId(), wxEVT_COMMAND_COMBOBOX_SELECTED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onColorChange);
76         sizerirmprop->Add(mwxwidget,wxFIXED_MINSIZE);   
77
78         wxBitmap bitmap0(Add_xpm);
79         _viewimage = new wxBitmapButton(this, -1, bitmap0, wxDefaultPosition, wxSize(30,30));   
80         Connect(_viewimage->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onViewImage);                  
81         sizerirmprop->Add(_viewimage,wxFIXED_MINSIZE);  
82
83         //std::string iconsdir = wxMaracasMultipleVolumeRendererView::getInstance()->getPath();
84         //iconsdir+="/data/Icons/Add.xmp";
85         //wxBitmap* bitmap = new wxBitmap(wxString(iconsdir.c_str(),wxConvUTF8), wxBITMAP_TYPE_XPM);
86
87         this->SetSizer(sizerirmprop, true);             
88         this->SetAutoLayout( true );
89     
90         //_frame = new wxFrame(this, 10, _T("Configure Transfer Functions"));   
91
92         /*wxButton* button1 = new wxButton(_frame,20,_T("OK"));
93         Connect(button1->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onOK);                            
94         wxButton* button2 = new wxButton(_frame,30,_T("Cancel") );
95         Connect(button2->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onCancel);                                
96         wxButton* button3 = new wxButton(_frame,40,_T("Update"));
97         Connect(button3->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onUpdate);                                */
98
99         /*mwxwidget->erasePointsTransferenceFunction();
100         double range[2];
101         img->GetScalarRange(range);
102         double max = range[1];
103
104         
105         //X
106         mwxwidget->addPointToTransferenceFunction(max * 0/2,0.0);
107         mwxwidget->addPointToTransferenceFunction(max * 1/2,100.0);
108         mwxwidget->addPointToTransferenceFunction(max * 2/2,100.0);
109
110         mwxwidget->addColorPoint(max*0/4,(int)(0.0*255),(int)(0.0*255),(int)(0.0*255));
111         mwxwidget->addColorPoint(max*1/4,(int)(1.0*255),(int)(0.0*255),(int)(0.0*255));
112         mwxwidget->addColorPoint(max*2/4,(int)(0.0*255),(int)(0.0*255),(int)(1.0*255));
113         mwxwidget->addColorPoint(max*3/4,(int)(0.0*255),(int)(1.0*255),(int)(0.0*255));
114         mwxwidget->addColorPoint(max*4/4,(int)(0.0*255),(int)(0.0*255),(int)(0.2*255)); */
115
116         /*wxBoxSizer* boxSizer0 = new wxBoxSizer(wxHORIZONTAL);
117         boxSizer0->Add(mwxwidget, 4, wxGROW);
118
119         wxBoxSizer* boxSizer = new wxBoxSizer(wxHORIZONTAL);
120         boxSizer->AddSpacer(40);
121         boxSizer->Add(button1, wxCENTER);
122         boxSizer->AddSpacer(40);
123         boxSizer->Add(button2, wxCENTER);
124         boxSizer->AddSpacer(40);
125         boxSizer->Add(button3, wxCENTER);
126
127         wxBoxSizer* boxsizer2 = new wxBoxSizer(wxVERTICAL);
128         boxsizer2->Add(boxSizer0,1,wxEXPAND);   
129         boxsizer2->Add(boxSizer,0,wxCENTER);    
130     
131         _frame->SetAutoLayout(true);
132
133
134     _frame->SetSizer(boxsizer2);
135
136         _frame->Refresh();
137         _frame->Update();*/     
138         //mwxwidget->SetFunctions(wxMaracasMultipleVolumeRendererView::getInstance()->GetTransferFunction(getPropId()),
139         //                                              wxMaracasMultipleVolumeRendererView::getInstance()->GetColorFunction(getPropId()));
140         mwxwidget->Refresh();   
141 }
142
143 /**
144 **
145 **/
146 void wxMaracasMultipleVolumeRendererPanel::onOK(wxCommandEvent& event){
147     updateVolume();
148         //_frame->Show(false);
149 }
150
151 /**
152 **
153 **/
154 void wxMaracasMultipleVolumeRendererPanel::onCancel(wxCommandEvent& event){
155         //_frame->Show(false);
156 }
157
158 /**
159 **
160 **/
161 void wxMaracasMultipleVolumeRendererPanel::onUpdate(wxCommandEvent& event){
162         updateVolume();    
163 }
164
165 /**
166 **
167 **/
168 void wxMaracasMultipleVolumeRendererPanel::updateVolume(){
169         std::vector<double> greylevelcolors;
170         std::vector<double> red;
171         std::vector<double> green;
172         std::vector<double> blue;
173
174         std::vector<double> greylevel;
175         std::vector<double> values;
176
177     mwxwidget->GetValuesColorPointsFunction(greylevelcolors, red, green, blue);
178         mwxwidget->GetValuesPointsFunction(greylevel, values);
179
180         if(this->isComplexBox)
181         {
182                 ( (wxMaracasRendererView::getInstance())->getTabbedPanel(this->_propid) )->SetValuesColorPointsFunction(this->_propid,greylevelcolors, red, green, blue);
183                 ( (wxMaracasRendererView::getInstance())->getTabbedPanel(this->_propid) )->SetValuesPointsFunction(this->_propid, greylevel, values);
184         }
185         else
186         {       
187                 wxMaracasMultipleVolumeRendererView::getInstance()->SetValuesColorPointsFunction(this->_propid, greylevelcolors, red, green, blue);
188                 wxMaracasMultipleVolumeRendererView::getInstance()->SetValuesPointsFunction(this->_propid, greylevel, values);
189         }
190 }
191
192 /**
193 ** Updates the volume visualization
194 **/
195 void wxMaracasMultipleVolumeRendererPanel::onColorChange(wxCommandEvent& event){        
196
197         //if(mwxwidget->ShowModal()==wxID_OK){
198         updateVolume();
199         //      mwxwidget->Show(false);
200         //}     
201 }
202
203 /**
204 **
205 **/
206 void wxMaracasMultipleVolumeRendererPanel::onViewImage(wxCommandEvent& event)
207 {       
208         printf("wxMaracasMultipleVolumeRendererPanel->onViewImage: Test View Image /n");
209         vtkImageData* img = (wxMaracasRendererView::getInstance())->getTabbedPanel(_propid)->getVolImage();
210         /*wxMaracasDialog_NViewers* dialog = new wxMaracasDialog_NViewers(this);
211
212         std::vector<int> type;
213         std::vector<int> point;
214
215         type.push_back(6);
216         dialog->SetImage(  );
217         dialog->SetType(type);
218
219         point.clear();
220         point.push_back((int)dialog->GetX());
221         point.push_back((int)dialog->GetY());
222         point.push_back((int)dialog->GetZ());
223
224         wxVtkBaseView *wvbv1 = dialog->GetwxVtkBaseView(1);
225         wxVtkBaseView *wvbv2 = dialog->GetwxVtkBaseView(2);
226         wxVtkBaseView *wvbv3 = dialog->GetwxVtkBaseView(3);
227         wxVtkBaseView *wvbv4 = dialog->GetwxVtkBaseView(4);*/
228 }
229
230 /**
231 **
232 **/
233 void wxMaracasMultipleVolumeRendererPanel::onCheckBoxChange(wxCommandEvent& event){     
234         if(this->isComplexBox)
235                 ( (wxMaracasRendererView::getInstance())->getTabbedPanel(this->_propid) )->addRemoveActorV(this->getPropId(), checkbox->GetValue());
236         else
237                 wxMaracasMultipleVolumeRendererView::getInstance()->addRemoveActor(this->getPropId(), checkbox->GetValue());    
238 }
239
240 /**
241 ** Gets the propId
242 **/
243 int wxMaracasMultipleVolumeRendererPanel::getPropId(){
244         return _propid;
245 }
246
247 void wxMaracasMultipleVolumeRendererPanel::onRadioBoxSelectFunction(wxCommandEvent& event){     
248         
249         wxMaracasMultipleVolumeRendererView::getInstance()->changeCompositeMIPFunction(this->getPropId(), _radiobox->GetSelection());   
250 }
251
252 /**
253 ** Carolina Perez: Recently added method
254 **/
255 HistogramDialogComboBox* wxMaracasMultipleVolumeRendererPanel::getMwxwidget()
256 {
257         return mwxwidget;
258 }
259