Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

Data Class Reference

#include <data.h>

List of all members.

Public Methods

 Data ()
 ~Data ()
bool SetPreCalc (bool pc)
void SetFileThreshold (int dFileThreshold)
void SetDataPackets (int dDataPack)
short GetXDim ()
short GetYDim ()
short GetZDim ()
int GetHistogram (int density)
int GetDensity (int x, int y, int z)
void LoadData (char *fname)
gradient_t CalcGrad (int x, int y, int z)
void SetAbort (void)

Public Attributes

string filename

Private Methods

bool CalcDensityHistogram ()
bool CalcGradients ()

Private Attributes

int m_FileThreshold
int m_DataPackets
bool m_bAbort
short xDim
short yDim
short zDim
int xyDim
int size
short * data
gradient_tgradients
int histogram [4096]
bool precalc


Constructor & Destructor Documentation

Data::Data   [inline]
 

Definition at line 42 of file data.h.

References MB_TO_DATASET_THRES.

00042                { xDim = 0;
00043                         yDim = 0;
00044                         zDim = 0;
00045                         xyDim = 0;
00046                         size = 0;
00047                         data = NULL;
00048                         gradients = NULL;
00049                         precalc = false;
00050                         m_FileThreshold = 40;
00051                         m_DataPackets = MB_TO_DATASET_THRES(10);
00052                         m_bAbort = false;
00053         };

Data::~Data   [inline]
 

Definition at line 55 of file data.h.

00055 { if(data!= NULL)delete data; if(gradients != NULL)delete gradients;};


Member Function Documentation

bool Data::CalcDensityHistogram   [private]
 

Definition at line 36 of file data.cpp.

References data, histogram, and size.

Referenced by LoadData().

00037 {
00038         for (int i = 0; i < 4096; i++)
00039         {
00040                 histogram[i] = 0;
00041         }
00042 
00043         for (int j = 0; j < size; j++)
00044         {
00045                 histogram[data[j]] += 1;
00046         }
00047         
00048         return true;
00049 }

gradient_t Data::CalcGrad int    x,
int    y,
int    z
 

Definition at line 60 of file data.cpp.

References CalcGradients(), GetDensity(), gradients, precalc, gradient_t::x, xDim, xyDim, gradient_t::y, yDim, gradient_t::z, and zDim.

Referenced by Trilinear::CalcGradTrilinear(), and Ray::Lighting().

00060                                   {
00061         if(precalc && gradients == NULL) CalcGradients();
00062         if(x < 0) x = 0;
00063         if(x > xDim-1) x = xDim-1;
00064         if(z < 0) z = 0;
00065         if(z > zDim-1) z = zDim-1;
00066         if(y < 0) y = 0;
00067         if(y > yDim-1) y = yDim-1;
00068         gradient_t res;
00069         if(!precalc) {
00070                 res.x = ((float)(GetDensity(x+1,y,z) - GetDensity(x-1,y,z)))/2.0;
00071                 res.y = ((float)(GetDensity(x,y+1,z) - GetDensity(x,y-1,z)))/2.0;
00072                 res.z = ((float)(GetDensity(x,y,z+1) - GetDensity(x,y,z-1)))/2.0;
00073         } else {
00074                 res = gradients[z*xyDim+y*xDim+x];
00075         }
00076         return res;
00077 }

bool Data::CalcGradients   [private]
 

Definition at line 80 of file data.cpp.

References GetDensity(), gradients, xDim, xyDim, yDim, and zDim.

Referenced by CalcGrad().

00080                     {
00081         if (gradients != NULL) return false;
00082         gradients = new gradient_t[xDim*yDim*zDim];
00083 
00084         for(int z = 0; z < zDim; z++) {
00085                 for(int y = 0; y < yDim; y++) {
00086                         for(int x = 0; x < xDim; x++) {
00087                                 gradients[z*xyDim+y*xDim+x].x = ((float)(GetDensity(x+1,y,z) - GetDensity(x-1,y,z)))/2.0;
00088                                 gradients[z*xyDim+y*xDim+x].y = ((float)(GetDensity(x,y+1,z) - GetDensity(x,y-1,z)))/2.0;
00089                                 gradients[z*xyDim+y*xDim+x].z = ((float)(GetDensity(x,y,z+1) - GetDensity(x,y,z-1)))/2.0;
00090                         }
00091                 }
00092         }
00093         
00094         return true;
00095 }

int Data::GetDensity int    x,
int    y,
int    z
 

