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