00001 /*========================================================================= 00002 00003 00004 =========================================================================*/ 00005 #include "marImageData.h" 00006 00007 // ---------------------------------------------------------------------------------------------- 00008 marImageData::marImageData(vtkImageData *imagedata) 00009 { 00010 _spcOriginal[0] = 1; 00011 _spcOriginal[1] = 1; 00012 _spcOriginal[2] = 1; 00013 _voiOriginal[0] = 0; 00014 _voiOriginal[1] = 0; 00015 _voiOriginal[2] = 0; 00016 _voiOriginal[3] = 0; 00017 _voiOriginal[4] = 0; 00018 _voiOriginal[5] = 0; 00019 if(imagedata!=NULL){ 00020 AddImageData(imagedata); 00021 } 00022 } 00023 // ---------------------------------------------------------------------------------------------- 00024 marImageData::~marImageData() 00025 { 00026 int i,size=_imagedataLST.size(); 00027 for (i=0;i<size;i++) 00028 { 00029 // _imagedataLST[i]->Delete(); 00030 } 00031 _imagedataLST.clear(); 00032 } 00033 00034 // ---------------------------------------------------------------------------------------------- 00035 void marImageData::SetSpcOriginal(double spc[3]) 00036 { 00037 this->_spcOriginal[0]=spc[0]; 00038 this->_spcOriginal[1]=spc[1]; 00039 this->_spcOriginal[2]=spc[2]; 00040 } 00041 // ---------------------------------------------------------------------------------------------- 00042 void marImageData::SetVoiOriginal(int voi[6]) 00043 { 00044 int i; 00045 for (i=0;i<6;i++) 00046 { 00047 this->_voiOriginal[i] = voi[i]; 00048 } 00049 } 00050 // ---------------------------------------------------------------------------------------------- 00051 void marImageData::AddImageData(vtkImageData *imagedata) 00052 { 00053 if (imagedata!=NULL){ 00054 _imagedataLST.push_back( imagedata ); 00055 } 00056 } 00057 // ---------------------------------------------------------------------------------------------- 00058 void marImageData::GetSpcOriginal(double spc[3]) 00059 { 00060 spc[0] = this->_spcOriginal[0]; 00061 spc[1] = this->_spcOriginal[1]; 00062 spc[2] = this->_spcOriginal[2]; 00063 } 00064 // ---------------------------------------------------------------------------------------------- 00065 void marImageData::GetVoiOriginal(int voi[6]) 00066 { 00067 int i; 00068 for (i=0;i<6;i++) 00069 { 00070 voi[i] = this->_voiOriginal[i]; 00071 } 00072 } 00073 // ---------------------------------------------------------------------------------------------- 00074 vtkImageData *marImageData::GetImageDataT(int t) 00075 { 00076 if(_imagedataLST.size() > t){ 00077 return _imagedataLST[t]; 00078 } 00079 return NULL; 00080 } 00081 // ---------------------------------------------------------------------------------------------- 00082 vtkImageData *marImageData::GetImageData() 00083 { 00084 if(_imagedataLST.size()>0){ 00085 return _imagedataLST[0]; 00086 } 00087 return NULL; 00088 } 00089 00090 void marImageData::removeImageData(int index) 00091 { 00092 if(index < _imagedataLST.size()){ 00093 00094 /*vtkImageData* img = _imagedataLST[index]; 00095 if(img->GetReferenceCount()>1){ 00096 img->SetReferenceCount(img->GetReferenceCount()-1); 00097 //img->Delete(); 00098 }*/ 00099 for(int i = index; i < _imagedataLST.size()-1; i++){ 00100 _imagedataLST[i] = _imagedataLST[i+1]; 00101 } 00102 _imagedataLST.pop_back(); 00103 //delete img; 00104 } 00105 } 00106 // ---------------------------------------------------------------------------------------------- 00107 int marImageData::GetXOriginal(int value) 00108 { 00109 double min=_spcOriginal[0]; 00110 if (_spcOriginal[1]<min) 00111 { 00112 min = _spcOriginal[1]; 00113 } 00114 if (_spcOriginal[2]<min) 00115 { 00116 min = _spcOriginal[2]; 00117 } 00118 double result = value / ( _spcOriginal[0] / min ) ; 00119 result=result + _voiOriginal[0]; 00120 return (int)result; 00121 } 00122 // ---------------------------------------------------------------------------------------------- 00123 int marImageData::GetYOriginal(int value) 00124 { 00125 double min=_spcOriginal[0]; 00126 if (_spcOriginal[1]<min) 00127 { 00128 min = _spcOriginal[1]; 00129 } 00130 if (_spcOriginal[2]<min) 00131 { 00132 min = _spcOriginal[2]; 00133 } 00134 double result = value / ( _spcOriginal[1] / min ) ; 00135 result=result + _voiOriginal[2]; 00136 return (int)result; 00137 } 00138 // ---------------------------------------------------------------------------------------------- 00139 int marImageData::GetZOriginal(int value) 00140 { 00141 double min=_spcOriginal[0]; 00142 if (_spcOriginal[1]<min) 00143 { 00144 min = _spcOriginal[1]; 00145 } 00146 if (_spcOriginal[2]<min) 00147 { 00148 min = _spcOriginal[2]; 00149 } 00150 double result = value / ( _spcOriginal[2] / min ) ; 00151 result=result + _voiOriginal[4]; 00152 return (int)result; 00153 } 00154 // ---------------------------------------------------------------------------------------------- 00155 int marImageData::GetMaxT() 00156 { 00157 return _imagedataLST.size(); 00158 }