Definition at line 24 of file data.cpp.

References data, xDim, xyDim, yDim, and zDim.

Referenced by Trilinear::CalcAlphaTrilinear(), Trilinear::CalcColorTrilinear(), CalcGrad(), CalcGradients(), AverageNN::CastNext(), XRayNN::CastNext(), MaxIntensityNN::CastNext(), FirstHitNN::CastNext(), Ray::CastNext(), FirstHitTRI::GetDensity(), and Slice::SetPixels().

00025 {
00026         if(x <0) x =0;
00027         if(y<0) y=0;
00028         if(z<0) z=0;
00029         if(x > xDim - 1) x = xDim-1;
00030         if(y > yDim - 1) y = yDim-1;
00031         if(z > zDim - 1) z = zDim-1;
00032         return (int)data[z*xyDim+y*xDim+x];
00033 }

int Data::GetHistogram int    density
 

Definition at line 52 of file data.cpp.

References histogram.

Referenced by transferfuncform::m_DrawHistogram().

00053 {
00054         if(density < 0) density = 0;
00055         if(density >= 4096) density = 4095;
00056         return histogram[density];
00057 }

short Data::GetXDim  
 

Definition at line 198 of file data.cpp.

References xDim.

Referenced by Slice::GetSliceNumber(), Perspective::Initialize(), Raycaster::Initialize(), Ray::Initialize(), Perspective::RotateX(), Raycaster::RotateX(), Perspective::RotateY(), Raycaster::RotateY(), Perspective::RotateZ(), Raycaster::RotateZ(), Slice::SetPixels(), Raycaster::SetViewingPlanePos(), and Raycaster::Zoom().

00199 {
00200         return xDim;
00201 }

short Data::GetYDim  
 

Definition at line 204 of file data.cpp.

References yDim.

Referenced by Slice::GetSliceNumber(), Perspective::Initialize(), Raycaster::Initialize(), Ray::Initialize(), Perspective::RotateX(), Raycaster::RotateX(), Perspective::RotateY(), Raycaster::RotateY(), Perspective::RotateZ(), Raycaster::RotateZ(), Slice::SetPixels(), Raycaster::SetViewingPlanePos(), and Raycaster::Zoom().

00205 {
00206         return yDim;
00207 }

short Data::GetZDim  
 

Definition at line 210 of file data.cpp.

References zDim.

Referenced by Slice::GetSliceNumber(), Perspective::Initialize(), Raycaster::Initialize(), Ray::Initialize(), Perspective::RotateX(), Raycaster::RotateX(), Perspective::RotateY(), Raycaster::RotateY(), Perspective::RotateZ(), Raycaster::RotateZ(), Slice::SetPixels(), Raycaster::SetViewingPlanePos(), and Raycaster::Zoom().

00211 {
00212         return zDim;
00213 }

void Data::LoadData char *    fname
 

Definition at line 99 of file data.cpp.

References CalcDensityHistogram(), data, DATASET_TO_MB, filename, m_bAbort, m_DataPackets, m_FileThreshold, size, xDim, xyDim, yDim, and zDim.

