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 _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() );
25 _dataMapper = vtkPolyDataMapper::New( );
26 _dataMapper->ScalarVisibilityOff( );
27 _dataMapper->ImmediateModeRenderingOn();
28 vtkActor* dataActor = vtkActor::New();
32 _boxWidgetS1 = vtkBoxWidget::New();
33 _boxWidgetS1->SetInteractor( interactor );
34 _boxWidgetS1->SetPlaceFactor(1.25);
36 _boxWidgetS1->SetInput( this->_imagedata );
37 _boxWidgetS1->PlaceWidget();
38 boxSurfaceObserver* observer = boxSurfaceObserver::New();
40 vtkStripper* striper = vtkStripper::New();
41 striper->SetInput( _cleanFilter->GetOutput() );
42 //striper->SetInput( _cubesFilter->GetOutput() );
45 _boxWidgetS1->SetInput(striper->GetOutput());
46 //_boxWidgetS1->PlaceWidget();
49 _tissuePlanes = vtkPlanes::New();
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);
57 _boxWidgetS1->GetPlanes( _tissuePlanes );
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 );
69 _boxWidgetS1->HandlesOn ();
70 _boxWidgetS1->EnabledOn();
72 _dataMapper->SetInput(_cleanFilter->GetOutput());
75 dataActor->SetMapper(_dataMapper);
76 this->_prop3D = dataActor;
81 this->changeIsoValue(this->_maxgreylevel);
86 void wxMaracasSurfaceRenderingManagerDataMhd::enableBoxWidget(bool enable){
90 _boxWidgetS1->EnabledOn();
92 _boxWidgetS1->EnabledOff();
98 wxMaracasSurfaceRenderingManagerDataMhd::~wxMaracasSurfaceRenderingManagerDataMhd()
100 _cubesFilter->Delete();
101 _cleanFilter->Delete();
102 _dataMapper->Delete();
105 void wxMaracasSurfaceRenderingManagerDataMhd::UpdateSurface()
107 _cubesFilter->Update();
108 _cleanFilter->Update();
109 _dataMapper->Update();
112 ** changes the isovalue in a prop3D
114 void wxMaracasSurfaceRenderingManagerDataMhd::changeIsoValue(double value){
117 _cubesFilter->SetValue(0,value);
118 _cubesFilter->Update();
119 _cleanFilter->Update();
120 _dataMapper->Update();
126 ** changes the isovalue in a prop3D
128 void wxMaracasSurfaceRenderingManagerDataMhd::changeIsoValue(double min, double max){
131 _cubesFilter->SetValue(min,max);
132 _cubesFilter->Update();
133 _cleanFilter->Update();
134 _dataMapper->Update();
139 int wxMaracasSurfaceRenderingManagerDataMhd::getMaxGreyLevel(){
140 return _maxgreylevel;
144 ** Get's the max grey level of the image
146 int wxMaracasSurfaceRenderingManagerDataMhd::getMaxLevel(vtkImageData* img){
148 int ext[6], i, j, k,max=0;
151 for(i = ext[0]; i < ext[1];i++){
152 for(j = ext[2]; j < ext[3];j++){
153 for(k = ext[4]; k < ext[5];k++){
154 unsigned short* ptr = (unsigned short*)img->GetScalarPointer(i,j,k);
155 int temp = (int)*ptr;
168 ** Sets the VTK image data
171 void wxMaracasSurfaceRenderingManagerDataMhd::setVtkImageData(vtkImageData* imagedata){
172 _imagedata = imagedata;