]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasRenderTabbedPanel.cpp
b26adf9b6e07335fb27949e626a42a545add2297
[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                 mwxvtkmpr3Dview         ->ResetCamera(ext,org,spc);
376                 vtkInteractorStyleBaseView* vtkInteractorBV = (vtkInteractorStyleBaseView*)mwxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetInteractorStyleBaseView();
377                 vtkInteractorBV->AddParentToReport(this);
378         }
379
380         int id = 4;
381         wxtabs->AddPage(panelControl, _T("MPR"));
382         wxtabs->GetPage(id)->Enable();
383         wxtabs->SetSelection(id);
384
385         ((wxVtkMPR3DViewCntrlPanel*)controlPanelMPR3D)->SetVisibleZ(true);
386         ((wxVtkMPR3DViewCntrlPanel*)controlPanelMPR3D)->SetVisibleXYZ(true);
387         mwxvtkmpr3Dview->showOutlineActor(true);
388         mwxvtkmpr3Dview->Refresh();
389                         
390 }
391
392 /**
393 ** Deletes complete volume
394 **/
395 void wxMaracasRenderTabbedPanel::deleteVolume(int volid)
396 {
397         try
398         {
399                 volmanager->deleteActor(volid);
400                 surrendmanager1->deleteActor(volid);
401                 surrendmanager2->deleteActor(volid);
402                 surrendmanager3->deleteActor(volid);
403         }
404         catch(char* str)
405         {
406                 std::cout << "Exception : " << str << '\n';
407                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
408                 diag->ShowModal();
409                 delete diag;
410         }
411 }
412
413 /**
414 ** Adds or removes volume rendering actor with given ID
415 **/
416 void wxMaracasRenderTabbedPanel::addRemoveActorV(int id, bool addremove)
417 {
418         try{
419                 volmanager->addRemoveActor(id, addremove);
420
421         }
422         catch(char* str){
423                 std::cout << "Exception : " << str << '\n';
424                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
425                 diag->ShowModal();
426                 delete diag;
427         }
428 }
429
430 /**
431 ** Adds or removes surface rendering actor with given ID
432 **/
433 void wxMaracasRenderTabbedPanel::addRemoveActorSA(int id, bool addremove)
434 {
435         try{
436                 surrendmanager1->addRemoveActor(id, addremove);
437         }
438         catch(char* str){
439                 std::cout << "Exception : " << str << '\n';
440                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
441                 diag->ShowModal();
442                 delete diag;
443         }
444 }
445
446 /**
447 ** Adds or removes surface rendering actor with given ID
448 **/
449 void wxMaracasRenderTabbedPanel::addRemoveActorSB(int id, bool addremove)
450 {
451         try{
452                 surrendmanager2->addRemoveActor(id, addremove);
453         }
454         catch(char* str){
455                 std::cout << "Exception : " << str << '\n';
456                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
457                 diag->ShowModal();
458                 delete diag;
459         }
460 }
461
462 /**
463 ** Adds or removes surface rendering actor with given ID
464 **/
465 void wxMaracasRenderTabbedPanel::addRemoveActorSC(int id, bool addremove)
466 {       
467         try{
468                 surrendmanager3->addRemoveActor(id, addremove);
469         }
470         catch(char* str){
471                 std::cout << "Exception : " << str << '\n';
472                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
473                 diag->ShowModal();
474                 delete diag;
475         }
476 }
477
478 void wxMaracasRenderTabbedPanel::addRemoveActorMPR(bool addremove)
479 {
480         int id = 4;
481         wxtabs->SetSelection(id);
482         if(addremove)
483         {
484                 wxtabs->GetPage(id)->Enable();
485
486                 bool valueX = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisibleX();
487                 bool valueY = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisibleY();
488                 bool valueZ = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisibleZ();
489                 bool valueXYZ = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisibleXYZ();
490                 bool valuePlane = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisiblePlane();
491
492                 mwxvtkmpr3Dview->VisibleImageActor( 0, valueX );
493                 mwxvtkmpr3Dview->VisibleImageActor( 1, valueY );
494                 mwxvtkmpr3Dview->VisibleImageActor( 2, valueZ );
495                 mwxvtkmpr3Dview->VisiblePointWidget(valueXYZ);
496                 mwxvtkmpr3Dview->VisiblePlaneWidget(valuePlane);
497                 mwxvtkmpr3Dview->showOutlineActor(true);
498                 
499                 mwxvtkmpr3Dview->Refresh();
500
501
502         }
503         else
504         {
505                 wxtabs->GetPage(id)->Disable();
506
507                 mwxvtkmpr3Dview->VisiblePointWidget(false);
508                 mwxvtkmpr3Dview->VisiblePlaneWidget(false);
509                 mwxvtkmpr3Dview->VisibleImageActor(0, false );
510                 mwxvtkmpr3Dview->VisibleImageActor(1, false );
511                 mwxvtkmpr3Dview->VisibleImageActor(2, false );
512                 mwxvtkmpr3Dview->showOutlineActor(false);
513                 mwxvtkmpr3Dview->Refresh();
514
515                 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
516                 mwxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
517         }
518 }
519
520
521 /**
522 ** Sets color points values for the given volume rendering identified by parameter: volumeid
523 **/
524 void wxMaracasRenderTabbedPanel::SetValuesColorPointsFunction(int volid, std::vector<double> greylevelcolors,std::vector<double> red,std::vector<double> green,std::vector<double> blue)
525 {
526         volmanager->setVolumeColor(volid, greylevelcolors, red, green, blue);
527 }
528
529 /**
530 ** Sets points values for the given volume rendering identified by parameter: volumeid
531 **/
532 void wxMaracasRenderTabbedPanel::SetValuesPointsFunction(int volid, std::vector<double> greylevel, std::vector<double> values)
533 {
534         try{
535                 volmanager->setVolumeOpacity(volid, greylevel, values);
536         }
537         catch(char* str)
538         {
539                 wxString s( str,wxConvUTF8 );
540                 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
541                 diag->ShowModal();
542                 delete diag;
543         }
544 }
545
546 /**
547 ** Returns transfer function for the given volume rendering identified by parameter: volumeid
548 **/
549 vtkPiecewiseFunction* wxMaracasRenderTabbedPanel::GetTransferFunction(int volumeid)
550 {
551         return volmanager->GetTransferFunction(volumeid);
552 }
553
554 /**
555 ** Returns color function for the given volume rendering identified by parameter: volumeid
556 **/
557 vtkColorTransferFunction* wxMaracasRenderTabbedPanel::GetColorFunction(int volumeid)
558 {
559     return volmanager->GetColorFunction(volumeid);
560 }
561
562 /**
563 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
564 **/
565 void wxMaracasRenderTabbedPanel::changeOpacityA(int _propid, int value)
566 {
567         surrendmanager1->changeOpacity(_propid,value);
568 }
569
570 /**
571 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
572 **/
573 void wxMaracasRenderTabbedPanel::changeIsoValueA(int propid, double value)
574 {
575         surrendmanager1->changeIsoValue(propid, value);
576 }
577
578 /**
579 ** Changes color for the given surface rendering image identified by parameter: propid
580 **/
581 void wxMaracasRenderTabbedPanel::changeColorA(int propid, double red, double green, double blue)
582 {
583         try
584         {
585                 surrendmanager1->changeColor(propid, red, green, blue);
586         }
587         catch(char* str)
588         {
589                 wxString s( str,wxConvUTF8 );
590                 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
591                 diag->ShowModal();
592                 delete diag;
593         }
594 }
595
596 /**
597 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
598 **/
599 void wxMaracasRenderTabbedPanel::changeOpacityB(int _propid, int value)
600 {
601         surrendmanager2->changeOpacity(_propid,value);
602 }
603
604 /**
605 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
606 **/
607 void wxMaracasRenderTabbedPanel::changeIsoValueB(int propid, double value)
608 {
609         surrendmanager2->changeIsoValue(propid, value);
610 }
611
612 /**
613 ** Changes color for the given surface rendering image identified by parameter: propid
614 **/
615 void wxMaracasRenderTabbedPanel::changeColorB(int propid, double red, double green, double blue)
616 {
617         try
618         {
619                 surrendmanager2->changeColor(propid, red, green, blue);
620         }
621         catch(char* str)
622         {
623                 wxString s( str,wxConvUTF8 );
624                 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
625                 diag->ShowModal();
626                 delete diag;
627         }
628 }
629
630 /**
631 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
632 **/
633 void wxMaracasRenderTabbedPanel::changeOpacityC(int _propid, int value)
634 {
635         surrendmanager3->changeOpacity(_propid,value);
636 }
637
638 /**
639 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
640 **/
641 void wxMaracasRenderTabbedPanel::changeIsoValueC(int propid, double value)
642 {
643         surrendmanager3->changeIsoValue(propid, value);
644 }
645
646 /**
647 ** Changes color for the given surface rendering image identified by parameter: propid
648 **/
649 void wxMaracasRenderTabbedPanel::changeColorC(int propid, double red, double green, double blue)
650 {
651         try
652         {
653                 surrendmanager3->changeColor(propid, red, green, blue);
654         }
655         catch(char* str)
656         {
657                 wxString s( str,wxConvUTF8 );
658                 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
659                 diag->ShowModal();
660                 delete diag;
661         }
662 }
663
664 /**
665 ** Method called when VolumeRendering checkbox status changes: Either shows or hides VolumeRendering image
666 **/
667 void wxMaracasRenderTabbedPanel::onCheckBoxVChange(wxCommandEvent& event)
668 {
669         try{
670                 volmanager->addRemoveActor(this->getPropIdV(), checkboxVol->GetValue());
671
672                 int id = 0;
673                 wxtabs->SetSelection(id);
674
675                 if(checkboxVol->GetValue())
676                 {
677                         wxtabs->GetPage(id)->Enable();
678                 }
679                 else
680                 {       
681                         wxtabs->GetPage(id)->Disable();
682                 }
683         }
684         catch(char* str){
685                 std::cout << "Exception : " << str << '\n';
686                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
687                 diag->ShowModal();
688                 delete diag;
689         }
690 }
691
692 /**
693 ** Method called when SurfaceRendering A checkbox status changes: Either shows or hides SurfaceRendering image
694 **/
695 void wxMaracasRenderTabbedPanel::onCheckBoxSAChange(wxCommandEvent& event)
696 {       
697         try{
698                 surrendmanager1->addRemoveActor(this->getPropIdV(), checkboxSA->GetValue());    
699
700                 int id = 1;
701                 wxtabs->SetSelection(id);
702
703                 if(checkboxSA->GetValue())
704                 {
705                         wxtabs->GetPage(id)->Enable();
706
707                 }
708                 else
709                 {       
710                         wxtabs->GetPage(id)->Disable();
711                 }
712         }
713         catch(char* str){
714                 std::cout << "Exception : " << str << '\n';
715                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
716                 diag->ShowModal();
717                 delete diag;
718         }
719 }
720
721 /**
722 ** Method called when SurfaceRendering B checkbox status changes: Either shows or hides SurfaceRendering B image
723 **/
724 void wxMaracasRenderTabbedPanel::onCheckBoxSBChange(wxCommandEvent& event)
725 {       
726         try{
727                 surrendmanager2->addRemoveActor(this->getPropIdV(), checkboxSB->GetValue());    
728
729                 int id = 2;
730                 wxtabs->SetSelection(id);
731
732                 if(checkboxSB->GetValue())
733                 {
734                         wxtabs->GetPage(id)->Enable();
735                 }
736                 else
737                 {       
738                         wxtabs->GetPage(id)->Disable();
739                 }
740         }
741         catch(char* str){
742                 std::cout << "Exception : " << str << '\n';
743                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
744                 diag->ShowModal();
745                 delete diag;
746         }
747 }
748
749 /**
750 ** Method called when SurfaceRendering C checkbox status changes: Either shows or hides SurfaceRendering C image
751 **/
752 void wxMaracasRenderTabbedPanel::onCheckBoxSCChange(wxCommandEvent& event)
753 {       
754         try{
755                 surrendmanager3->addRemoveActor(this->getPropIdV(), checkboxSC->GetValue());
756
757                 int id = 3;
758                 wxtabs->SetSelection(id);
759
760                 if(checkboxSC->GetValue())
761                 {
762                         wxtabs->GetPage(id)->Enable();
763                 }
764                 else
765                 {       
766                         wxtabs->GetPage(id)->Disable();
767                 }
768         }
769         catch(char* str){
770                 std::cout << "Exception : " << str << '\n';
771                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
772                 diag->ShowModal();
773                 delete diag;
774         }
775 }
776
777 /**
778 ** Method called when MPR checkbox status changes: Either shows or hides actors
779 **/
780 void wxMaracasRenderTabbedPanel::onMPROptions(wxCommandEvent& event)
781 {
782         addRemoveActorMPR(checkboxViewer->IsChecked());
783         /*
784         int id = 4;
785         wxtabs->SetSelection(id);
786         if(checkboxViewer->IsChecked())
787         {
788                 
789                 wxtabs->GetPage(id)->Enable();
790
791                 bool valueX = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisibleX();
792                 bool valueY = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisibleY();
793                 bool valueZ = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisibleZ();
794                 bool valueXYZ = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisibleXYZ();
795                 bool valuePlane = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisiblePlane();
796
797                 mwxvtkmpr3Dview->VisibleImageActor( 0, valueX );
798                 mwxvtkmpr3Dview->VisibleImageActor( 1, valueY );
799                 mwxvtkmpr3Dview->VisibleImageActor( 2, valueZ );
800                 mwxvtkmpr3Dview->VisiblePointWidget(valueXYZ);
801                 mwxvtkmpr3Dview->VisiblePlaneWidget(valuePlane);
802                 mwxvtkmpr3Dview->showOutlineActor(true);
803                 
804                 mwxvtkmpr3Dview->Refresh();
805
806
807         }
808         else
809         {
810                 wxtabs->GetPage(id)->Disable();
811
812                 mwxvtkmpr3Dview->VisiblePointWidget(false);
813                 mwxvtkmpr3Dview->VisiblePlaneWidget(false);
814                 mwxvtkmpr3Dview->VisibleImageActor(0, false );
815                 mwxvtkmpr3Dview->VisibleImageActor(1, false );
816                 mwxvtkmpr3Dview->VisibleImageActor(2, false );
817                 mwxvtkmpr3Dview->showOutlineActor(false);
818                 mwxvtkmpr3Dview->Refresh();
819
820                 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
821                 mwxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
822         }*/
823 }
824
825 void wxMaracasRenderTabbedPanel::OnRefreshView(wxCommandEvent & event) 
826 {
827         printf("CPR wxMaracasRenderTabbedPanel::OnRefreshView \n");
828         mwxvtkmpr3Dview->RefreshView();
829
830         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
831         mwxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
832 }
833
834 /**
835 ** 
836 **/
837 void wxMaracasRenderTabbedPanel::onOpenParameters(wxCommandEvent& event){       
838         if(dialog == NULL)
839         {
840                 dialog = new wxMaracasRenderImageManagementPanel(this, volmanager, surrendmanager1, surrendmanager2, surrendmanager3, volname, _id);
841                 dialog->SetSize(460, 580);
842                 dialog->Show();
843         }
844         else if(dialog != NULL)
845         {
846                 dialog->Show();
847         }
848 }
849
850 /**
851 **
852 **/
853 void wxMaracasRenderTabbedPanel::onOpenCutter(wxCommandEvent& event)
854 {       
855         vtkImageData* img = getVolImage();      
856         std::vector<int> type;
857         type.push_back(5);
858         type.push_back(1);
859         type.push_back(2);
860         type.push_back(0);
861         
862         wxMaracasDialog_NViewers* dialog1 = new wxMaracasDialog_NViewers(this, img, &type, wxString(_T("Cut Module") ));
863         //dialog1->SetSize(800, 700);
864         
865         /**std::string path = crea::System::GetDllAppPath("bbcreaMaracasVisu.dll");
866         cutter = CutModelMainPanel::getInstance(dialog1->getinternalPanel(), path);
867         cutter->setRenderer( dialog1->getViewer()->GetwxVtkBaseView(1)->GetRenderer() );
868         cutter->setInteractor( dialog1->getViewer()->GetwxVtkBaseView(1)->GetWxVTKRenderWindowInteractor() );
869         cutter->setImageData(getVolImage());
870         **/
871         //dialog1->AddPanel(cutter);
872         dialog1->Show();
873 }
874
875 /**
876 ** Gets volume rendering image asociated to the given ID
877 **/
878 void wxMaracasRenderTabbedPanel::onColorChange(wxCommandEvent& event)
879 {       
880         /*Temporarily disabled*/
881
882         //if(mwxwidget->ShowModal()==wxID_OK){
883         //updateVolume();
884         //      mwxwidget->Show(false);
885         //}     
886 }
887
888 /**
889 ** 
890 **/
891 vtkImageData* wxMaracasRenderTabbedPanel::getVolImage()
892 {       
893         return volmanager->getImageData();
894 }
895
896 /**
897 ** Gets surface rendering A image asociated to the given ID
898 **/
899 vtkImageData* wxMaracasRenderTabbedPanel::getSurfAImage()
900 {       
901         return surrendmanager1->getImageData();
902 }
903
904 /**
905 ** Gets surface rendering B image asociated to the given ID
906 **/
907 vtkImageData* wxMaracasRenderTabbedPanel::getSurfBImage()
908 {       
909         return surrendmanager2->getImageData();
910 }
911
912 /**
913 ** Gets surface rendering C image asociated to the given ID
914 **/
915 vtkImageData* wxMaracasRenderTabbedPanel::getSurfCImage()
916 {       
917         return surrendmanager3->getImageData();
918 }
919
920 /**
921 **
922 **/
923 int wxMaracasRenderTabbedPanel::getPropIdV()
924 {
925         return _id;
926 }