00001 00012 #ifndef __VOLUME__ 00013 #define __VOLUME__ 00014 #include <QVector> 00015 #include <QObject> 00016 #include "voxel.h" 00017 #include "histogram.h" 00018 #include <QImage> 00019 00020 #include "globals.h" 00021 #include "vector.h" 00022 00027 class Volume : QObject { 00028 00029 public: 00030 Volume(int XDim, int YDim, int ZDim); 00031 ~Volume(void) ; 00032 int getXDim(void); 00033 int getYDim(void); 00034 int getZDim(void); 00035 void setVoxelAt(int x,int y,int z, Voxel v); 00036 Voxel getVoxelAt(int x,int y,int z); 00037 Volume* getSlice(DIMENSION d ,int sliceNumber) ; 00038 QImage getHistogram(void); 00039 00040 Vector getCenter(void); 00041 Color getColor(Vector v, FILTER fl); 00042 Voxel getVoxel(Vector v, FILTER fl); 00043 void calcGradients(void); 00044 void calculateColors(void); 00045 float getRadius(void) { 00046 if (radius == 0) { 00047 Vector center = this->getCenter(); 00048 radius = center.length(); 00049 } 00050 return radius; 00051 }; 00052 bool inside(Vector v) { 00053 00054 if (((v.x) < 0) || ((v.x) >= XDim)) 00055 return false; 00056 if (((v.y) < 0) || ((v.y) >= YDim)) 00057 return false; 00058 if (((v.z) < 0) || ((v.z) >= ZDim)) 00059 return false; 00060 00061 00062 return true; 00063 }; 00064 float getMaxGradLength(void) {return this->maxGradLength; }; 00065 QString name; 00066 00067 private: 00068 int XDim; 00069 int YDim; 00070 int ZDim; 00071 QVector<Voxel> lVoxels; 00072 Histogram *histogram; 00073 00074 float radius; 00075 float maxGradLength; 00076 Vector mCenter; 00077 Color neighbors[8]; 00078 Voxel neighborVoxels[8]; 00079 00080 00081 00082 00083 00084 }; 00085 00086 #endif