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