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