00001 00002 #include "wxMaracasIRMViewManagerDataMhd.h" 00003 00004 wxMaracasIRMViewManagerDataMhd::wxMaracasIRMViewManagerDataMhd(vtkImageData* imagedata, std::string dataname) 00005 : wxMaracasIRMViewManagerData(NULL, dataname) 00006 { 00007 00008 this->setVtkImageData(imagedata); 00009 _dataname = dataname; 00010 00011 _maxgreylevel = getMaxLevel(imagedata); 00012 _prop3D=NULL; 00013 00014 _cubesFilter = vtkMarchingCubes::New(); 00015 _cleanFilter = vtkCleanPolyData::New(); 00016 _dataMapper = vtkPolyDataMapper::New(); 00017 vtkActor* dataActor = vtkActor::New(); 00018 00019 _cubesFilter->SetInput(this->_imagedata); 00020 _cubesFilter->ComputeGradientsOn (); 00021 _cubesFilter->ComputeScalarsOn (); 00022 _cubesFilter->SetNumberOfContours( 1 ); 00023 _cleanFilter->SetInput ( _cubesFilter->GetOutput() ); 00024 _dataMapper->SetInput(_cleanFilter->GetOutput()); 00025 _dataMapper->ScalarVisibilityOff(); 00026 _dataMapper->ImmediateModeRenderingOn(); 00027 dataActor->SetMapper(_dataMapper); 00028 00029 this->_prop3D = dataActor; 00030 00031 this->changeIsoValue(this->_maxgreylevel); 00032 00033 00034 } 00035 00036 wxMaracasIRMViewManagerDataMhd::~wxMaracasIRMViewManagerDataMhd(){ 00037 _cubesFilter->Delete(); 00038 _cleanFilter->Delete(); 00039 _dataMapper->Delete(); 00040 } 00041 00042 00046 void wxMaracasIRMViewManagerDataMhd::changeIsoValue(double value){ 00047 00048 00049 _cubesFilter->SetValue(0,value); 00050 _cubesFilter->Update(); 00051 _cleanFilter->Update(); 00052 _dataMapper->Update(); 00053 00054 00055 00056 } 00057 int wxMaracasIRMViewManagerDataMhd::getMaxGreyLevel(){ 00058 return _maxgreylevel; 00059 } 00060 00064 int wxMaracasIRMViewManagerDataMhd::getMaxLevel(vtkImageData* img){ 00065 00066 int ext[6], i, j, k,max=0; 00067 img->GetExtent(ext); 00068 00069 for(i = ext[0]; i < ext[1];i++){ 00070 for(j = ext[2]; j < ext[3];j++){ 00071 for(k = ext[4]; k < ext[5];k++){ 00072 unsigned short* ptr = (unsigned short*)img->GetScalarPointer(i,j,k); 00073 int temp = (int)*ptr; 00074 if(temp > max){ 00075 max = temp; 00076 } 00077 } 00078 } 00079 } 00080 return max; 00081 00082 00083 } 00084 00089 void wxMaracasIRMViewManagerDataMhd::setVtkImageData(vtkImageData* imagedata){ 00090 _imagedata = imagedata; 00091 } 00092