]> Creatis software - creaMaracasVisu.git/blob - lib/Kernel/VTKObjects/SurfaceRenderer/wxMaracasSurfaceRenderingManagerDataMhd.cxx
3deb86ef088541c86dd48093bcd77fbbdacbe309
[creaMaracasVisu.git] / lib / Kernel / VTKObjects / SurfaceRenderer / wxMaracasSurfaceRenderingManagerDataMhd.cxx
1
2 #include "wxMaracasSurfaceRenderingManagerDataMhd.h"
3
4 #include "vtkStripper.h"
5
6
7 wxMaracasSurfaceRenderingManagerDataMhd::wxMaracasSurfaceRenderingManagerDataMhd(vtkImageData* imagedata, std::string dataname, vtkRenderWindowInteractor*  interactor)
8 : wxMaracasSurfaceRenderingManagerData(NULL, dataname)
9 {
10
11         this->setVtkImageData(imagedata);
12         _dataname = dataname;
13         
14         _maxgreylevel = getMaxLevel(imagedata);
15         _prop3D=NULL;                   
16
17         _cubesFilter = vtkMarchingCubes::New(); 
18         _cubesFilter->SetInput(this->_imagedata);               
19         _cubesFilter->ComputeGradientsOn ();
20         _cubesFilter->ComputeScalarsOn ();
21         _cubesFilter->SetNumberOfContours( 1 );
22         _cleanFilter = vtkCleanPolyData::New();         
23         _cleanFilter->SetInput ( _cubesFilter->GetOutput() );
24
25         _dataMapper = vtkPolyDataMapper::New( );
26         _dataMapper->ScalarVisibilityOff( );
27         _dataMapper->ImmediateModeRenderingOn();
28         vtkActor* dataActor = vtkActor::New();
29
30         //if(_boxWidgetS1){
31         if(interactor){
32             _boxWidgetS1 = vtkBoxWidget::New();
33             _boxWidgetS1->SetInteractor( interactor );
34             _boxWidgetS1->SetPlaceFactor(1.25);
35
36             _boxWidgetS1->SetInput( this->_imagedata );
37             _boxWidgetS1->PlaceWidget();
38             boxSurfaceObserver* observer = boxSurfaceObserver::New();
39
40             vtkStripper* striper = vtkStripper::New();
41             striper->SetInput( _cleanFilter->GetOutput() );
42             //striper->SetInput( _cubesFilter->GetOutput() );
43
44             striper->Update();
45             _boxWidgetS1->SetInput(striper->GetOutput());
46             //_boxWidgetS1->PlaceWidget();
47
48
49             _tissuePlanes  = vtkPlanes::New();
50
51             int x1,x2,y1,y2,z1,z2;
52             this->_imagedata->GetExtent(x1,x2,y1,y2,z1,z2);
53             _tissuePlanes->SetBounds  (x1,x2,y1,y2,z1,z2);
54
55
56
57             _boxWidgetS1->GetPlanes( _tissuePlanes );
58
59             _tissueClipper = vtkClipPolyData::New();
60             _tissueClipper->SetInput( striper->GetOutput() );
61             _tissueClipper->SetClipFunction( _tissuePlanes );
62             _tissueClipper->InsideOutOn( );
63             _dataMapper->SetInput( _tissueClipper->GetOutput() );
64             observer->SetPlanes( _tissuePlanes );
65             observer->SetActor( dataActor );
66             _boxWidgetS1->AddObserver( vtkCommand::InteractionEvent              , observer );
67
68
69             _boxWidgetS1->HandlesOn ();
70             _boxWidgetS1->EnabledOff();
71         }else{          
72                 _dataMapper->SetInput(_cleanFilter->GetOutput());                               
73         }
74         
75         dataActor->SetMapper(_dataMapper);      
76         this->_prop3D = dataActor;
77
78         
79         
80
81         this->changeIsoValue(this->_maxgreylevel);      
82
83
84 }
85
86 void wxMaracasSurfaceRenderingManagerDataMhd::enableBoxWidget(bool enable){
87
88     if(_boxWidgetS1){
89         if(enable){
90             _boxWidgetS1->EnabledOn();
91         }else{
92             _boxWidgetS1->EnabledOff();
93         }
94     }else{
95         cout<<"box widget not initialized!"<<endl;
96     }
97 }
98
99
100 wxMaracasSurfaceRenderingManagerDataMhd::~wxMaracasSurfaceRenderingManagerDataMhd()
101 {
102         _cubesFilter->Delete();
103         _cleanFilter->Delete();
104         _dataMapper->Delete();
105 }
106         
107 void wxMaracasSurfaceRenderingManagerDataMhd::UpdateSurface()
108 {
109         _cubesFilter->Update();    
110         _cleanFilter->Update();
111         _dataMapper->Update();  
112 }
113 /**
114 **      changes the isovalue in a prop3D
115 **/
116 void wxMaracasSurfaceRenderingManagerDataMhd::changeIsoValue(double value){     
117                 
118    
119     _cubesFilter->SetValue(0,value);            
120         _cubesFilter->Update();    
121         _cleanFilter->Update();
122         _dataMapper->Update();  
123         
124         
125         
126 }
127 /**
128 **      changes the isovalue in a prop3D
129 **/
130 void wxMaracasSurfaceRenderingManagerDataMhd::changeIsoValue(double min, double max){
131
132
133     _cubesFilter->SetValue(min,max);
134         _cubesFilter->Update();
135         _cleanFilter->Update();
136         _dataMapper->Update();
137
138
139
140 }
141 int wxMaracasSurfaceRenderingManagerDataMhd::getMaxGreyLevel(){
142         return _maxgreylevel;
143 }
144
145 /**
146         ** Get's the max grey level of the image
147         **/
148 int wxMaracasSurfaceRenderingManagerDataMhd::getMaxLevel(vtkImageData* img){
149
150         int ext[6], i, j, k,max=0;
151         img->GetExtent(ext);
152
153         for(i = ext[0]; i < ext[1];i++){
154                 for(j = ext[2]; j < ext[3];j++){
155                         for(k = ext[4]; k < ext[5];k++){
156                 unsigned short* ptr = (unsigned short*)img->GetScalarPointer(i,j,k);
157                                 int temp = (int)*ptr;
158                                 if(temp > max){
159                     max = temp;
160                                 }
161                         }
162                 }
163         }
164         return max;
165
166
167 }
168
169 /**
170 **      Sets the VTK image data
171 **/
172
173 void wxMaracasSurfaceRenderingManagerDataMhd::setVtkImageData(vtkImageData* imagedata){
174         _imagedata = imagedata;
175 }
176
177
178
179