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