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