2 #include "wxMaracasSurfaceRenderingManagerDataMhd.h"
4 #include "vtkStripper.h"
7 wxMaracasSurfaceRenderingManagerDataMhd::wxMaracasSurfaceRenderingManagerDataMhd(vtkImageData* imagedata, std::string dataname, vtkRenderWindowInteractor* interactor)
8 : wxMaracasSurfaceRenderingManagerData(NULL, dataname)
11 this->setVtkImageData(imagedata);
14 _maxgreylevel = getMaxLevel(imagedata);
17 _tresholdFilter = vtkImageThreshold::New();
18 _tresholdFilter->SetInput(this->_imagedata);
19 _tresholdFilter->SetInValue(255);
20 _tresholdFilter->SetOutValue(0);
23 _cubesFilter = vtkMarchingCubes::New();
24 _cubesFilter->SetInput(_tresholdFilter->GetOutput());
25 //_cubesFilter->ComputeGradientsOn();
26 _cubesFilter->ComputeScalarsOn();
27 _cubesFilter->ComputeNormalsOn();
28 _cubesFilter->SetNumberOfContours( 1 );
29 _cleanFilter = vtkCleanPolyData::New();
30 _cleanFilter->SetInput ( _cubesFilter->GetOutput() );
32 _smooth = vtkSmoothPolyDataFilter::New();
33 _smooth->SetInput(_cleanFilter->GetOutput());
34 _smooth->SetNumberOfIterations(6);
35 _smooth->SetRelaxationFactor(0.3);
36 //_smooth->FeatureEdgeSmoothingOff();
38 _dataMapper = vtkPolyDataMapper::New( );
39 _dataMapper->ScalarVisibilityOff( );
40 _dataMapper->ImmediateModeRenderingOn();
41 vtkActor* dataActor = vtkActor::New();
45 _boxWidgetS1 = vtkBoxWidget::New();
46 _boxWidgetS1->SetInteractor( interactor );
47 _boxWidgetS1->SetPlaceFactor(1.25);
49 _boxWidgetS1->SetInput( this->_imagedata );
50 _boxWidgetS1->PlaceWidget();
51 boxSurfaceObserver* observer = boxSurfaceObserver::New();
53 vtkStripper* striper = vtkStripper::New();
54 striper->SetInput( _smooth->GetOutput() );
55 //striper->SetInput( _cleanFilter->GetOutput() );
58 _boxWidgetS1->SetInput(striper->GetOutput());
59 //_boxWidgetS1->PlaceWidget();
62 _tissuePlanes = vtkPlanes::New();
64 int x1,x2,y1,y2,z1,z2;
65 this->_imagedata->GetExtent(x1,x2,y1,y2,z1,z2);
66 _tissuePlanes->SetBounds (x1,x2,y1,y2,z1,z2);
70 _boxWidgetS1->GetPlanes( _tissuePlanes );
72 _tissueClipper = vtkClipPolyData::New();
73 _tissueClipper->SetInput( striper->GetOutput() );
74 _tissueClipper->SetClipFunction( _tissuePlanes );
75 _tissueClipper->InsideOutOn( );
76 _dataMapper->SetInput( _tissueClipper->GetOutput() );
77 observer->SetPlanes( _tissuePlanes );
78 observer->SetActor( dataActor );
79 _boxWidgetS1->AddObserver( vtkCommand::InteractionEvent , observer );
82 _boxWidgetS1->HandlesOn ();
83 _boxWidgetS1->EnabledOff();
85 //_dataMapper->SetInput(_cleanFilter->GetOutput());
86 _dataMapper->SetInput(_smooth->GetOutput());
89 dataActor->SetMapper(_dataMapper);
90 float cr=1,cg=0.5,cb=0.5;
91 dataActor->GetProperty()->SetDiffuseColor(1,0.5,0.5 );
92 dataActor->GetProperty()->SetSpecular(.3);
93 dataActor->GetProperty()->SetSpecularPower(20);
95 this->_prop3D = dataActor;
98 this->changeIsoValue(this->_maxgreylevel);
103 void wxMaracasSurfaceRenderingManagerDataMhd::enableBoxWidget(bool enable){
107 _boxWidgetS1->EnabledOn();
109 _boxWidgetS1->EnabledOff();
112 cout<<"box widget not initialized!"<<endl;
117 wxMaracasSurfaceRenderingManagerDataMhd::~wxMaracasSurfaceRenderingManagerDataMhd()
119 _cubesFilter->Delete();
120 _cleanFilter->Delete();
121 _dataMapper->Delete();
124 void wxMaracasSurfaceRenderingManagerDataMhd::UpdateSurface()
126 _cubesFilter->Update();
127 _cleanFilter->Update();
128 _dataMapper->Update();
131 ** changes the isovalue in a prop3D
133 void wxMaracasSurfaceRenderingManagerDataMhd::changeIsoValue(double value){
136 _tresholdFilter->ThresholdByLower(value);
137 _tresholdFilter->Update();
139 _cubesFilter->SetValue(0,255);
140 _cubesFilter->Update();
141 _cleanFilter->Update();
142 _dataMapper->Update();
148 ** changes the isovalue in a prop3D
150 void wxMaracasSurfaceRenderingManagerDataMhd::changeIsoValue(double min, double max){
152 _tresholdFilter->ThresholdBetween(min, max);
153 _tresholdFilter->Update();
154 _cubesFilter->SetValue(0,255);
155 _cubesFilter->Update();
156 _cleanFilter->Update();
157 _dataMapper->Update();
162 int wxMaracasSurfaceRenderingManagerDataMhd::getMaxGreyLevel(){
163 return _maxgreylevel;
167 ** Get's the max grey level of the image
169 int wxMaracasSurfaceRenderingManagerDataMhd::getMaxLevel(vtkImageData* img){
171 int ext[6], i, j, k,max=0;
174 for(i = ext[0]; i < ext[1];i++){
175 for(j = ext[2]; j < ext[3];j++){
176 for(k = ext[4]; k < ext[5];k++){
177 unsigned short* ptr = (unsigned short*)img->GetScalarPointer(i,j,k);
178 int temp = (int)*ptr;
191 ** Sets the VTK image data
194 void wxMaracasSurfaceRenderingManagerDataMhd::setVtkImageData(vtkImageData* imagedata){
195 _imagedata = imagedata;