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