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