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