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