]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasRenderTabbedPanel.cpp
414d660457c238c15199755903562a620d53f2c9
[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 #include "wxMaracasDialog_NViewers.h"
9
10 #include <wx/colordlg.h>
11 #include <wx/button.h> 
12
13 #include <OpenImage.xpm>
14 #include "Color.xpm"
15 #include "creaSystem.h"
16
17 #include <vtkProp3D.h>
18 #include "wxVtkMPR3DViewCntrlPanel.h"
19
20 /**
21 ** Class constructor
22 **/
23 wxMaracasRenderTabbedPanel::wxMaracasRenderTabbedPanel(wxWindow* parent, int id, wxVtk3DBaseView* _baseView)
24 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize)
25 {
26         _id = id;
27         baseView = _baseView;
28         dialog = NULL;
29
30         volmanager = new wxMaracasMultipleVolumeRendererManager();
31         surrendmanager1 = new wxMaracasSurfaceRenderingManager();
32         surrendmanager2 = new wxMaracasSurfaceRenderingManager();
33         surrendmanager3 = new wxMaracasSurfaceRenderingManager();
34 }
35
36 /**
37 ** Class Destructor
38 **/
39 wxMaracasRenderTabbedPanel::~wxMaracasRenderTabbedPanel()
40 {       
41         //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorV(_propid, false);
42         //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSA(_propid, false);
43         //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSB(_propid, false);
44         //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSC(_propid, false);
45         this->deleteVolume(_id);
46         delete dialog;
47         delete wxtabs;  
48 }
49
50 /**
51 ** Initializes rendered images, and creates and adds elements to the panel
52 **/
53 void wxMaracasRenderTabbedPanel::createControls(vtkImageData* inImg, std::string pathfile, std::string filename)
54 {
55         wxFlexGridSizer* sizerrenderprop = new wxFlexGridSizer(1);
56
57         wxFlexGridSizer* sizercheck = new wxFlexGridSizer(3);
58         checkboxVol = new  wxCheckBox(this,-1,wxString(_T("Volume Rendering")));
59         Connect(checkboxVol->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxVChange);   
60         checkboxVol->SetValue(true);    
61         sizercheck->Add(checkboxVol, wxFIXED_MINSIZE);
62
63         checkboxSA = new  wxCheckBox(this,-1,wxString(_T("Surface Rendering A")));
64         Connect(checkboxSA->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSAChange);   
65         checkboxSA->SetValue(true);     
66         sizercheck->Add(checkboxSA, wxFIXED_MINSIZE);   
67
68         checkboxViewer = new  wxCheckBox(this,-1,wxString(_T("MPR")));
69         Connect(checkboxViewer->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onMPROptions);     
70         checkboxViewer->SetValue(false);
71         sizercheck->Add(checkboxViewer, wxFIXED_MINSIZE);
72
73         checkboxSB = new  wxCheckBox(this,-1,wxString(_T("Surface Rendering B")));
74         Connect(checkboxSB->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSBChange);   
75         checkboxSB->SetValue(false);    
76         sizercheck->Add(checkboxSB, wxFIXED_MINSIZE);
77
78         checkboxSC = new  wxCheckBox(this,-1,wxString(_T("Surface Rendering C")));
79         Connect(checkboxSC->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSCChange);   
80         checkboxSC->SetValue(false);    
81         sizercheck->Add(checkboxSC, wxFIXED_MINSIZE);
82         
83         sizercheck->Add(new wxStaticText(this, -1,_T("")), wxFIXED_MINSIZE);
84
85         wxButton* _openParameters = new wxButton(this, -1, wxString(_T("Apply Transformation")));       
86         Connect(_openParameters->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onOpenParameters);                  
87         sizercheck->Add(_openParameters,wxFIXED_MINSIZE);
88
89         wxButton* _openCutter = new wxButton(this, -1, wxString(_T("Open Cutter View")));       
90         Connect(_openCutter->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onOpenCutter);                  
91         sizercheck->Add(_openCutter,wxFIXED_MINSIZE);
92         sizerrenderprop->Add(sizercheck, wxFIXED_MINSIZE);
93
94         wxtabs = new wxNotebook(this, -1);
95
96         if(inImg == NULL)
97         {
98                 vtkImageData* img = volmanager->getImageData(pathfile);
99                 //vtkImageData* img1 = surrendmanager1->getImageData(pathfile);
100                 //vtkImageData* img2 = surrendmanager2->getImageData(pathfile);
101                 //vtkImageData* img3 = surrendmanager3->getImageData(pathfile);
102                 if(img!=NULL /*&& img1!=NULL && img2!=NULL && img3!=NULL*/)
103                 {
104                         addVolume(img, filename);
105                         addSurface1(img, filename);
106                         addSurface2(img, filename);
107                         addSurface3(img, filename);     
108                         addMPROptions();
109                         volname = (wxString) filename;
110                         wxtabs->Refresh();
111                 }
112         }       
113         else
114         {
115                 addVolume(inImg, filename);
116                 addSurface1(inImg, filename);
117                 addSurface2(inImg, filename);
118                 addSurface3(inImg, filename);   
119                 wxtabs->Refresh();
120         }
121
122         sizerrenderprop->Add(wxtabs, wxSizerFlags().Expand().Center());
123
124         this->SetSizer(sizerrenderprop, true);          
125         this->SetAutoLayout( true );
126 }
127
128
129 /**
130 ** Sets given renderer
131 **/
132 void wxMaracasRenderTabbedPanel::setRenderer(vtkRenderer* renderer)
133 {
134         volmanager->setRenderer(renderer);
135         surrendmanager1->setRenderer(renderer);
136         surrendmanager2->setRenderer(renderer);
137         surrendmanager3->setRenderer(renderer);
138 }
139
140 /**
141 ** Adds a volume using Volume Rendering
142 **/
143 void wxMaracasRenderTabbedPanel::addVolume(vtkImageData* img, std::string dataname)
144 {
145         try
146         {
147                 int _propidV = volmanager->addVolume(_id, img, dataname);
148                 if(_propidV!=-1)
149                 {
150                         wxMaracasMultipleVolumeRendererPanel* controlpanV = new wxMaracasMultipleVolumeRendererPanel(wxtabs, _propidV, img, true);
151                         wxtabs->AddPage(controlpanV, _T("Vol Rendering"), true);
152                         controlpanV->updateVolume();
153                 }
154         }
155         catch(char* str)
156         {
157                 std::cout << "Exception : " << str << '\n';
158                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
159                 diag->ShowModal();
160                 delete diag;
161         }
162 }
163
164 /**
165 ** Adds a volume using surface rendering
166 **/
167 void wxMaracasRenderTabbedPanel::addSurface1(vtkImageData* img, std::string dataname)
168 {
169         try
170         {
171                 int _propidSA = surrendmanager1->addPropMHD(_id, img, dataname);
172                 
173                 if(_propidSA!=-1)
174                 {
175                         wxMaracasSurfaceRenderingPanel* controlpanSA = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, _propidSA, true, 1);
176                         int maxiso = surrendmanager1->getMaxIsoValue(_propidSA);
177                         ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSA)->createControls(maxiso);
178                         wxtabs->AddPage(controlpanSA, _T("SR A"));
179                 }
180         }
181         catch(char* str)
182         {
183                 std::cout << "Exception : " << str << '\n';
184                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
185                 diag->ShowModal();
186                 delete diag;
187         }
188 }
189
190 /**
191 ** Adds a volume using surface rendering
192 **/
193 void wxMaracasRenderTabbedPanel::addSurface2(vtkImageData* img, std::string dataname)
194 {
195         try
196         {
197                 int _propidSB = surrendmanager2->addPropMHD(_id, img, dataname);
198                 if(_propidSB!=-1)
199                 {
200                         wxMaracasSurfaceRenderingPanel* controlpanSB = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, _propidSB, true, 2);
201                         int maxiso = surrendmanager2->getMaxIsoValue(_propidSB);
202                         ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSB)->createControls(maxiso);
203                         wxtabs->AddPage(controlpanSB, _T("SR B"));
204                         wxtabs->GetPage(2)->Disable();
205
206                 }
207         }
208         catch(char* str)
209         {
210                 std::cout << "Exception : " << str << '\n';
211                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
212                 diag->ShowModal();
213                 delete diag;
214         }
215 }
216
217 /**
218 ** Adds a volume using Surface Rendering
219 **/
220 void wxMaracasRenderTabbedPanel::addSurface3(vtkImageData* img, std::string dataname)
221 {
222         try
223         {
224                 int _propidSC = surrendmanager3->addPropMHD(_id, img, dataname);
225
226                 if(_propidSC!=-1)
227                 {
228                         wxMaracasSurfaceRenderingPanel* controlpanSC = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, _propidSC, true, 3);
229                         int maxiso = surrendmanager3->getMaxIsoValue(_propidSC);
230                         ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSC)->createControls(maxiso);
231                         wxtabs->AddPage(controlpanSC, _T("SR C"));
232                         wxtabs->GetPage(3)->Disable();
233                 }
234         }
235         catch(char* str)
236         {
237                 std::cout << "Exception : " << str << '\n';
238                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
239                 diag->ShowModal();
240                 delete diag;
241         }
242 }
243
244 /**
245 **
246 **/
247 void wxMaracasRenderTabbedPanel::addMPROptions()
248 {
249         int x = 0,y = 0,z = 0;
250         int ext[6];
251         ext[0] = 0;
252         ext[1] = 0;
253         ext[2] = 0;
254         ext[3] = 0;
255         ext[4] = 0;
256         ext[5] = 0;
257
258         double org[3],spc[3];
259         org[0] = 0;
260         org[1] = 0;
261         org[2] = 0;
262         spc[0] = 0;
263         spc[1] = 0;
264         spc[2] = 0;
265
266         vtkMPRBaseData* mvtkmprbasedata = new vtkMPRBaseData(); 
267         marImageData* marimagedata              = new marImageData( getVolImage() );                    
268         mvtkmprbasedata->SetMarImageData(marimagedata);
269         
270         mwxvtkmpr3Dview                                 = new wxVtkMPR3DView( baseView );
271
272         vtkmpr3Ddataviewer                              = new vtkMPR3DDataViewer();     
273
274         wxPanel         *panelControl           = new wxPanel(wxtabs,-1);       
275         controlPanelMPR3D                               = mwxvtkmpr3Dview->CreateControlPanel(panelControl, true);
276
277         wxFlexGridSizer  *sizerCtrol    = new wxFlexGridSizer(1);
278         sizerCtrol->Add(controlPanelMPR3D, 1, wxALL|wxEXPAND, 2);
279
280         panelControl->SetAutoLayout(true);
281         panelControl->SetSizer(sizerCtrol);
282         panelControl->SetSize(400,350);
283         panelControl->Layout();
284
285
286         if (mvtkmprbasedata!=NULL)
287         {
288                 mvtkmprbasedata->Configure();
289                 /*x = mvtkmprbasedata   ->      GetMaxPositionX()/2;
290                 y = mvtkmprbasedata     ->      GetMaxPositionY()/2;
291                 z = mvtkmprbasedata     ->      GetMaxPositionZ()/2;            */      
292                 
293                 if(mvtkmprbasedata->GetImageData() != NULL)
294                 {
295                         mvtkmprbasedata->GetImageData()->GetExtent(ext);
296                         mvtkmprbasedata->GetImageData()->GetOrigin(org);
297                         mvtkmprbasedata->GetImageData()->GetSpacing(spc);
298
299                         x = (ext[0]+ext[1])/2;
300                         y = (ext[2]+ext[3])/2;
301                         z = (ext[4]+ext[5])/2;
302
303                         mvtkmprbasedata->SetX( x );
304                         mvtkmprbasedata->SetY( y );
305                         mvtkmprbasedata->SetZ( z );
306                 }
307                 else
308                 {
309                         mvtkmprbasedata->SetX( 0 );
310                         mvtkmprbasedata->SetY( 0 );
311                         mvtkmprbasedata->SetZ( 0 );
312                 }
313         }
314
315         if (baseView!=NULL)     
316                 baseView                        ->Configure();  
317
318         if (vtkmpr3Ddataviewer  !=NULL) 
319         {
320                 vtkmpr3Ddataviewer      ->SetVtkMPRBaseData(mvtkmprbasedata);
321                 vtkmpr3Ddataviewer      ->Configure();
322         }
323         if (mwxvtkmpr3Dview     !=NULL) 
324         { 
325                 mwxvtkmpr3Dview         ->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);            
326                 mwxvtkmpr3Dview         ->Configure();
327                 mwxvtkmpr3Dview         ->ResetCamera(ext,org,spc);
328         }
329
330         wxtabs->AddPage(panelControl, _T("MPR"));
331         wxtabs->GetPage(4)->Disable();
332         mwxvtkmpr3Dview->showOutlineActor(false);
333         mwxvtkmpr3Dview->Refresh();
334                         
335 }
336
337 /**
338 ** Deletes complete volume
339 **/
340 void wxMaracasRenderTabbedPanel::deleteVolume(int volid)
341 {
342         try
343         {
344                 volmanager->deleteActor(volid);
345                 surrendmanager1->deleteActor(volid);
346                 surrendmanager2->deleteActor(volid);
347                 surrendmanager3->deleteActor(volid);
348         }
349         catch(char* str)
350         {
351                 std::cout << "Exception : " << str << '\n';
352                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
353                 diag->ShowModal();
354                 delete diag;
355         }
356 }
357
358 /**
359 ** Adds or removes volume rendering actor with given ID
360 **/
361 void wxMaracasRenderTabbedPanel::addRemoveActorV(int id, bool addremove)
362 {
363         try{
364                 volmanager->addRemoveActor(id, addremove);
365
366         }
367         catch(char* str){
368                 std::cout << "Exception : " << str << '\n';
369                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
370                 diag->ShowModal();
371                 delete diag;
372         }
373 }
374
375 /**
376 ** Adds or removes surface rendering actor with given ID
377 **/
378 void wxMaracasRenderTabbedPanel::addRemoveActorSA(int id, bool addremove)
379 {
380         try{
381                 surrendmanager1->addRemoveActor(id, addremove);
382         }
383         catch(char* str){
384                 std::cout << "Exception : " << str << '\n';
385                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
386                 diag->ShowModal();
387                 delete diag;
388         }
389 }
390
391 /**
392 ** Adds or removes surface rendering actor with given ID
393 **/
394 void wxMaracasRenderTabbedPanel::addRemoveActorSB(int id, bool addremove)
395 {
396         try{
397                 surrendmanager2->addRemoveActor(id, addremove);
398         }
399         catch(char* str){
400                 std::cout << "Exception : " << str << '\n';
401                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
402                 diag->ShowModal();
403                 delete diag;
404         }
405 }
406
407 /**
408 ** Adds or removes surface rendering actor with given ID
409 **/
410 void wxMaracasRenderTabbedPanel::addRemoveActorSC(int id, bool addremove)
411 {       
412         try{
413                 surrendmanager3->addRemoveActor(id, addremove);
414         }
415         catch(char* str){
416                 std::cout << "Exception : " << str << '\n';
417                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
418                 diag->ShowModal();
419                 delete diag;
420         }
421 }       
422
423
424 /**
425 ** Sets color points values for the given volume rendering identified by parameter: volumeid
426 **/
427 void wxMaracasRenderTabbedPanel::SetValuesColorPointsFunction(int volid, std::vector<double> greylevelcolors,std::vector<double> red,std::vector<double> green,std::vector<double> blue)
428 {
429         volmanager->setVolumeColor(volid, greylevelcolors, red, green, blue);
430 }
431
432 /**
433 ** Sets points values for the given volume rendering identified by parameter: volumeid
434 **/
435 void wxMaracasRenderTabbedPanel::SetValuesPointsFunction(int volid, std::vector<double> greylevel, std::vector<double> values)
436 {
437         try{
438                 volmanager->setVolumeOpacity(volid, greylevel, values);
439         }
440         catch(char* str)
441         {
442                 wxString s( str,wxConvUTF8 );
443                 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
444                 diag->ShowModal();
445                 delete diag;
446         }
447         
448 }
449
450 /**
451 ** Returns transfer function for the given volume rendering identified by parameter: volumeid
452 **/
453 vtkPiecewiseFunction* wxMaracasRenderTabbedPanel::GetTransferFunction(int volumeid)
454 {
455         return volmanager->GetTransferFunction(volumeid);
456 }
457
458 /**
459 ** Returns color function for the given volume rendering identified by parameter: volumeid
460 **/
461 vtkColorTransferFunction* wxMaracasRenderTabbedPanel::GetColorFunction(int volumeid)
462 {
463     return volmanager->GetColorFunction(volumeid);
464 }
465
466 /**
467 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
468 **/
469 void wxMaracasRenderTabbedPanel::changeOpacityA(int _propid, int value)
470 {
471         surrendmanager1->changeOpacity(_propid,value);
472 }
473
474 /**
475 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
476 **/
477 void wxMaracasRenderTabbedPanel::changeIsoValueA(int propid, double value)
478 {
479         surrendmanager1->changeIsoValue(propid, value);
480 }
481
482 /**
483 ** Changes color for the given surface rendering image identified by parameter: propid
484 **/
485 void wxMaracasRenderTabbedPanel::changeColorA(int propid, double red, double green, double blue)
486 {
487         try
488         {
489                 surrendmanager1->changeColor(propid, red, green, blue);
490         }
491         catch(char* str)
492         {
493                 wxString s( str,wxConvUTF8 );
494                 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
495                 diag->ShowModal();
496                 delete diag;
497         }
498 }
499
500 /**
501 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
502 **/
503 void wxMaracasRenderTabbedPanel::changeOpacityB(int _propid, int value)
504 {
505         surrendmanager2->changeOpacity(_propid,value);
506 }
507
508 /**
509 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
510 **/
511 void wxMaracasRenderTabbedPanel::changeIsoValueB(int propid, double value)
512 {
513         surrendmanager2->changeIsoValue(propid, value);
514 }
515
516 /**
517 ** Changes color for the given surface rendering image identified by parameter: propid
518 **/
519 void wxMaracasRenderTabbedPanel::changeColorB(int propid, double red, double green, double blue)
520 {
521         try
522         {
523                 surrendmanager2->changeColor(propid, red, green, blue);
524         }
525         catch(char* str)
526         {
527                 wxString s( str,wxConvUTF8 );
528                 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
529                 diag->ShowModal();
530                 delete diag;
531         }
532 }
533
534 /**
535 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
536 **/
537 void wxMaracasRenderTabbedPanel::changeOpacityC(int _propid, int value)
538 {
539         surrendmanager3->changeOpacity(_propid,value);
540 }
541
542 /**
543 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
544 **/
545 void wxMaracasRenderTabbedPanel::changeIsoValueC(int propid, double value)
546 {
547         surrendmanager3->changeIsoValue(propid, value);
548 }
549
550 /**
551 ** Changes color for the given surface rendering image identified by parameter: propid
552 **/
553 void wxMaracasRenderTabbedPanel::changeColorC(int propid, double red, double green, double blue)
554 {
555         try
556         {
557                 surrendmanager3->changeColor(propid, red, green, blue);
558         }
559         catch(char* str)
560         {
561                 wxString s( str,wxConvUTF8 );
562                 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
563                 diag->ShowModal();
564                 delete diag;
565         }
566 }
567
568 /**
569 ** Method called when VolumeRendering checkbox status changes: Either shows or hides VolumeRendering image
570 **/
571 void wxMaracasRenderTabbedPanel::onCheckBoxVChange(wxCommandEvent& event)
572 {
573         try{
574                 volmanager->addRemoveActor(this->getPropIdV(), checkboxVol->GetValue());
575
576                 int id = 0;
577                 wxtabs->SetSelection(id);
578
579                 if(checkboxVol->GetValue())
580                 {
581                         wxtabs->GetPage(id)->Enable();
582                 }
583                 else
584                 {       
585                         wxtabs->GetPage(id)->Disable();
586                 }
587         }
588         catch(char* str){
589                 std::cout << "Exception : " << str << '\n';
590                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
591                 diag->ShowModal();
592                 delete diag;
593         }
594 }
595
596 /**
597 ** Method called when SurfaceRendering A checkbox status changes: Either shows or hides SurfaceRendering image
598 **/
599 void wxMaracasRenderTabbedPanel::onCheckBoxSAChange(wxCommandEvent& event)
600 {       
601         try{
602                 surrendmanager1->addRemoveActor(this->getPropIdV(), checkboxSA->GetValue());    
603
604                 int id = 1;
605                 wxtabs->SetSelection(id);
606
607                 if(checkboxSA->GetValue())
608                 {
609                         wxtabs->GetPage(id)->Enable();
610
611                 }
612                 else
613                 {       
614                         wxtabs->GetPage(id)->Disable();
615                 }
616         }
617         catch(char* str){
618                 std::cout << "Exception : " << str << '\n';
619                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
620                 diag->ShowModal();
621                 delete diag;
622         }
623 }
624
625 /**
626 ** Method called when SurfaceRendering B checkbox status changes: Either shows or hides SurfaceRendering B image
627 **/
628 void wxMaracasRenderTabbedPanel::onCheckBoxSBChange(wxCommandEvent& event)
629 {       
630         try{
631                 surrendmanager2->addRemoveActor(this->getPropIdV(), checkboxSB->GetValue());    
632
633                 int id = 2;
634                 wxtabs->SetSelection(id);
635
636                 if(checkboxSB->GetValue())
637                 {
638                         wxtabs->GetPage(id)->Enable();
639                 }
640                 else
641                 {       
642                         wxtabs->GetPage(id)->Disable();
643                 }
644         }
645         catch(char* str){
646                 std::cout << "Exception : " << str << '\n';
647                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
648                 diag->ShowModal();
649                 delete diag;
650         }
651 }
652
653 /**
654 ** Method called when SurfaceRendering C checkbox status changes: Either shows or hides SurfaceRendering C image
655 **/
656 void wxMaracasRenderTabbedPanel::onCheckBoxSCChange(wxCommandEvent& event)
657 {       
658         try{
659                 surrendmanager3->addRemoveActor(this->getPropIdV(), checkboxSC->GetValue());
660
661                 int id = 3;
662                 wxtabs->SetSelection(id);
663
664                 if(checkboxSC->GetValue())
665                 {
666                         wxtabs->GetPage(id)->Enable();
667                 }
668                 else
669                 {       
670                         wxtabs->GetPage(id)->Disable();
671                 }
672         }
673         catch(char* str){
674                 std::cout << "Exception : " << str << '\n';
675                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
676                 diag->ShowModal();
677                 delete diag;
678         }
679 }
680
681 /**
682 ** Method called when MPR checkbox status changes: Either shows or hides actors
683 **/
684 void wxMaracasRenderTabbedPanel::onMPROptions(wxCommandEvent& event)
685 {
686         int id = 4;
687         wxtabs->SetSelection(id);
688         if(checkboxViewer->IsChecked())
689         {
690                 wxtabs->GetPage(id)->Enable();
691
692                 bool valueX = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisibleX();
693                 bool valueY = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisibleY();
694                 bool valueZ = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisibleZ();
695
696                 mwxvtkmpr3Dview->VisibleImageActor( 0, valueX );
697                 mwxvtkmpr3Dview->VisibleImageActor( 1, valueY );
698                 mwxvtkmpr3Dview->VisibleImageActor( 2, valueZ );
699                 mwxvtkmpr3Dview->showOutlineActor(true);
700                 mwxvtkmpr3Dview->Refresh();
701
702                 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
703                 mwxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
704
705         }
706         else
707         {
708                 wxtabs->GetPage(id)->Disable();
709
710                 mwxvtkmpr3Dview->VisibleImageActor(0, false );
711                 mwxvtkmpr3Dview->VisibleImageActor(1, false );
712                 mwxvtkmpr3Dview->VisibleImageActor(2, false );
713                 mwxvtkmpr3Dview->showOutlineActor(false);
714                 mwxvtkmpr3Dview->Refresh();
715
716                 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
717                 mwxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
718         }
719 }
720
721 /**
722 ** 
723 **/
724 void wxMaracasRenderTabbedPanel::onOpenParameters(wxCommandEvent& event){       
725         if(dialog == NULL)
726         {
727                 dialog = new wxMaracasRenderImageManagementPanel(this, volmanager, surrendmanager1, surrendmanager2, surrendmanager3, volname, _id);
728                 dialog->SetSize(400, 580);
729                 dialog->Show();
730         }
731         else if(dialog != NULL)
732         {
733                 dialog->Show();
734         }
735 }
736
737 /**
738 **
739 **/
740 void wxMaracasRenderTabbedPanel::onOpenCutter(wxCommandEvent& event)
741 {       
742         vtkImageData* img = getVolImage();      
743         std::vector<int> type;
744         type.push_back(5);
745         type.push_back(0);
746         type.push_back(1);
747         type.push_back(3);
748         
749         wxMaracasDialog_NViewers* dialog1 = new wxMaracasDialog_NViewers(this, img, &type, wxString(_T("Cut Module") ));
750         //dialog1->SetSize(800, 700);
751         
752         std::string path = crea::System::GetDllAppPath("bbcreaMaracasVisu.dll");
753         //cutter = new CutModel2MainPanel(dialog1, path);
754         
755         //dialog1->AddPanel(cutter);
756         dialog1->Show();
757 }
758
759 /**
760 ** Gets volume rendering image asociated to the given ID
761 **/
762 void wxMaracasRenderTabbedPanel::onColorChange(wxCommandEvent& event)
763 {       
764         /*Temporarily disabled*/
765
766         //if(mwxwidget->ShowModal()==wxID_OK){
767         //updateVolume();
768         //      mwxwidget->Show(false);
769         //}     
770 }
771
772 /**
773 ** 
774 **/
775 vtkImageData* wxMaracasRenderTabbedPanel::getVolImage()
776 {       
777         return volmanager->getImageData();
778 }
779
780 /**
781 ** Gets surface rendering A image asociated to the given ID
782 **/
783 vtkImageData* wxMaracasRenderTabbedPanel::getSurfAImage()
784 {       
785         return surrendmanager1->getImageData();
786 }
787
788 /**
789 ** Gets surface rendering B image asociated to the given ID
790 **/
791 vtkImageData* wxMaracasRenderTabbedPanel::getSurfBImage()
792 {       
793         return surrendmanager2->getImageData();
794 }
795
796 /**
797 ** Gets surface rendering C image asociated to the given ID
798 **/
799 vtkImageData* wxMaracasRenderTabbedPanel::getSurfCImage()
800 {       
801         return surrendmanager3->getImageData();
802 }
803
804 /**
805 **
806 **/
807 int wxMaracasRenderTabbedPanel::getPropIdV()
808 {
809         return _id;
810 }