00001
00002 #include "GUI/DepthMeter.H"
00003 #include "Image/PixelsTypes.H"
00004 #include "Util/StringConversions.H"
00005
00006 DepthMeter::DepthMeter(int width, int height):
00007 itsWidth(width),
00008 itsHeight(height),
00009 itsCurrentDepth(0)
00010 {
00011
00012 }
00013
00014 Image<PixRGB<byte> > DepthMeter::render(int d)
00015 {
00016 itsCurrentDepth = d;
00017 itsDepthHist.push_front(d);
00018 if(itsDepthHist.size() > 5)
00019 itsDepthHist.pop_back();
00020
00021 int avgDepth = 0;
00022
00023 std::list<int>::reverse_iterator it = itsDepthHist.rbegin();
00024 for(;it != itsDepthHist.rend(); ++it)
00025 {
00026 avgDepth += *it;
00027 }
00028 if(itsDepthHist.size() > 0)
00029 avgDepth /= itsDepthHist.size();
00030
00031 int minDrawDepth = avgDepth - itsHeight/2;
00032
00033 Image<PixRGB<byte> > depthImage(itsWidth,itsHeight,ZEROS);
00034
00035 int drawHeight = 0;
00036
00037
00038 while(drawHeight < itsHeight)
00039 {
00040 if((minDrawDepth %100 ) % 13 == 0)
00041 {
00042 drawLine(depthImage,
00043 Point2D<int>((int)(.38*(float)itsWidth),drawHeight),
00044 Point2D<int>((int)(.62*(float)itsWidth),drawHeight),
00045 PixRGB<byte>(100,100,100));
00046 }
00047
00048 if(minDrawDepth % 25 == 0)
00049 {
00050 if(minDrawDepth % 100 == 0 ||
00051 minDrawDepth % 100 == 50)
00052 {
00053 drawLine(depthImage, Point2D<int>((int)(.1*(float)itsWidth),drawHeight),
00054 Point2D<int>((int)(.9*(float)itsWidth),drawHeight),
00055 PixRGB<byte>(200,200,200));
00056 }
00057 else if(minDrawDepth % 100 == 25 ||
00058 minDrawDepth % 100 == 75)
00059 {
00060 writeText(depthImage,
00061 Point2D<int>(0,drawHeight-12),
00062 toStr<int>(minDrawDepth / 100).c_str(),
00063 PixRGB<byte>(20,253,0),
00064 PixRGB<byte>(0,0,0),
00065 SimpleFont::FIXED(14));
00066
00067 writeText(depthImage,
00068 Point2D<int>((int)(.75*(float)itsWidth + 8),drawHeight-6),
00069 toStr<int>(minDrawDepth % 100).c_str(),
00070 PixRGB<byte>(20,253,0),
00071 PixRGB<byte>(0,0,0),
00072 SimpleFont::FIXED(8));
00073
00074 drawLine(depthImage,
00075 Point2D<int>((int)(.25*(float)itsWidth),drawHeight),
00076 Point2D<int>((int)(.75*(float)itsWidth),drawHeight),
00077 PixRGB<byte>(100,100,100));
00078 }
00079
00080 if(drawHeight + 13 < itsHeight)
00081 {
00082 drawLine(depthImage,
00083 Point2D<int>((int)(.38*(float)itsWidth),drawHeight + 13),
00084 Point2D<int>((int)(.62*(float)itsWidth),drawHeight+13),
00085 PixRGB<byte>(100,100,100));
00086 }
00087
00088 drawHeight += 25;
00089 minDrawDepth += 25;
00090 }
00091 else
00092 {
00093 drawHeight++;
00094 minDrawDepth++;
00095 }
00096 }
00097
00098
00099 drawLine(depthImage, Point2D<int>(0,(itsHeight/2-2)), Point2D<int>(itsWidth,(itsHeight/2 - 2)), PixRGB<byte>(255,0,0));
00100 drawLine(depthImage, Point2D<int>(0,(itsHeight/2+2)), Point2D<int>(itsWidth,(itsHeight/2 + 2)), PixRGB<byte>(255,0,0));
00101
00102 return depthImage;
00103 }
00104