]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasRenderTabbedPanel.cpp
3daafe07a8f322eb3bb8654bb83c600662b4ce10
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracasRenderTabbedPanel.cpp
1 #include "wxMaracasRenderTabbedPanel.h"
2 #include "HistogramDialogComboBox.h"
3
4 #include <wx/colordlg.h>
5 #include <OpenImage.xpm>
6 #include "Color.xpm"
7
8
9 /**
10 **      
11 **/
12 wxMaracasRenderTabbedPanel::wxMaracasRenderTabbedPanel(wxWindow* parent/*, wxMaracasMultipleVolumeRendererManager* _volmanager, wxMaracasSurfaceRenderingManager* _surrendmanager1, wxMaracasSurfaceRenderingManager* _surrendmanager2, 
13                                                                           wxMaracasSurfaceRenderingManager* _surrendmanager3, wxString pathfile, wxString filename*/)
14 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize)
15 {
16         //_propid = propid;
17         volmanager = new wxMaracasMultipleVolumeRendererManager();
18         surrendmanager1 = new wxMaracasSurfaceRenderingManager();
19         surrendmanager2 = new wxMaracasSurfaceRenderingManager();
20         surrendmanager3 = new wxMaracasSurfaceRenderingManager();
21
22 }
23
24 /**
25 **
26 **/
27 void wxMaracasRenderTabbedPanel::createControls(wxString pathfile, wxString filename)
28 {
29         //wxPanel* up = new wxPanel(this, wxID_ANY);
30         wxFlexGridSizer* sizerrenderprop = new wxFlexGridSizer(1);
31         
32         //wxString choices[2];
33         //choices[0] = wxString(_T("On"));
34         //choices[1] = wxString(_T("Off"));
35         wxFlexGridSizer* sizercheck = new wxFlexGridSizer(2);
36         checkboxVol = new  wxCheckBox(this,-1,wxString(_T("Volume Rendering")));
37         Connect(checkboxVol->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxVChange);   
38         checkboxVol->SetValue(true);    
39         sizercheck->Add(checkboxVol, wxFIXED_MINSIZE);
40
41         //wxString choices[2];
42         //choices[0] = wxString(_T("On"));
43         //choices[1] = wxString(_T("Off"));
44         checkboxSA = new  wxCheckBox(this,-1,wxString(_T("Surface Rendering A")));
45         Connect(checkboxSA->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSAChange);   
46         checkboxSA->SetValue(true);     
47
48         sizercheck->Add(checkboxSA, wxFIXED_MINSIZE);
49
50         //wxString choices[2];
51         //choices[0] = wxString(_T("On"));
52         //choices[1] = wxString(_T("Off"));
53         checkboxSB = new  wxCheckBox(this,-1,wxString(_T("Surface Rendering B")));
54         Connect(checkboxSB->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSBChange);   
55         checkboxSB->SetValue(true);     
56
57         sizercheck->Add(checkboxSB, wxFIXED_MINSIZE);
58
59         //wxString choices[2];
60         //choices[0] = wxString(_T("On"));
61         //choices[1] = wxString(_T("Off"));
62         checkboxSC = new  wxCheckBox(this,-1,wxString(_T("Surface Rendering C")));
63         Connect(checkboxSC->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSCChange);   
64         checkboxSC->SetValue(true);     
65
66         sizercheck->Add(checkboxSC, wxFIXED_MINSIZE);
67         sizerrenderprop->Add(sizercheck, wxFIXED_MINSIZE);
68         //up->SetSizer(sizerup, true);          
69         //up->SetAutoLayout( true );
70
71         wxtabs = new wxNotebook(this, -1);
72
73         std::string s = std::string(pathfile.mb_str());
74         vtkImageData* img1 = volmanager->getImageData(s);
75         vtkImageData* img2 = surrendmanager1->getImageData(s);
76         vtkImageData* img3 = surrendmanager2->getImageData(s);
77         vtkImageData* img4 = surrendmanager3->getImageData(s);
78         if(img1!=NULL)
79         {
80
81                 s = std::string(filename.mb_str());
82                 addVolume(img1, s);
83                 addSurface1(img2, s);
84                 addSurface2(img3, s);
85                 addSurface3(img4, s);   
86                 wxtabs->Refresh();
87         }
88
89         //wxFlexGridSizer* sizerrenderprop = new wxFlexGridSizer(2,1,5);
90         //sizerrenderprop->Add(up, wxFIXED_MINSIZE);
91         
92         sizerrenderprop->Add(wxtabs, wxFIXED_MINSIZE);
93
94         this->SetSizer(sizerrenderprop, true);          
95         this->SetAutoLayout( true );
96
97 }
98
99 wxMaracasRenderTabbedPanel::~wxMaracasRenderTabbedPanel()
100 {       
101         //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorV(_propid, false);
102         //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSA(_propid, false);
103         //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSB(_propid, false);
104         //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSC(_propid, false);
105         //wxMaracasRenderTabbedPanel::getInstance()->deleteVolume(_propid);
106         delete wxtabs;  
107 }
108
109 void wxMaracasRenderTabbedPanel::setRenderer(vtkRenderer* renderer)
110 {
111         volmanager->setRenderer(renderer);
112         surrendmanager1->setRenderer(renderer);
113         surrendmanager2->setRenderer(renderer);
114         surrendmanager3->setRenderer(renderer);
115 }
116
117 /*
118 *
119 */
120 void wxMaracasRenderTabbedPanel::addVolume(vtkImageData* img, std::string dataname)
121 {
122         try
123         {
124                 int _propidV = volmanager->addVolume(img, dataname);
125                 if(_propidV!=-1)
126                 {
127                         controlpanV = new wxMaracasMultipleVolumeRendererPanel(wxtabs, _propidV, img, true);
128                         wxtabs->AddPage(controlpanV, _T("Volume Rendering"), true);
129                         updateVolume();
130                 }
131         }
132         catch(char* str)
133         {
134                 std::cout << "Exception : " << str << '\n';
135                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
136                 diag->ShowModal();
137         }
138 }
139
140 void wxMaracasRenderTabbedPanel::addSurface1(vtkImageData* img, std::string dataname)
141 {
142         try
143         {
144                 int _propidSA = surrendmanager1->addPropMHD(img, dataname);
145                 
146                 if(_propidSA!=-1)
147                 {
148                         controlpanSA = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, _propidSA, true, 1);
149                         int maxiso = surrendmanager1->getMaxIsoValue(_propidSA);
150                         ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSA)->createControls(maxiso);
151                         wxtabs->AddPage(controlpanSA, _T("Surf Rendering A"));
152                 }
153         }
154         catch(char* str)
155         {
156                 std::cout << "Exception : " << str << '\n';
157                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
158                 diag->ShowModal();
159         }
160 }
161
162 void wxMaracasRenderTabbedPanel::addSurface2(vtkImageData* img, std::string dataname)
163 {
164         try
165         {
166                 int _propidSB = surrendmanager2->addPropMHD(img, dataname);
167                 if(_propidSB!=-1)
168                 {
169                         controlpanSB = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, _propidSB, true, 2);
170                         int maxiso = surrendmanager2->getMaxIsoValue(_propidSB);
171                         ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSB)->createControls(maxiso);
172                         wxtabs->AddPage(controlpanSB, _T("Surf Rendering B"));
173
174                 }
175         }
176         catch(char* str)
177         {
178                 std::cout << "Exception : " << str << '\n';
179                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
180                 diag->ShowModal();
181         }
182 }
183
184 void wxMaracasRenderTabbedPanel::addSurface3(vtkImageData* img, std::string dataname)
185 {
186         try
187         {
188                 _propidSC = surrendmanager3->addPropMHD(img, dataname);
189
190                 if(_propidSC!=-1)
191                 {
192                         controlpanSC = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, _propidSC, true, 3);
193                         int maxiso = surrendmanager3->getMaxIsoValue(_propidSC);
194                         ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSC)->createControls(maxiso);
195                         wxtabs->AddPage(controlpanSC, _T("Surf Rendering C"));
196                 }
197         }
198         catch(char* str)
199         {
200                 std::cout << "Exception : " << str << '\n';
201                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
202                 diag->ShowModal();
203         }
204 }
205
206 /**
207 ** Deletes complete volume
208 **/
209 void wxMaracasRenderTabbedPanel::deleteVolume(int volid)
210 {
211         volmanager->deleteActor(volid);
212         surrendmanager1->deleteActor(volid);
213         surrendmanager2->deleteActor(volid);
214         surrendmanager3->deleteActor(volid);
215 }
216
217 /**
218 ** Adds or removes volume rendering actor with given ID
219 **/
220 void wxMaracasRenderTabbedPanel::addRemoveActorV(int id, bool addremove)
221 {
222         volmanager->addRemoveActor(id, addremove);
223 }
224
225 /**
226 ** Adds or removes surface rendering actor with given ID
227 **/
228 void wxMaracasRenderTabbedPanel::addRemoveActorSA(int id, bool addremove)
229 {
230         surrendmanager1->addRemoveActor(id, addremove);
231 }
232
233 /**
234 ** Adds or removes surface rendering actor with given ID
235 **/
236 void wxMaracasRenderTabbedPanel::addRemoveActorSB(int id, bool addremove)
237 {
238         surrendmanager2->addRemoveActor(id, addremove);
239 }
240
241 /**
242 ** Adds or removes surface rendering actor with given ID
243 **/
244 void wxMaracasRenderTabbedPanel::addRemoveActorSC(int id, bool addremove)
245 {       
246         surrendmanager3->addRemoveActor(id, addremove);
247 }       
248
249 /**
250 ** Sets color points values for the given volume rendering identified by parameter: volumeid
251 **/
252 void wxMaracasRenderTabbedPanel::SetValuesColorPointsFunction(int volid, std::vector<double> greylevelcolors,std::vector<double> red,std::vector<double> green,std::vector<double> blue)
253 {
254         volmanager->setVolumeColor(volid, greylevelcolors, red, green, blue);
255 }
256
257 /**
258 ** Sets points values for the given volume rendering identified by parameter: volumeid
259 **/
260 void wxMaracasRenderTabbedPanel::SetValuesPointsFunction(int volid, std::vector<double> greylevel, std::vector<double> values)
261 {
262         volmanager->setVolumeOpacity(volid, greylevel, values);
263 }
264
265 /**
266 ** Returns transfer function for the given volume rendering identified by parameter: volumeid
267 **/
268 vtkPiecewiseFunction* wxMaracasRenderTabbedPanel::GetTransferFunction(int volumeid)
269 {
270         return volmanager->GetTransferFunction(volumeid);
271 }
272
273 /**
274 ** Returns color function for the given volume rendering identified by parameter: volumeid
275 **/
276 vtkColorTransferFunction* wxMaracasRenderTabbedPanel::GetColorFunction(int volumeid)
277 {
278     return volmanager->GetColorFunction(volumeid);
279 }
280
281 /**
282 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
283 **/
284 void wxMaracasRenderTabbedPanel::changeOpacityA(int _propid, int value)
285 {
286         surrendmanager1->changeOpacity(_propid,value);
287 }
288
289 /**
290 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
291 **/
292 void wxMaracasRenderTabbedPanel::changeIsoValueA(int propid, double value)
293 {
294         surrendmanager1->changeIsoValue(propid, value);
295 }
296
297 /**
298 ** Changes color for the given surface rendering image identified by parameter: propid
299 **/
300 void wxMaracasRenderTabbedPanel::changeColorA(int propid, double red, double green, double blue)
301 {
302         try
303         {
304                 surrendmanager1->changeColor(propid, red, green, blue);
305         }
306         catch(char* str)
307         {
308                 wxString s( str,wxConvUTF8 );
309                 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
310                 diag->ShowModal();
311                 delete diag;
312         }
313 }
314
315 /**
316 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
317 **/
318 void wxMaracasRenderTabbedPanel::changeOpacityB(int _propid, int value)
319 {
320         surrendmanager2->changeOpacity(_propid,value);
321 }
322
323 /**
324 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
325 **/
326 void wxMaracasRenderTabbedPanel::changeIsoValueB(int propid, double value)
327 {
328         surrendmanager2->changeIsoValue(propid, value);
329 }
330
331 /**
332 ** Changes color for the given surface rendering image identified by parameter: propid
333 **/
334 void wxMaracasRenderTabbedPanel::changeColorB(int propid, double red, double green, double blue)
335 {
336         try
337         {
338                 surrendmanager2->changeColor(propid, red, green, blue);
339         }
340         catch(char* str)
341         {
342                 wxString s( str,wxConvUTF8 );
343                 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
344                 diag->ShowModal();
345                 delete diag;
346         }
347 }
348
349 /**
350 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
351 **/
352 void wxMaracasRenderTabbedPanel::changeOpacityC(int _propid, int value)
353 {
354         surrendmanager3->changeOpacity(_propid,value);
355 }
356
357 /**
358 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
359 **/
360 void wxMaracasRenderTabbedPanel::changeIsoValueC(int propid, double value)
361 {
362         surrendmanager3->changeIsoValue(propid, value);
363 }
364
365 /**
366 ** Changes color for the given surface rendering image identified by parameter: propid
367 **/
368 void wxMaracasRenderTabbedPanel::changeColorC(int propid, double red, double green, double blue)
369 {
370         try
371         {
372                 surrendmanager3->changeColor(propid, red, green, blue);
373         }
374         catch(char* str)
375         {
376                 wxString s( str,wxConvUTF8 );
377                 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
378                 diag->ShowModal();
379                 delete diag;
380         }
381 }
382
383 /**
384 ** 
385 **/
386 void wxMaracasRenderTabbedPanel::onUpdate(wxCommandEvent& event)
387 {
388         updateVolume();    
389 }
390
391 /**
392 ** 
393 **/
394 void wxMaracasRenderTabbedPanel::updateVolume()
395 {
396         /*Temporarily disabled*/
397
398         std::vector<double> greylevelcolors;
399         std::vector<double> red;
400         std::vector<double> green;
401         std::vector<double> blue;
402
403         std::vector<double> greylevel;
404         std::vector<double> values;
405
406     HistogramDialogComboBox* histo = controlpanV->getMwxwidget();
407         histo->GetValuesColorPointsFunction(greylevelcolors, red, green, blue);
408         histo->GetValuesPointsFunction(greylevel, values);
409
410
411         volmanager->setVolumeColor(controlpanV->getPropId(), greylevelcolors, red, green, blue);
412         volmanager->setVolumeOpacity(controlpanV->getPropId(), greylevel, values);
413         //wxMaracasMultipleVolumeRendererView::getInstance()->SetValuesColorPointsFunction(this->_propid, greylevelcolors, red, green, blue);
414         //wxMaracasMultipleVolumeRendererView::getInstance()->SetValuesPointsFunction(this->_propid, greylevel, values);
415
416 }
417
418 /**
419 **
420 **/
421 void wxMaracasRenderTabbedPanel::onColorChange(wxCommandEvent& event)
422 {       
423         /*Temporarily disabled*/
424
425         //if(mwxwidget->ShowModal()==wxID_OK){
426         //updateVolume();
427         //      mwxwidget->Show(false);
428         //}     
429 }
430
431 /**
432 ** 
433 **/
434 void wxMaracasRenderTabbedPanel::onViewImage(wxCommandEvent& event)
435 {
436         
437 }
438
439 /**
440 ** Method called when VolumeRendering checkbox status changes: Either shows or hides VolumeRendering image
441 **/
442 void wxMaracasRenderTabbedPanel::onCheckBoxVChange(wxCommandEvent& event)
443 {
444         volmanager->addRemoveActor(this->getPropIdV(), checkboxVol->GetValue());        
445 }
446
447 /**
448 ** Method called when SurfaceRendering A checkbox status changes: Either shows or hides SurfaceRendering image
449 **/
450 void wxMaracasRenderTabbedPanel::onCheckBoxSAChange(wxCommandEvent& event)
451 {       
452         surrendmanager1->addRemoveActor(this->getPropIdSA(), checkboxSA->GetValue());   
453 }
454
455 /**
456 ** Method called when SurfaceRendering B checkbox status changes: Either shows or hides SurfaceRendering B image
457 **/
458 void wxMaracasRenderTabbedPanel::onCheckBoxSBChange(wxCommandEvent& event)
459 {       
460         surrendmanager2->addRemoveActor(this->getPropIdSB(), checkboxSB->GetValue());   
461 }
462
463 /**
464 ** Method called when SurfaceRendering C checkbox status changes: Either shows or hides SurfaceRendering C image
465 **/
466 void wxMaracasRenderTabbedPanel::onCheckBoxSCChange(wxCommandEvent& event)
467 {       
468         surrendmanager3->addRemoveActor(this->getPropIdSC(), checkboxSC->GetValue());   
469 }
470
471 /**
472 **
473 **/
474 int wxMaracasRenderTabbedPanel::getPropIdV()
475 {
476         return _propidV;
477 }
478
479 /**
480 **
481 **/
482 int wxMaracasRenderTabbedPanel::getPropIdSA()
483 {
484         return _propidSA;
485 }
486
487 /**
488 **
489 **/
490 int wxMaracasRenderTabbedPanel::getPropIdSB()
491 {
492         return _propidSB;
493 }
494
495 /**
496 **
497 **/
498 int wxMaracasRenderTabbedPanel::getPropIdSC()
499 {
500         return _propidSC;
501 }