wxMaracasSurfaceRenderingManagerDataMhd.cxx
Go to the documentation of this file.00001
00002 #include "wxMaracasSurfaceRenderingManagerDataMhd.h"
00003
00004 #include "vtkStripper.h"
00005
00006 wxMaracasSurfaceRenderingManagerDataMhd::wxMaracasSurfaceRenderingManagerDataMhd(vtkImageData* imagedata, std::string dataname, vtkRenderWindowInteractor* interactor)
00007 : wxMaracasSurfaceRenderingManagerData(NULL, dataname)
00008 {
00009
00010 this->setVtkImageData(imagedata);
00011 _dataname = dataname;
00012
00013 _maxgreylevel = getMaxLevel(imagedata);
00014 _prop3D=NULL;
00015
00016 _cubesFilter = vtkMarchingCubes::New();
00017 _cubesFilter->SetInput(this->_imagedata);
00018 _cubesFilter->ComputeGradientsOn ();
00019 _cubesFilter->ComputeScalarsOn ();
00020 _cubesFilter->SetNumberOfContours( 1 );
00021 _cleanFilter = vtkCleanPolyData::New();
00022 _cleanFilter->SetInput ( _cubesFilter->GetOutput() );
00023
00024 _dataMapper = vtkPolyDataMapper::New( );
00025 _dataMapper->ScalarVisibilityOff( );
00026 _dataMapper->ImmediateModeRenderingOn();
00027 vtkActor* dataActor = vtkActor::New();
00028
00029
00030 if(interactor){
00031
00032 _boxWidgetS1 = vtkBoxWidget::New();
00033 _boxWidgetS1->SetInteractor( interactor );
00034 _boxWidgetS1->SetPlaceFactor(1.25);
00035
00036 _boxWidgetS1->SetInput( this->_imagedata );
00037 _boxWidgetS1->PlaceWidget();
00038 boxSurfaceObserver* observer = boxSurfaceObserver::New();
00039
00040 vtkStripper* striper = vtkStripper::New();
00041 striper->SetInput( _cleanFilter->GetOutput() );
00042
00043
00044 striper->Update();
00045 _boxWidgetS1->SetInput(striper->GetOutput());
00046 _boxWidgetS1->PlaceWidget();
00047
00048 _boxWidgetS1->HandlesOn ();
00049 _boxWidgetS1->On();
00050
00051 _tissuePlanes = vtkPlanes::New();
00052
00053 int x1,x2,y1,y2,z1,z2;
00054 this->_imagedata->GetExtent(x1,x2,y1,y2,z1,z2);
00055 _tissuePlanes->SetBounds (x1,x2,y1,y2,z1,z2);
00056
00057
00058
00059 _boxWidgetS1->GetPlanes( _tissuePlanes );
00060
00061 _tissueClipper = vtkClipPolyData::New();
00062 _tissueClipper->SetInput( striper->GetOutput() );
00063 _tissueClipper->SetClipFunction( _tissuePlanes );
00064 _tissueClipper->InsideOutOn( );
00065 _dataMapper->SetInput( _tissueClipper->GetOutput() );
00066 observer->SetPlanes( _tissuePlanes );
00067 observer->SetActor( dataActor );
00068 _boxWidgetS1->AddObserver( vtkCommand::InteractionEvent , observer );
00069
00070
00071 _boxWidgetS1->HandlesOn ();
00072 _boxWidgetS1->On();
00073 }else{
00074 _dataMapper->SetInput(_cleanFilter->GetOutput());
00075 }
00076
00077 dataActor->SetMapper(_dataMapper);
00078 this->_prop3D = dataActor;
00079
00080
00081
00082
00083 this->changeIsoValue(this->_maxgreylevel);
00084
00085
00086 }
00087
00088
00089 wxMaracasSurfaceRenderingManagerDataMhd::~wxMaracasSurfaceRenderingManagerDataMhd()
00090 {
00091 _cubesFilter->Delete();
00092 _cleanFilter->Delete();
00093 _dataMapper->Delete();
00094 }
00095
00096 void wxMaracasSurfaceRenderingManagerDataMhd::UpdateSurface()
00097 {
00098 _cubesFilter->Update();
00099 _cleanFilter->Update();
00100 _dataMapper->Update();
00101 }
00105 void wxMaracasSurfaceRenderingManagerDataMhd::changeIsoValue(double value){
00106
00107
00108 _cubesFilter->SetValue(0,value);
00109 _cubesFilter->Update();
00110 _cleanFilter->Update();
00111 _dataMapper->Update();
00112
00113
00114
00115 }
00116 int wxMaracasSurfaceRenderingManagerDataMhd::getMaxGreyLevel(){
00117 return _maxgreylevel;
00118 }
00119
00123 int wxMaracasSurfaceRenderingManagerDataMhd::getMaxLevel(vtkImageData* img){
00124
00125 int ext[6], i, j, k,max=0;
00126 img->GetExtent(ext);
00127
00128 for(i = ext[0]; i < ext[1];i++){
00129 for(j = ext[2]; j < ext[3];j++){
00130 for(k = ext[4]; k < ext[5];k++){
00131 unsigned short* ptr = (unsigned short*)img->GetScalarPointer(i,j,k);
00132 int temp = (int)*ptr;
00133 if(temp > max){
00134 max = temp;
00135 }
00136 }
00137 }
00138 }
00139 return max;
00140
00141
00142 }
00143
00148 void wxMaracasSurfaceRenderingManagerDataMhd::setVtkImageData(vtkImageData* imagedata){
00149 _imagedata = imagedata;
00150 }
00151