]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasRenderTabbedPanel.cpp
Bug Rendering
[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->showOutlineBoxActor(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->showOutlineBoxActor(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->showOutlineBoxActor(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                 } else {        
733                         wxtabs->GetPage(id)->Disable();
734                 } // if checkboxSB
735         }
736         catch(char* str){
737                 std::cout << "Exception : " << str << '\n';
738                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
739                 diag->ShowModal();
740                 delete diag;
741         }
742 }
743
744 /**
745 ** Method called when SurfaceRendering C checkbox status changes: Either shows or hides SurfaceRendering C image
746 **/
747 void wxMaracasRenderTabbedPanel::onCheckBoxSCChange(wxCommandEvent& event)
748 {       
749         try{
750                 surrendmanager3->addRemoveActor(this->getPropIdV(), checkboxSC->GetValue());
751
752                 int id = 3;
753                 wxtabs->SetSelection(id);
754
755                 if(checkboxSC->GetValue())
756                 {
757                         wxtabs->GetPage(id)->Enable();
758                 }
759                 else
760                 {       
761                         wxtabs->GetPage(id)->Disable();
762                 }
763         }
764         catch(char* str){
765                 std::cout << "Exception : " << str << '\n';
766                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
767                 diag->ShowModal();
768                 delete diag;
769         }
770 }
771
772 /**
773 ** Method called when MPR checkbox status changes: Either shows or hides actors
774 **/
775 void wxMaracasRenderTabbedPanel::onMPROptions(wxCommandEvent& event)
776 {
777         addRemoveActorMPR(checkboxViewer->IsChecked());
778         /*
779         int id = 4;
780         wxtabs->SetSelection(id);
781         if(checkboxViewer->IsChecked())
782         {
783                 
784                 wxtabs->GetPage(id)->Enable();
785
786                 bool valueX = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisibleX();
787                 bool valueY = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisibleY();
788                 bool valueZ = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisibleZ();
789                 bool valueXYZ = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisibleXYZ();
790                 bool valuePlane = ((wxVtkMPR3DViewCntrlPanel*) controlPanelMPR3D)->GetVisiblePlane();
791
792                 mwxvtkmpr3Dview->VisibleImageActor( 0, valueX );
793                 mwxvtkmpr3Dview->VisibleImageActor( 1, valueY );
794                 mwxvtkmpr3Dview->VisibleImageActor( 2, valueZ );
795                 mwxvtkmpr3Dview->VisiblePointWidget(valueXYZ);
796                 mwxvtkmpr3Dview->VisiblePlaneWidget(valuePlane);
797                 mwxvtkmpr3Dview->showOutlineActor(true);
798                 
799                 mwxvtkmpr3Dview->Refresh();
800
801
802         }
803         else
804         {
805                 wxtabs->GetPage(id)->Disable();
806
807                 mwxvtkmpr3Dview->VisiblePointWidget(false);
808                 mwxvtkmpr3Dview->VisiblePlaneWidget(false);
809                 mwxvtkmpr3Dview->VisibleImageActor(0, false );
810                 mwxvtkmpr3Dview->VisibleImageActor(1, false );
811                 mwxvtkmpr3Dview->VisibleImageActor(2, false );
812                 mwxvtkmpr3Dview->showOutlineActor(false);
813                 mwxvtkmpr3Dview->Refresh();
814
815                 wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
816                 mwxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
817         }*/
818 }
819
820
821 void wxMaracasRenderTabbedPanel::OnRefreshView(wxCommandEvent & event) 
822 {
823         printf("CPR wxMaracasRenderTabbedPanel::OnRefreshView \n");
824         mwxvtkmpr3Dview->RefreshView();
825         wxCommandEvent newevent1(wxEVT_COMMAND_MENU_SELECTED,12121);  // Refresh
826 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
827 #if wxMAJOR_VERSION <= 2
828         mwxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessEvent(newevent1);
829 #else
830         mwxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()->GetParent()->ProcessWindowEvent(newevent1);
831 #endif
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 }