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         //if(_boxWidgetS1){
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                 //striper->SetInput( _cubesFilter->GetOutput() );
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 

Generated on 18 Mar 2010 for creaMaracasVisu_lib by  doxygen 1.6.1