]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasSurfaceRenderingManagerDataMhd.cxx
*** empty log message ***
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracasSurfaceRenderingManagerDataMhd.cxx
1
2 #include "wxMaracasSurfaceRenderingManagerDataMhd.h"
3 #include "vtkStripper.h"
4
5 wxMaracasSurfaceRenderingManagerDataMhd::wxMaracasSurfaceRenderingManagerDataMhd(vtkImageData* imagedata, std::string dataname, vtkRenderWindowInteractor*  interactor)
6 : wxMaracasSurfaceRenderingManagerData(NULL, dataname, interactor)
7 {
8
9         this->setVtkImageData(imagedata);
10         _dataname = dataname;
11         
12         _maxgreylevel = getMaxLevel(imagedata);
13         _prop3D=NULL;                   
14
15         _cubesFilter = vtkMarchingCubes::New();
16         _cleanFilter = vtkCleanPolyData::New();         
17         _dataMapper = vtkPolyDataMapper::New();
18         vtkActor* dataActor = vtkActor::New();
19         
20         _cubesFilter->SetInput(this->_imagedata);
21         _cubesFilter->ComputeGradientsOn ();
22         _cubesFilter->ComputeScalarsOn ();
23         _cubesFilter->SetNumberOfContours( 1 );
24         _cleanFilter->SetInput ( _cubesFilter->GetOutput() );
25         _dataMapper->SetInput(_cleanFilter->GetOutput());
26         _dataMapper->ScalarVisibilityOff();
27         _dataMapper->ImmediateModeRenderingOn();
28         dataActor->SetMapper(_dataMapper);      
29
30         this->_prop3D = dataActor;
31
32         if(_boxWidgetS1){
33                 vtkStripper* striper = vtkStripper::New();
34             striper->SetInput( _cleanFilter->GetOutput() );
35                 _boxWidgetS1->SetInput(striper->GetOutput());
36                 _boxWidgetS1->PlaceWidget();
37         }
38
39         
40
41         this->changeIsoValue(this->_maxgreylevel);      
42
43
44 }
45
46 wxMaracasSurfaceRenderingManagerDataMhd::~wxMaracasSurfaceRenderingManagerDataMhd(){    
47         _cubesFilter->Delete();
48         _cleanFilter->Delete();
49         _dataMapper->Delete();
50 }
51         
52 void wxMaracasSurfaceRenderingManagerDataMhd::UpdateSurface(){
53         _cubesFilter->Update();    
54         _cleanFilter->Update();
55         _dataMapper->Update();  
56 }
57 /**
58 **      changes the isovalue in a prop3D
59 **/
60 void wxMaracasSurfaceRenderingManagerDataMhd::changeIsoValue(double value){     
61                 
62    
63     _cubesFilter->SetValue(0,value);            
64         _cubesFilter->Update();    
65         _cleanFilter->Update();
66         _dataMapper->Update();  
67         
68         
69         
70 }
71 int wxMaracasSurfaceRenderingManagerDataMhd::getMaxGreyLevel(){
72         return _maxgreylevel;
73 }
74
75 /**
76         ** Get's the max grey level of the image
77         **/
78 int wxMaracasSurfaceRenderingManagerDataMhd::getMaxLevel(vtkImageData* img){
79
80         int ext[6], i, j, k,max=0;
81         img->GetExtent(ext);
82
83         for(i = ext[0]; i < ext[1];i++){
84                 for(j = ext[2]; j < ext[3];j++){
85                         for(k = ext[4]; k < ext[5];k++){
86                 unsigned short* ptr = (unsigned short*)img->GetScalarPointer(i,j,k);
87                                 int temp = (int)*ptr;
88                                 if(temp > max){
89                     max = temp;
90                                 }
91                         }
92                 }
93         }
94         return max;
95
96
97 }
98
99 /**
100 **      Sets the VTK image data
101 **/
102
103 void wxMaracasSurfaceRenderingManagerDataMhd::setVtkImageData(vtkImageData* imagedata){
104         _imagedata = imagedata;
105 }
106