]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasRenderTabbedPanel.cpp
*** empty log message ***
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracasRenderTabbedPanel.cpp
1 #include "wxMaracasRenderTabbedPanel.h"
2 #include "HistogramDialogComboBox.h"
3
4 #include "wxMaracasMultipleVolumeRendererPanel.h"
5 #include "wxMaracasSurfaceRenderingPanel.h"
6 #include "wxMaracasSurfaceRenderingProp3DMHD.h"
7 #include "wxMaracasMultipleVolumeRendererManagerData.h"
8
9 #include <wx/colordlg.h>
10 #include <wx/button.h> 
11
12 #include <OpenImage.xpm>
13 #include "Color.xpm"
14
15 #include <vtkProp3D.h>
16
17 /**
18 ** Class constructor
19 **/
20 wxMaracasRenderTabbedPanel::wxMaracasRenderTabbedPanel(wxWindow* parent, int id)
21 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize)
22 {
23         _id = id;
24
25         dialog = NULL;
26
27         volmanager = new wxMaracasMultipleVolumeRendererManager();
28         surrendmanager1 = new wxMaracasSurfaceRenderingManager();
29         surrendmanager2 = new wxMaracasSurfaceRenderingManager();
30         surrendmanager3 = new wxMaracasSurfaceRenderingManager();
31 }
32
33 /**
34 ** Class Destructor
35 **/
36 wxMaracasRenderTabbedPanel::~wxMaracasRenderTabbedPanel()
37 {       
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);
43         delete wxtabs;  
44 }
45
46 /**
47 ** Initializes rendered images, and creates and adds elements to the panel
48 **/
49 void wxMaracasRenderTabbedPanel::createControls(vtkImageData* inImg, std::string pathfile, std::string filename)
50 {
51         wxFlexGridSizer* sizerrenderprop = new wxFlexGridSizer(1);
52
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);
58
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);   
63
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);
68
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);
73
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);
77
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);
82
83         wxtabs = new wxNotebook(this, -1);
84
85         if(inImg == NULL)
86         {
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*/)
92                 {
93                         addVolume(img, filename);
94                         addSurface1(img, filename);
95                         addSurface2(img, filename);
96                         addSurface3(img, filename);     
97                         volname = (wxString) filename;
98                         wxtabs->Refresh();
99                 }
100         }       
101         else
102         {
103                 addVolume(inImg, filename);
104                 addSurface1(inImg, filename);
105                 addSurface2(inImg, filename);
106                 addSurface3(inImg, filename);   
107                 wxtabs->Refresh();
108         }
109
110         sizerrenderprop->Add(wxtabs, wxSizerFlags().Expand().Center());
111
112         this->SetSizer(sizerrenderprop, true);          
113         this->SetAutoLayout( true );
114 }
115
116
117 /**
118 ** Sets given renderer
119 **/
120 void wxMaracasRenderTabbedPanel::setRenderer(vtkRenderer* renderer)
121 {
122         volmanager->setRenderer(renderer);
123         surrendmanager1->setRenderer(renderer);
124         surrendmanager2->setRenderer(renderer);
125         surrendmanager3->setRenderer(renderer);
126 }
127
128 /**
129 ** Adds a volume using Volume Rendering
130 **/
131 void wxMaracasRenderTabbedPanel::addVolume(vtkImageData* img, std::string dataname)
132 {
133         try
134         {
135                 int _propidV = volmanager->addVolume(_id, img, dataname);
136                 if(_propidV!=-1)
137                 {
138                         wxMaracasMultipleVolumeRendererPanel* controlpanV = new wxMaracasMultipleVolumeRendererPanel(wxtabs, _propidV, img, true);
139                         wxtabs->AddPage(controlpanV, _T("Vol Rendering"), true);
140                         controlpanV->updateVolume();
141                 }
142         }
143         catch(char* str)
144         {
145                 std::cout << "Exception : " << str << '\n';
146                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
147                 diag->ShowModal();
148                 delete diag;
149         }
150 }
151
152 /**
153 ** Adds a volume using surface rendering
154 **/
155 void wxMaracasRenderTabbedPanel::addSurface1(vtkImageData* img, std::string dataname)
156 {
157         try
158         {
159                 int _propidSA = surrendmanager1->addPropMHD(_id, img, dataname);
160                 
161                 if(_propidSA!=-1)
162                 {
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"));
167                 }
168         }
169         catch(char* str)
170         {
171                 std::cout << "Exception : " << str << '\n';
172                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
173                 diag->ShowModal();
174                 delete diag;
175         }
176 }
177
178 /**
179 ** Adds a volume using surface rendering
180 **/
181 void wxMaracasRenderTabbedPanel::addSurface2(vtkImageData* img, std::string dataname)
182 {
183         try
184         {
185                 int _propidSB = surrendmanager2->addPropMHD(_id, img, dataname);
186                 if(_propidSB!=-1)
187                 {
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"));
192
193                 }
194         }
195         catch(char* str)
196         {
197                 std::cout << "Exception : " << str << '\n';
198                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
199                 diag->ShowModal();
200                 delete diag;
201         }
202 }
203
204 /**
205 ** Adds a volume using Surface Rendering
206 **/
207 void wxMaracasRenderTabbedPanel::addSurface3(vtkImageData* img, std::string dataname)
208 {
209         try
210         {
211                 int _propidSC = surrendmanager3->addPropMHD(_id, img, dataname);
212
213                 if(_propidSC!=-1)
214                 {
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"));
219                 }
220         }
221         catch(char* str)
222         {
223                 std::cout << "Exception : " << str << '\n';
224                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
225                 diag->ShowModal();
226                 delete diag;
227         }
228 }
229
230 /**
231 ** Deletes complete volume
232 **/
233 void wxMaracasRenderTabbedPanel::deleteVolume(int volid)
234 {
235         try
236         {
237                 volmanager->deleteActor(volid);
238                 surrendmanager1->deleteActor(volid);
239                 surrendmanager2->deleteActor(volid);
240                 surrendmanager3->deleteActor(volid);
241         }
242         catch(char* str)
243         {
244                 std::cout << "Exception : " << str << '\n';
245                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
246                 diag->ShowModal();
247                 delete diag;
248         }
249 }
250
251 /**
252 ** Adds or removes volume rendering actor with given ID
253 **/
254 void wxMaracasRenderTabbedPanel::addRemoveActorV(int id, bool addremove)
255 {
256         try{
257                 volmanager->addRemoveActor(id, addremove);
258         }
259         catch(char* str){
260                 std::cout << "Exception : " << str << '\n';
261                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
262                 diag->ShowModal();
263                 delete diag;
264         }
265 }
266
267 /**
268 ** Adds or removes surface rendering actor with given ID
269 **/
270 void wxMaracasRenderTabbedPanel::addRemoveActorSA(int id, bool addremove)
271 {
272         try{
273                 surrendmanager1->addRemoveActor(id, addremove);
274         }
275         catch(char* str){
276                 std::cout << "Exception : " << str << '\n';
277                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
278                 diag->ShowModal();
279                 delete diag;
280         }
281 }
282
283 /**
284 ** Adds or removes surface rendering actor with given ID
285 **/
286 void wxMaracasRenderTabbedPanel::addRemoveActorSB(int id, bool addremove)
287 {
288         try{
289                 surrendmanager2->addRemoveActor(id, addremove);
290         }
291         catch(char* str){
292                 std::cout << "Exception : " << str << '\n';
293                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
294                 diag->ShowModal();
295                 delete diag;
296         }
297 }
298
299 /**
300 ** Adds or removes surface rendering actor with given ID
301 **/
302 void wxMaracasRenderTabbedPanel::addRemoveActorSC(int id, bool addremove)
303 {       
304         try{
305                 surrendmanager3->addRemoveActor(id, addremove);
306         }
307         catch(char* str){
308                 std::cout << "Exception : " << str << '\n';
309                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
310                 diag->ShowModal();
311                 delete diag;
312         }
313 }       
314
315 /**
316 ** Sets color points values for the given volume rendering identified by parameter: volumeid
317 **/
318 void wxMaracasRenderTabbedPanel::SetValuesColorPointsFunction(int volid, std::vector<double> greylevelcolors,std::vector<double> red,std::vector<double> green,std::vector<double> blue)
319 {
320         volmanager->setVolumeColor(volid, greylevelcolors, red, green, blue);
321 }
322
323 /**
324 ** Sets points values for the given volume rendering identified by parameter: volumeid
325 **/
326 void wxMaracasRenderTabbedPanel::SetValuesPointsFunction(int volid, std::vector<double> greylevel, std::vector<double> values)
327 {
328         try{
329                 volmanager->setVolumeOpacity(volid, greylevel, values);
330         }
331         catch(char* str)
332         {
333                 wxString s( str,wxConvUTF8 );
334                 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
335                 diag->ShowModal();
336                 delete diag;
337         }
338         
339 }
340
341 /**
342 ** Returns transfer function for the given volume rendering identified by parameter: volumeid
343 **/
344 vtkPiecewiseFunction* wxMaracasRenderTabbedPanel::GetTransferFunction(int volumeid)
345 {
346         return volmanager->GetTransferFunction(volumeid);
347 }
348
349 /**
350 ** Returns color function for the given volume rendering identified by parameter: volumeid
351 **/
352 vtkColorTransferFunction* wxMaracasRenderTabbedPanel::GetColorFunction(int volumeid)
353 {
354     return volmanager->GetColorFunction(volumeid);
355 }
356
357 /**
358 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
359 **/
360 void wxMaracasRenderTabbedPanel::changeOpacityA(int _propid, int value)
361 {
362         surrendmanager1->changeOpacity(_propid,value);
363 }
364
365 /**
366 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
367 **/
368 void wxMaracasRenderTabbedPanel::changeIsoValueA(int propid, double value)
369 {
370         surrendmanager1->changeIsoValue(propid, value);
371 }
372
373 /**
374 ** Changes color for the given surface rendering image identified by parameter: propid
375 **/
376 void wxMaracasRenderTabbedPanel::changeColorA(int propid, double red, double green, double blue)
377 {
378         try
379         {
380                 surrendmanager1->changeColor(propid, red, green, blue);
381         }
382         catch(char* str)
383         {
384                 wxString s( str,wxConvUTF8 );
385                 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
386                 diag->ShowModal();
387                 delete diag;
388         }
389 }
390
391 /**
392 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
393 **/
394 void wxMaracasRenderTabbedPanel::changeOpacityB(int _propid, int value)
395 {
396         surrendmanager2->changeOpacity(_propid,value);
397 }
398
399 /**
400 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
401 **/
402 void wxMaracasRenderTabbedPanel::changeIsoValueB(int propid, double value)
403 {
404         surrendmanager2->changeIsoValue(propid, value);
405 }
406
407 /**
408 ** Changes color for the given surface rendering image identified by parameter: propid
409 **/
410 void wxMaracasRenderTabbedPanel::changeColorB(int propid, double red, double green, double blue)
411 {
412         try
413         {
414                 surrendmanager2->changeColor(propid, red, green, blue);
415         }
416         catch(char* str)
417         {
418                 wxString s( str,wxConvUTF8 );
419                 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
420                 diag->ShowModal();
421                 delete diag;
422         }
423 }
424
425 /**
426 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
427 **/
428 void wxMaracasRenderTabbedPanel::changeOpacityC(int _propid, int value)
429 {
430         surrendmanager3->changeOpacity(_propid,value);
431 }
432
433 /**
434 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
435 **/
436 void wxMaracasRenderTabbedPanel::changeIsoValueC(int propid, double value)
437 {
438         surrendmanager3->changeIsoValue(propid, value);
439 }
440
441 /**
442 ** Changes color for the given surface rendering image identified by parameter: propid
443 **/
444 void wxMaracasRenderTabbedPanel::changeColorC(int propid, double red, double green, double blue)
445 {
446         try
447         {
448                 surrendmanager3->changeColor(propid, red, green, blue);
449         }
450         catch(char* str)
451         {
452                 wxString s( str,wxConvUTF8 );
453                 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
454                 diag->ShowModal();
455                 delete diag;
456         }
457 }
458
459 /**
460 ** Method called when VolumeRendering checkbox status changes: Either shows or hides VolumeRendering image
461 **/
462 void wxMaracasRenderTabbedPanel::onCheckBoxVChange(wxCommandEvent& event)
463 {
464         try{
465                 volmanager->addRemoveActor(this->getPropIdV(), checkboxVol->GetValue());        
466         }
467         catch(char* str){
468                 std::cout << "Exception : " << str << '\n';
469                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
470                 diag->ShowModal();
471                 delete diag;
472         }
473 }
474
475 /**
476 ** Method called when SurfaceRendering A checkbox status changes: Either shows or hides SurfaceRendering image
477 **/
478 void wxMaracasRenderTabbedPanel::onCheckBoxSAChange(wxCommandEvent& event)
479 {       
480         try{
481                 surrendmanager1->addRemoveActor(this->getPropIdV(), checkboxSA->GetValue());    
482         }
483         catch(char* str){
484                 std::cout << "Exception : " << str << '\n';
485                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
486                 diag->ShowModal();
487                 delete diag;
488         }
489 }
490
491 /**
492 ** Method called when SurfaceRendering B checkbox status changes: Either shows or hides SurfaceRendering B image
493 **/
494 void wxMaracasRenderTabbedPanel::onCheckBoxSBChange(wxCommandEvent& event)
495 {       
496         try{
497                 surrendmanager2->addRemoveActor(this->getPropIdV(), checkboxSB->GetValue());    
498         }
499         catch(char* str){
500                 std::cout << "Exception : " << str << '\n';
501                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
502                 diag->ShowModal();
503                 delete diag;
504         }
505 }
506
507 /**
508 ** Method called when SurfaceRendering C checkbox status changes: Either shows or hides SurfaceRendering C image
509 **/
510 void wxMaracasRenderTabbedPanel::onCheckBoxSCChange(wxCommandEvent& event)
511 {       
512         try{
513                 surrendmanager3->addRemoveActor(this->getPropIdV(), checkboxSC->GetValue());    
514         }
515         catch(char* str){
516                 std::cout << "Exception : " << str << '\n';
517                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
518                 diag->ShowModal();
519                 delete diag;
520         }
521 }
522
523 /**
524 **
525 **/
526 void wxMaracasRenderTabbedPanel::onOpenParameters(wxCommandEvent& event){       
527         if(dialog == NULL)
528         {
529                 dialog = new wxMaracasRenderImageManagementPanel(this, volmanager, surrendmanager1, surrendmanager2, surrendmanager3, volname, _id);
530                 dialog->SetSize(400, 580);
531                 dialog->Show();
532         }
533         else if(dialog != NULL)
534         {
535                 dialog->Show();
536         }
537 }
538
539 /**
540 ** Gets volume rendering image asociated to the given ID
541 **/
542 void wxMaracasRenderTabbedPanel::onColorChange(wxCommandEvent& event)
543 {       
544         /*Temporarily disabled*/
545
546         //if(mwxwidget->ShowModal()==wxID_OK){
547         //updateVolume();
548         //      mwxwidget->Show(false);
549         //}     
550 }
551
552 /**
553 ** 
554 **/
555 vtkImageData* wxMaracasRenderTabbedPanel::getVolImage()
556 {       
557         return volmanager->getImageData();
558 }
559
560 /**
561 ** Gets surface rendering A image asociated to the given ID
562 **/
563 vtkImageData* wxMaracasRenderTabbedPanel::getSurfAImage()
564 {       
565         return surrendmanager1->getImageData();
566 }
567
568 /**
569 ** Gets surface rendering B image asociated to the given ID
570 **/
571 vtkImageData* wxMaracasRenderTabbedPanel::getSurfBImage()
572 {       
573         return surrendmanager2->getImageData();
574 }
575
576 /**
577 ** Gets surface rendering C image asociated to the given ID
578 **/
579 vtkImageData* wxMaracasRenderTabbedPanel::getSurfCImage()
580 {       
581         return surrendmanager3->getImageData();
582 }
583
584 /**
585 **
586 **/
587 void wxMaracasRenderTabbedPanel::onOpenCutter(wxCommandEvent& event)
588 {       
589         
590 }
591
592 /**
593 **
594 **/
595 int wxMaracasRenderTabbedPanel::getPropIdV()
596 {
597         return _id;
598 }