]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasRenderTabbedPanel.cpp
*** empty log message ***
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracasRenderTabbedPanel.cpp
1 #include "wxMaracasRenderTabbedPanel.h"
2 #include "HistogramDialogComboBox.h"
3
4 #include "wxMaracasMultipleVolumeRendererPanel.h"
5 #include "wxMaracasSurfaceRenderingPanel.h"
6 #include "wxMaracasSurfaceRenderingProp3DMHD.h"
7 #include "wxMaracasMultipleVolumeRendererManagerData.h"
8
9 #include <wx/colordlg.h>
10 #include <wx/button.h> 
11
12 #include <OpenImage.xpm>
13 #include "Color.xpm"
14
15 #include <vtkProp3D.h>
16
17 /**
18 ** Class constructor
19 **/
20 wxMaracasRenderTabbedPanel::wxMaracasRenderTabbedPanel(wxWindow* parent, int id)
21 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize)
22 {
23         _id = id;
24         volmanager = new wxMaracasMultipleVolumeRendererManager();
25         surrendmanager1 = new wxMaracasSurfaceRenderingManager();
26         surrendmanager2 = new wxMaracasSurfaceRenderingManager();
27         surrendmanager3 = new wxMaracasSurfaceRenderingManager();
28 }
29
30 /**
31 ** Class Destructor
32 **/
33 wxMaracasRenderTabbedPanel::~wxMaracasRenderTabbedPanel()
34 {       
35         //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorV(_propid, false);
36         //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSA(_propid, false);
37         //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSB(_propid, false);
38         //wxMaracasRenderTabbedPanel::getInstance()->addRemoveActorSC(_propid, false);
39         this->deleteVolume(_id);
40         delete wxtabs;  
41 }
42
43 /**
44 ** Initializes rendered images, and creates and adds elements to the panel
45 **/
46 void wxMaracasRenderTabbedPanel::createControls(vtkImageData* inImg, std::string pathfile, std::string filename)
47 {
48         wxFlexGridSizer* sizerrenderprop = new wxFlexGridSizer(1);
49
50         wxFlexGridSizer* sizercheck = new wxFlexGridSizer(2);
51         checkboxVol = new  wxCheckBox(this,-1,wxString(_T("Volume Rendering")));
52         Connect(checkboxVol->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxVChange);   
53         checkboxVol->SetValue(true);    
54         sizercheck->Add(checkboxVol, wxFIXED_MINSIZE);
55
56         checkboxSA = new  wxCheckBox(this,-1,wxString(_T("Surface Rendering A")));
57         Connect(checkboxSA->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSAChange);   
58         checkboxSA->SetValue(true);     
59         sizercheck->Add(checkboxSA, wxFIXED_MINSIZE);   
60
61         checkboxSB = new  wxCheckBox(this,-1,wxString(_T("Surface Rendering B")));
62         Connect(checkboxSB->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSBChange);   
63         checkboxSB->SetValue(true);     
64         sizercheck->Add(checkboxSB, wxFIXED_MINSIZE);
65
66         checkboxSC = new  wxCheckBox(this,-1,wxString(_T("Surface Rendering C")));
67         Connect(checkboxSC->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSCChange);   
68         checkboxSC->SetValue(true);     
69         sizercheck->Add(checkboxSC, wxFIXED_MINSIZE);
70
71         wxButton* _openParameters = new wxButton(this, -1, wxString(_T("Apply Transformation")));       
72         Connect(_openParameters->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onOpenParameters);                  
73         sizercheck->Add(_openParameters,wxFIXED_MINSIZE);
74
75         wxButton* _openCutter = new wxButton(this, -1, wxString(_T("Open Cutter View")));       
76         Connect(_openCutter->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onOpenCutter);                  
77         sizercheck->Add(_openCutter,wxFIXED_MINSIZE);
78         sizerrenderprop->Add(sizercheck, wxFIXED_MINSIZE);
79
80         wxtabs = new wxNotebook(this, -1);
81
82         if(inImg == NULL)
83         {
84                 vtkImageData* img = volmanager->getImageData(pathfile);
85                 //vtkImageData* img1 = surrendmanager1->getImageData(pathfile);
86                 //vtkImageData* img2 = surrendmanager2->getImageData(pathfile);
87                 //vtkImageData* img3 = surrendmanager3->getImageData(pathfile);
88                 if(img!=NULL /*&& img1!=NULL && img2!=NULL && img3!=NULL*/)
89                 {
90                         addVolume(img, filename);
91                         addSurface1(img, filename);
92                         addSurface2(img, filename);
93                         addSurface3(img, filename);     
94                         wxtabs->Refresh();
95                 }
96         }       
97         else
98         {
99                 addVolume(inImg, filename);
100                 addSurface1(inImg, filename);
101                 addSurface2(inImg, filename);
102                 addSurface3(inImg, filename);   
103                 wxtabs->Refresh();
104         }
105
106         sizerrenderprop->Add(wxtabs, wxSizerFlags().Expand().Center());
107
108         this->SetSizer(sizerrenderprop, true);          
109         this->SetAutoLayout( true );
110 }
111
112
113 /**
114 ** Sets given renderer
115 **/
116 void wxMaracasRenderTabbedPanel::setRenderer(vtkRenderer* renderer)
117 {
118         volmanager->setRenderer(renderer);
119         surrendmanager1->setRenderer(renderer);
120         surrendmanager2->setRenderer(renderer);
121         surrendmanager3->setRenderer(renderer);
122 }
123
124 /**
125 ** Adds a volume using Volume Rendering
126 **/
127 void wxMaracasRenderTabbedPanel::addVolume(vtkImageData* img, std::string dataname)
128 {
129         try
130         {
131                 int _propidV = volmanager->addVolume(_id, img, dataname);
132                 if(_propidV!=-1)
133                 {
134                         wxMaracasMultipleVolumeRendererPanel* controlpanV = new wxMaracasMultipleVolumeRendererPanel(wxtabs, _propidV, img, true);
135                         wxtabs->AddPage(controlpanV, _T("Vol Rendering"), true);
136                         controlpanV->updateVolume();
137                 }
138         }
139         catch(char* str)
140         {
141                 std::cout << "Exception : " << str << '\n';
142                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
143                 diag->ShowModal();
144                 delete diag;
145         }
146 }
147
148 /**
149 ** Adds a volume using surface rendering
150 **/
151 void wxMaracasRenderTabbedPanel::addSurface1(vtkImageData* img, std::string dataname)
152 {
153         try
154         {
155                 int _propidSA = surrendmanager1->addPropMHD(_id, img, dataname);
156                 
157                 if(_propidSA!=-1)
158                 {
159                         wxMaracasSurfaceRenderingPanel* controlpanSA = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, _propidSA, true, 1);
160                         int maxiso = surrendmanager1->getMaxIsoValue(_propidSA);
161                         ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSA)->createControls(maxiso);
162                         wxtabs->AddPage(controlpanSA, _T("SR A"));
163                 }
164         }
165         catch(char* str)
166         {
167                 std::cout << "Exception : " << str << '\n';
168                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
169                 diag->ShowModal();
170                 delete diag;
171         }
172 }
173
174 /**
175 ** Adds a volume using surface rendering
176 **/
177 void wxMaracasRenderTabbedPanel::addSurface2(vtkImageData* img, std::string dataname)
178 {
179         try
180         {
181                 int _propidSB = surrendmanager2->addPropMHD(_id, img, dataname);
182                 if(_propidSB!=-1)
183                 {
184                         wxMaracasSurfaceRenderingPanel* controlpanSB = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, _propidSB, true, 2);
185                         int maxiso = surrendmanager2->getMaxIsoValue(_propidSB);
186                         ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSB)->createControls(maxiso);
187                         wxtabs->AddPage(controlpanSB, _T("SR B"));
188
189                 }
190         }
191         catch(char* str)
192         {
193                 std::cout << "Exception : " << str << '\n';
194                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
195                 diag->ShowModal();
196                 delete diag;
197         }
198 }
199
200 /**
201 ** Adds a volume using Surface Rendering
202 **/
203 void wxMaracasRenderTabbedPanel::addSurface3(vtkImageData* img, std::string dataname)
204 {
205         try
206         {
207                 int _propidSC = surrendmanager3->addPropMHD(_id, img, dataname);
208
209                 if(_propidSC!=-1)
210                 {
211                         wxMaracasSurfaceRenderingPanel* controlpanSC = new wxMaracasSurfaceRenderingProp3DMHD(wxtabs, _propidSC, true, 3);
212                         int maxiso = surrendmanager3->getMaxIsoValue(_propidSC);
213                         ((wxMaracasSurfaceRenderingProp3DMHD*)controlpanSC)->createControls(maxiso);
214                         wxtabs->AddPage(controlpanSC, _T("SR C"));
215                 }
216         }
217         catch(char* str)
218         {
219                 std::cout << "Exception : " << str << '\n';
220                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
221                 diag->ShowModal();
222                 delete diag;
223         }
224 }
225
226 /**
227 ** Deletes complete volume
228 **/
229 void wxMaracasRenderTabbedPanel::deleteVolume(int volid)
230 {
231         try
232         {
233                 volmanager->deleteActor(volid);
234                 surrendmanager1->deleteActor(volid);
235                 surrendmanager2->deleteActor(volid);
236                 surrendmanager3->deleteActor(volid);
237         }
238         catch(char* str)
239         {
240                 std::cout << "Exception : " << str << '\n';
241                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
242                 diag->ShowModal();
243                 delete diag;
244         }
245 }
246
247 /**
248 ** Adds or removes volume rendering actor with given ID
249 **/
250 void wxMaracasRenderTabbedPanel::addRemoveActorV(int id, bool addremove)
251 {
252         try{
253                 volmanager->addRemoveActor(id, addremove);
254         }
255         catch(char* str){
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 ** Adds or removes surface rendering actor with given ID
265 **/
266 void wxMaracasRenderTabbedPanel::addRemoveActorSA(int id, bool addremove)
267 {
268         try{
269                 surrendmanager1->addRemoveActor(id, addremove);
270         }
271         catch(char* str){
272                 std::cout << "Exception : " << str << '\n';
273                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
274                 diag->ShowModal();
275                 delete diag;
276         }
277 }
278
279 /**
280 ** Adds or removes surface rendering actor with given ID
281 **/
282 void wxMaracasRenderTabbedPanel::addRemoveActorSB(int id, bool addremove)
283 {
284         try{
285                 surrendmanager2->addRemoveActor(id, addremove);
286         }
287         catch(char* str){
288                 std::cout << "Exception : " << str << '\n';
289                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
290                 diag->ShowModal();
291                 delete diag;
292         }
293 }
294
295 /**
296 ** Adds or removes surface rendering actor with given ID
297 **/
298 void wxMaracasRenderTabbedPanel::addRemoveActorSC(int id, bool addremove)
299 {       
300         try{
301                 surrendmanager3->addRemoveActor(id, addremove);
302         }
303         catch(char* str){
304                 std::cout << "Exception : " << str << '\n';
305                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
306                 diag->ShowModal();
307                 delete diag;
308         }
309 }       
310
311 /**
312 ** Sets color points values for the given volume rendering identified by parameter: volumeid
313 **/
314 void wxMaracasRenderTabbedPanel::SetValuesColorPointsFunction(int volid, std::vector<double> greylevelcolors,std::vector<double> red,std::vector<double> green,std::vector<double> blue)
315 {
316         volmanager->setVolumeColor(volid, greylevelcolors, red, green, blue);
317 }
318
319 /**
320 ** Sets points values for the given volume rendering identified by parameter: volumeid
321 **/
322 void wxMaracasRenderTabbedPanel::SetValuesPointsFunction(int volid, std::vector<double> greylevel, std::vector<double> values)
323 {
324         try{
325                 volmanager->setVolumeOpacity(volid, greylevel, values);
326         }
327         catch(char* str)
328         {
329                 wxString s( str,wxConvUTF8 );
330                 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
331                 diag->ShowModal();
332                 delete diag;
333         }
334         
335 }
336
337 /**
338 ** Returns transfer function for the given volume rendering identified by parameter: volumeid
339 **/
340 vtkPiecewiseFunction* wxMaracasRenderTabbedPanel::GetTransferFunction(int volumeid)
341 {
342         return volmanager->GetTransferFunction(volumeid);
343 }
344
345 /**
346 ** Returns color function for the given volume rendering identified by parameter: volumeid
347 **/
348 vtkColorTransferFunction* wxMaracasRenderTabbedPanel::GetColorFunction(int volumeid)
349 {
350     return volmanager->GetColorFunction(volumeid);
351 }
352
353 /**
354 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
355 **/
356 void wxMaracasRenderTabbedPanel::changeOpacityA(int _propid, int value)
357 {
358         surrendmanager1->changeOpacity(_propid,value);
359 }
360
361 /**
362 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
363 **/
364 void wxMaracasRenderTabbedPanel::changeIsoValueA(int propid, double value)
365 {
366         surrendmanager1->changeIsoValue(propid, value);
367 }
368
369 /**
370 ** Changes color for the given surface rendering image identified by parameter: propid
371 **/
372 void wxMaracasRenderTabbedPanel::changeColorA(int propid, double red, double green, double blue)
373 {
374         try
375         {
376                 surrendmanager1->changeColor(propid, red, green, blue);
377         }
378         catch(char* str)
379         {
380                 wxString s( str,wxConvUTF8 );
381                 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
382                 diag->ShowModal();
383                 delete diag;
384         }
385 }
386
387 /**
388 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
389 **/
390 void wxMaracasRenderTabbedPanel::changeOpacityB(int _propid, int value)
391 {
392         surrendmanager2->changeOpacity(_propid,value);
393 }
394
395 /**
396 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
397 **/
398 void wxMaracasRenderTabbedPanel::changeIsoValueB(int propid, double value)
399 {
400         surrendmanager2->changeIsoValue(propid, value);
401 }
402
403 /**
404 ** Changes color for the given surface rendering image identified by parameter: propid
405 **/
406 void wxMaracasRenderTabbedPanel::changeColorB(int propid, double red, double green, double blue)
407 {
408         try
409         {
410                 surrendmanager2->changeColor(propid, red, green, blue);
411         }
412         catch(char* str)
413         {
414                 wxString s( str,wxConvUTF8 );
415                 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
416                 diag->ShowModal();
417                 delete diag;
418         }
419 }
420
421 /**
422 ** Changes color function by the given value for the given volume rendering identified by parameter: volumeid
423 **/
424 void wxMaracasRenderTabbedPanel::changeOpacityC(int _propid, int value)
425 {
426         surrendmanager3->changeOpacity(_propid,value);
427 }
428
429 /**
430 ** Changes isoValue by the given value for the given surface rendering image identified by parameter: propid
431 **/
432 void wxMaracasRenderTabbedPanel::changeIsoValueC(int propid, double value)
433 {
434         surrendmanager3->changeIsoValue(propid, value);
435 }
436
437 /**
438 ** Changes color for the given surface rendering image identified by parameter: propid
439 **/
440 void wxMaracasRenderTabbedPanel::changeColorC(int propid, double red, double green, double blue)
441 {
442         try
443         {
444                 surrendmanager3->changeColor(propid, red, green, blue);
445         }
446         catch(char* str)
447         {
448                 wxString s( str,wxConvUTF8 );
449                 wxMessageDialog* diag = new wxMessageDialog(this, s, s, wxICON_ERROR);
450                 diag->ShowModal();
451                 delete diag;
452         }
453 }
454
455 /**
456 ** Method called when VolumeRendering checkbox status changes: Either shows or hides VolumeRendering image
457 **/
458 void wxMaracasRenderTabbedPanel::onCheckBoxVChange(wxCommandEvent& event)
459 {
460         try{
461                 volmanager->addRemoveActor(this->getPropIdV(), checkboxVol->GetValue());        
462         }
463         catch(char* str){
464                 std::cout << "Exception : " << str << '\n';
465                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
466                 diag->ShowModal();
467                 delete diag;
468         }
469 }
470
471 /**
472 ** Method called when SurfaceRendering A checkbox status changes: Either shows or hides SurfaceRendering image
473 **/
474 void wxMaracasRenderTabbedPanel::onCheckBoxSAChange(wxCommandEvent& event)
475 {       
476         try{
477                 surrendmanager1->addRemoveActor(this->getPropIdV(), checkboxSA->GetValue());    
478         }
479         catch(char* str){
480                 std::cout << "Exception : " << str << '\n';
481                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
482                 diag->ShowModal();
483                 delete diag;
484         }
485 }
486
487 /**
488 ** Method called when SurfaceRendering B checkbox status changes: Either shows or hides SurfaceRendering B image
489 **/
490 void wxMaracasRenderTabbedPanel::onCheckBoxSBChange(wxCommandEvent& event)
491 {       
492         try{
493                 surrendmanager2->addRemoveActor(this->getPropIdV(), checkboxSB->GetValue());    
494         }
495         catch(char* str){
496                 std::cout << "Exception : " << str << '\n';
497                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
498                 diag->ShowModal();
499                 delete diag;
500         }
501 }
502
503 /**
504 ** Method called when SurfaceRendering C checkbox status changes: Either shows or hides SurfaceRendering C image
505 **/
506 void wxMaracasRenderTabbedPanel::onCheckBoxSCChange(wxCommandEvent& event)
507 {       
508         try{
509                 surrendmanager3->addRemoveActor(this->getPropIdV(), checkboxSC->GetValue());    
510         }
511         catch(char* str){
512                 std::cout << "Exception : " << str << '\n';
513                 wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR);
514                 diag->ShowModal();
515                 delete diag;
516         }
517 }
518
519 /**
520 **
521 **/
522 void wxMaracasRenderTabbedPanel::onOpenParameters(wxCommandEvent& event){       
523         if(dialog == NULL){
524                 dialog = new wxMaracasRenderImageManagementPanel(this, volmanager, surrendmanager1, surrendmanager2, surrendmanager3, this->getPropIdV());
525                 dialog->SetSize(400, 580);
526         }
527         dialog->Show();
528 }
529
530
531 /**
532 ** Gets volume rendering image asociated to the given ID
533 **/
534 void wxMaracasRenderTabbedPanel::onColorChange(wxCommandEvent& event)
535 {       
536         /*Temporarily disabled*/
537
538         //if(mwxwidget->ShowModal()==wxID_OK){
539         //updateVolume();
540         //      mwxwidget->Show(false);
541         //}     
542 }
543
544 /**
545 ** 
546 **/
547 vtkImageData* wxMaracasRenderTabbedPanel::getVolImage()
548 {       
549         return volmanager->getImageData();
550 }
551
552 /**
553 ** Gets surface rendering A image asociated to the given ID
554 **/
555 vtkImageData* wxMaracasRenderTabbedPanel::getSurfAImage()
556 {       
557         return surrendmanager1->getImageData();
558 }
559
560 /**
561 ** Gets surface rendering B image asociated to the given ID
562 **/
563 vtkImageData* wxMaracasRenderTabbedPanel::getSurfBImage()
564 {       
565         return surrendmanager2->getImageData();
566 }
567
568 /**
569 ** Gets surface rendering C image asociated to the given ID
570 **/
571 vtkImageData* wxMaracasRenderTabbedPanel::getSurfCImage()
572 {       
573         return surrendmanager3->getImageData();
574 }
575
576 /**
577 **
578 **/
579 void wxMaracasRenderTabbedPanel::onOpenCutter(wxCommandEvent& event)
580 {       
581         
582 }
583
584 /**
585 **
586 **/
587 int wxMaracasRenderTabbedPanel::getPropIdV()
588 {
589         return _id;
590 }