CircleFillMeter.C
00001
00002 #include "GUI/CircleFillMeter.H"
00003 #include "Image/PixelsTypes.H"
00004
00005 CircleFillMeter::CircleFillMeter(int width, int height, int max = 0):
00006 itsWidth(width),
00007 itsHeight(height),
00008 itsCurrentValue(0),
00009 itsMaxRadius(14),
00010 itsMaxValue(max)
00011 {
00012 }
00013
00014 Image<PixRGB<byte> > CircleFillMeter::render(short val)
00015 {
00016 itsCurrentValue = val;
00017
00018
00019 Image<PixRGB<byte> > circleImage(itsWidth,itsHeight,ZEROS);
00020
00021 drawCircle(circleImage,
00022 Point2D<int>(itsWidth/2,itsHeight/2),
00023 .9*std::min(itsWidth,itsHeight)/2,
00024 PixRGB<byte>(100,100,100));
00025
00026 drawCircle(circleImage,
00027 Point2D<int>(itsWidth/2,itsHeight/2),
00028 .35*std::min(itsWidth,itsHeight)/2,
00029 PixRGB<byte>(100,100,100));
00030
00031 float numLines = ((float)val / (float)itsMaxValue)*24.0;
00032
00033 for(int i = 0; i < (int)numLines; i++)
00034 {
00035 int x1 = (int)(.9*std::min(itsWidth,itsHeight)/2*cos((15*i-90)*(M_PI/180)));
00036 int y1 = (int)(.9*std::min(itsWidth,itsHeight)/2*sin((15*i-90)*(M_PI/180)));
00037
00038 int x2 = (int)(.35*std::min(itsWidth,itsHeight)/2*cos((15*i-90)*(M_PI/180)));
00039 int y2 = (int)(.35*std::min(itsWidth,itsHeight)/2*sin((15*i-90)*(M_PI/180)));
00040
00041 drawLine(circleImage, Point2D<int>(itsWidth/2+x2,itsHeight/2+y2),
00042 Point2D<int>(itsWidth/2+x1,itsHeight/2+y1),
00043 PixRGB<byte>(0,255,0),1);
00044 }
00045
00046 return circleImage;
00047 }