00001 #ifndef __DomainOfAction__
00002 #define __DomainOfAction__
00003
00004
00023 #include <stdio.h>
00024
00025 #include "Psi2DValue.hpp"
00026 #include "AnImage.hpp"
00027
00029
00037 enum StatePsi { Alive=0, Candidate=1, Far=2, Selected=3, Near=4 , Unknown=9 };
00038
00039 class DomainOfAction
00040 {
00041 private:
00042
00043 int maskFlag;
00044
00045 int nTotalActive;
00046
00047 int width, height;
00048
00049 Psi2DValue** psi;
00050
00051 StatePsi* plabel;
00052 StatePsi** label;
00053
00054 public:
00055
00056 DomainOfAction(AnImage* im, int amaskFlag=1);
00057 DomainOfAction(int w, int h, int x0, int y0);
00058 DomainOfAction(int w, int h, int x0, int y0, int x1, int y1);
00059 DomainOfAction(int w, int h, int n, int* xMask, int* yMask);
00060
00061 virtual ~DomainOfAction();
00062
00063 int getAllUsedPoints(){ return nTotalActive; }
00064 int getWidth(){ return width; }
00065 int getHeight(){ return height; }
00066
00068 StatePsi getLabel(int x, int y){ return label[x][y]; }
00070 void setLabel(int x, int y, StatePsi alabel){ label[x][y]= alabel; }
00071
00072 Psi2DValue* getPsi(int x, int y){ return psi[x+y*width]; }
00073 void setPsi(int x, int y, Psi2DValue* apsi){ psi[x+y*width]= apsi; }
00074
00076 double getValue(int x, int y)
00077 {
00078 if( psi[x+y*width]== 0) return 1e30;
00079 return psi[x+y*width]->getRate();
00080 }
00081
00083 void setValue(int x, int y, double d){ psi[x+y*width]->setRate(d); }
00084
00085 virtual void report(FILE* file){}
00086 };
00087
00088 #endif