SimpleMeter.C
00001
00002 #include "GUI/SimpleMeter.H"
00003 #include "Image/PixelsTypes.H"
00004
00005 SimpleMeter::SimpleMeter(int width, int height, double min, double max, double lowThresh, double medThresh)
00006 {
00007
00008 itsWidth = width;
00009 itsHeight = height;
00010 itsMin = min;
00011 itsMax = max;
00012 itsLowThresh = itsHeight - (lowThresh - itsMin)*itsHeight/(itsMax - itsMin);
00013 itsMedThresh = itsHeight - (medThresh - itsMin)*itsHeight/(itsMax - itsMin);
00014 }
00015
00016 SimpleMeter::SimpleMeter(int width, int height, double min, double max)
00017 {
00018
00019 itsWidth = width;
00020 itsHeight = height;
00021 itsMin = min;
00022 itsMax = max;
00023
00024 int lowThresh = (int)((itsMax - itsMin)/2.0 + itsMin);
00025 int medThresh = (int)((itsMax - itsMin)*2.0/3.0 + itsMin);
00026
00027 itsLowThresh = itsHeight - (lowThresh - itsMin)*itsHeight/(itsMax - itsMin);
00028 itsMedThresh = itsHeight - (medThresh - itsMin)*itsHeight/(itsMax - itsMin);
00029 }
00030
00031 Image<PixRGB<byte> > SimpleMeter::render(double val)
00032 {
00033 Image<PixRGB<byte> > meter(itsWidth, itsHeight, ZEROS);
00034 int valY;
00035 if(val < itsMin)
00036 valY = 0;
00037 else if(val > itsMax)
00038 valY = itsHeight;
00039 else
00040 {
00041 valY = (int)((val - itsMin)*(itsHeight)/(itsMax - itsMin));
00042 }
00043
00044 for(int y=itsHeight-1; y>1; y -= 3)
00045 {
00046 PixRGB<byte> Color;
00047 if(y > itsLowThresh)
00048 Color = PixRGB<byte>(0,255,0);
00049 else if(y < itsLowThresh && y > itsMedThresh)
00050 Color = PixRGB<byte>(255,255,0);
00051 else
00052 Color = PixRGB<byte>(255,0,0);
00053
00054 float alpha = .4;
00055 if(y > itsHeight-valY)
00056 alpha = 1;
00057 drawLine(meter, Point2D<int>(0, y), Point2D<int>(itsWidth-1,y),PixRGB<byte>(Color*alpha),1);
00058
00059 }
00060
00061 return meter;
00062 }
00063