00100 {
00101 
00102         char *filename = (char *)fname;
00103         
00104         FILE *filePtr;
00105         
00106         // open File
00107         filePtr = fopen(filename, "rb");
00108         if(!filePtr) return;// false;
00109 
00110         //getting headerinfo
00111         fread(&xDim, sizeof(short),1,filePtr);
00112         fread(&yDim, sizeof(short),1,filePtr);
00113         fread(&zDim, sizeof(short),1,filePtr);
00114 
00115         xyDim = (int)xDim*yDim;
00116 
00117 
00118         size = xyDim * zDim;
00119         data = new short[size];
00120 
00121         
00122         CWnd* pFrame = AfxGetMainWnd();
00123 
00124         int loadSize = (size) / 100;
00125         int counter = loadSize;
00126         int pos = 0;
00127         int fileSize = 0;
00128 
00129         /* 
00130         size means the size in data-sets!!
00131         partially loading if approx filesize is greater than 40MB
00132         (size * 16) / 8 / 1024 / 1024  =  (size >> 19)
00133         */
00134         if ((m_FileThreshold != 0) &&
00135                 (fileSize = DATASET_TO_MB(size)) >= m_FileThreshold) {
00136                 int pieces = size / m_DataPackets;
00137 
00138 
00139 
00140 
00141                 pFrame->SendMessage(MYWM_PROGRESS_MIN_MAX, 0, pieces);
00142 
00143                 int tempSize = size;
00144 
00145                 for (int i = 0; i < pieces; i++) {
00146                         pFrame->SendMessage(MYWM_PROGRESS, i);
00147                         fread(data + i * m_DataPackets, sizeof(short), m_DataPackets, filePtr);
00148                         tempSize -= m_DataPackets;
00149                 }
00150 
00151                 pFrame->SendMessage(MYWM_PROGRESS, i);
00152                 if (tempSize > 0) 
00153                         fread(data + i * m_DataPackets, sizeof(short), tempSize, filePtr);
00154         }
00155         else {
00156                 fread(data,sizeof(short),size,filePtr);
00157         }
00158 
00159         fclose(filePtr);
00160 
00161         pFrame->SendMessage(MYWM_PROGRESS_MIN_MAX, 0, 100);
00162 
00163         //only 12 bit of data are used for each voxel (4096 density values)
00164         for(int z=0; z < zDim; z++) {
00165                 for(int y=0; y < yDim; y++) {
00166                         for(int x=0; x < xDim; x++) {
00167                                 data[z*xyDim+y*xDim+x] &= 0x0fff;
00168 
00169                                 //progressbar
00170                                 if (counter-- <= 0) {
00171                                         counter = loadSize;
00172                                         pFrame->SendMessage(MYWM_PROGRESS, pos++);
00173                                 }
00174                         }
00175                 }
00176                 
00177                 if (m_bAbort) {
00178                         if (data)
00179                                 delete[] data;
00180 
00181                         m_bAbort = false;
00182                         return;
00183                 }
00184 
00185         }
00186 
00187         pFrame->SendMessage(MYWM_PROGRESS, 0);
00188 
00189         
00190         this->filename = filename;
00191 
00192         if(!CalcDensityHistogram()) return;// false;
00193         
00194 //      return true;
00195 }

void Data::SetAbort void    [inline]
 

Definition at line 70 of file data.h.

00070 { m_bAbort = true; };

void Data::SetDataPackets int    dDataPack [inline]
 

Definition at line 58 of file data.h.

References MB_TO_DATASET_THRES.

00058 { m_DataPackets = MB_TO_DATASET_THRES(dDataPack); };

void Data::SetFileThreshold int    dFileThreshold [inline]
 

Definition at line 57 of file data.h.

00057 { m_FileThreshold = dFileThreshold; };

bool Data::SetPreCalc bool    pc [inline]
 

Definition at line 56 of file data.h.

Referenced by Perspective::Raycast(), and Raycaster::Raycast().

00056 { precalc = pc; return true;}


Member Data Documentation

short* Data::data [private]
 

Definition at line 35 of file data.h.

Referenced by CalcDensityHistogram(), GetDensity(), and LoadData().

string Data::filename
 

Definition at line 68 of file data.h.

Referenced by LoadData().

gradient_t* Data::gradients [private]
 

Definition at line 36 of file data.h.

Referenced by CalcGrad(), and CalcGradients().

int Data::histogram[4096] [private]
 

Definition at line 38 of file data.h.

Referenced by CalcDensityHistogram(), and GetHistogram().

bool Data::m_bAbort [private]
 

Definition at line 29 of file data.h.

Referenced by LoadData().

int Data::m_DataPackets [private]
 

Definition at line 27 of file data.h.

Referenced by LoadData().

int Data::m_FileThreshold [private]
 

Definition at line 25 of file data.h.

Referenced by LoadData().

bool Data::precalc [private]
 

Definition at line 39 of file data.h.

Referenced by CalcGrad().

int Data::size [private]
 

Definition at line 34 of file data.h.

Referenced by CalcDensityHistogram(), and LoadData().

short Data::xDim [private]
 

Definition at line 32 of file data.h.

Referenced by CalcGrad(), CalcGradients(), GetDensity(), GetXDim(), and LoadData().

int Data::xyDim [private]
 

Definition at line 33 of file data.h.

Referenced by CalcGrad(), CalcGradients(), GetDensity(), and LoadData().

short Data::yDim [private]
 

Definition at line 32 of file data.h.

Referenced by CalcGrad(), CalcGradients(), GetDensity(), GetYDim(), and LoadData().

short Data::zDim [private]
 

Definition at line 32 of file data.h.

Referenced by CalcGrad(), CalcGradients(), GetDensity(), GetZDim(), and LoadData().


The documentation for this class was generated from the following files:
Generated on Thu Jan 23 12:32:16 2003 by doxygen1.3-rc2