Robotsystem of the Robot Group Leipzig: hudstatistics.h Source File

- Main Page
- Namespaces
- Classes
- Files
- Directories
- Related Pages
- Examples

- Search for |

- File List
- File Members

# hudstatistics.h

Go to the documentation of this file.

    00001 /***************************************************************************
    00002  *   Copyright (C) 2005 by Robot Group Leipzig                             *
    00003  *    martius@informatik.uni-leipzig.de                                    *
    00004  *    fhesse@informatik.uni-leipzig.de                                     *
    00005  *    der@informatik.uni-leipzig.de                                        *
    00006  *    frankguettler@gmx.de                                                 *
    00007  *                                                                         *
    00008  *   This program is free software; you can redistribute it and/or modify  *
    00009  *   it under the terms of the GNU General Public License as published by  *
    00010  *   the Free Software Foundation; either version 2 of the License, or     *
    00011  *   (at your option) any later version.                                   *
    00012  *                                                                         *
    00013  *   This program is distributed in the hope that it will be useful,       *
    00014  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
    00015  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
    00016  *   GNU General Public License for more details.                          *
    00017  *                                                                         *
    00018  *   You should have received a copy of the GNU General Public License     *
    00019  *   along with this program; if not, write to the                         *
    00020  *   Free Software Foundation, Inc.,                                       *
    00021  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
    00022  ***************************************************************************
    00023  *                                                                         *
    00024  *  windowstatistics provides cool stuff for displaying statistics on the  *
    00025  *  graphics window.                                                       *
    00026  *                                                                         *
    00027  *   $Log: hudstatistics.h,v $
    00028  *   Revision 1.4  2008/01/17 09:55:55  der
    00029  *   methods added for adding std::list<AbstractMeasure*> to the HUD
    00030  *
    00031  *   Revision 1.3  2007/12/06 10:02:49  der
    00032  *   abstractground: returns now cornerpoints
    00033  *   abstractobstacle: is now trackable
    00034  *   hudstatistics: supports now AbstractmMeasure
    00035  *
    00036  *   Revision 1.2  2007/09/28 12:31:49  robot3
    00037  *   The HUDSM is not anymore deduced from StatisticalTools, so the statistics
    00038  *   can be updated independently from the HUD
    00039  *   addPhysicsCallbackable and addGraphicsCallbackable now exists in Simulation
    00040  *
    00041  *   Revision 1.1  2007/09/28 10:24:05  robot3
    00042  *   The WindowStatisticsManager is now called HUDStatisticsManager
    00043  *
    00044  *   Revision 1.4  2007/09/28 10:08:49  robot3
    00045  *   fixed memory bugs, statistics are from now on aligned right
    00046  *
    00047  *   Revision 1.3  2007/09/28 09:15:25  robot3
    00048  *   extended comments
    00049  *
    00050  *   Revision 1.2  2007/09/28 08:47:29  robot3
    00051  *   corrected some memory bug (3 still remaining)
    00052  *
    00053  *   Revision 1.1  2007/09/27 10:48:13  robot3
    00054  *   first version of the WSM
    00055  *
    00056  *                                                                         *
    00057  ***************************************************************************/
    00058 #ifndef __HUD_STATISTICS_H
    00059 #define __HUD_STATISTICS_H
    00060
    00061 #import <selforg/statistictools.h>
    00062
    00063 /* forward declaration block */
    00064 namespace osgText {
    00065 class Text;
    00066 class Font;
    00067 }
    00068
    00069 namespace osg {
    00070 class Geode;
    00071 }
    00072
    00073 namespace lpzrobots {
    00074 class Color;
    00075 }
    00076 /* end of forward declaration */
    00077
    00078 namespace lpzrobots {
    00079
    00080 /**
    00081  * manages all the stuff displaying statistics on the graphics window.
    00082  * This is a experimental version, so do not to be afraid changing this crazy
    00083  * code.
    00084  *
    00085  * This class uses the implementation of the class StatisticTools, which is
    00086  * generalized to make nice statistics. Instead of passing the values to the
    00087  * guilogger (INSPECTABLE interface), we simply diplay this values on the graphics
    00088  * window.
    00089  *
    00090  * So how it works:
    00091  * - overwriting the method getMeasure gives us the ability to create the needed text
    00092  *   object, then storing it in a class named WindowStatistic
    00093  *   (which is stored in the windowStatisticList).
    00094  */
    00095 class HUDStatisticsManager : public Callbackable {
    00096
    00097 public:
    00098   /**
    00099    * creates the HUDStatisticsManager, normally done by class Base.
    00100    * @param geode this is the graphical node at wich the text objects are hooked in.
    00101    */
    00102   HUDStatisticsManager(osg::Geode* geode, osgText::Font* font);
    00103
    00104   virtual ~HUDStatisticsManager() {}
    00105
    00106         /**
    00107          * adds a variable to observe (on the window) and measure the value
    00108          * @param observedValue    the value to observe.
    00109          * @param measureName      the name of the measured value
    00110          * @param mode             the mode of measure
    00111          * @param stepSpan         in most cases the stepSpan is important to get
    00112          * the measured value of a number of steps, like AVG:
    00113          * if stepSpan = 0, AVG is calculated over all steps
    00114          * if stepSpan = n, AVG is calculated over the LAST n steps
    00115          * The same counts for all the other MeasureModes.
    00116          * @param additionalParam  is used for example for mode PEAK, the param is the limit value,
    00117          * all values minus limit are displayed, values below the limit are set to 0.
    00118          * In CONV mode (test the convergence), this value is the epsilon criteria.
    00119          * @return the object StatisticMeasure. Use addMeasure(...) instead of getMeasure(...) to
    00120          * obtain the value adress of the calculated statistic.
    00121          * @see StatisticTools
    00122          * @see StatisticMeasure
    00123          */
    00124   virtual StatisticMeasure* getMeasure( double& observedValue, const char* measureName, MeasureMode mode, long stepSpan, double additionalParam =0);
    00125
    00126         /**
    00127          * adds a variable to observe (on the window) and measure the value
    00128          * @param observedValue    the value to observe.
    00129          * @param measureName      the name of the measured value
    00130          * @param mode             the mode of measure
    00131          * @param stepSpan         in most cases the stepSpan is important to get
    00132          * the measured value of a number of steps, like AVG:
    00133          * if stepSpan = 0, AVG is calculated over all steps
    00134          * if stepSpan = n, AVG is calculated over the LAST n steps
    00135          * The same counts for all the other MeasureModes.
    00136          * @param additionalParam  is used for example for mode PEAK, the param is the limit value,
    00137          * all values minus limit are displayed, values below the limit are set to 0.
    00138          * In CONV mode (test the convergence), this value is the epsilon criteria.
    00139          * @return the object StatisticMeasure. Use addMeasure(...) instead of getMeasure(...) to
    00140          * obtain the value adress of the calculated statistic.
    00141          * @see StatisticTools
    00142          * @see StatisticMeasure
    00143          */
    00144   virtual double& addMeasure( double& observedValue, const char* measureName, MeasureMode mode, long stepSpan, double additionalParam =0);
    00145
    00146     /**
    00147    * You can add another abstract measure you like. in some cases (e.g. complex
    00148    * measures) it is better to let the measure decide how it likes to be initialized
    00149    * @param measure the measure to add
    00150    */
    00151   virtual double& addMeasure(AbstractMeasure* measure);
    00152
    00153   /**
    00154    * You can add another abstract measure you like. in some cases (e.g. complex
    00155    * measures) it is better to let the measure decide how it likes to be initialized
    00156    * With this method you can add a list of AbstractMeasures.
    00157    * @param measureList the list of measures to add
    00158    */
    00159   virtual double& addMeasureList(std::list<AbstractMeasure*> measureList);
    00160
    00161     /**
    00162    * You can add another abstract measure you like. in some cases (e.g. complex
    00163    * measures) it is better to let the measure decide how it likes to be initialized
    00164    * With this method you can add a list of AbstractMeasures.
    00165    * @param measureList the list of measures to add
    00166    */
    00167   virtual double& addMeasureList(std::list<ComplexMeasure*> measureList);
    00168
    00169
    00170       /**
    00171    * You can add another abstract measure you like. in some cases (e.g. complex
    00172    * measures) it is better to let the measure decide how it likes to be initialized
    00173    * With this method you can add a list of AbstractMeasures.
    00174    * @param measureList the list of measures to add
    00175    */
    00176   virtual double& addMeasureList(std::list<StatisticMeasure*> measureList);
    00177
    00178
    00179         /**
    00180          * starts the measure at a specific time. This is useful if there are
    00181          * values that have to be ignored at simulation start.
    00182          * @param step number of steps (normally simsteps) to wait for beginning the measures
    00183          */
    00184   virtual void beginMeasureAt(long step) { statTool->beginMeasureAt(step);}
    00185
    00186   /**
    00187    * Tells you wether the measures have already been started.
    00188    */
    00189   virtual bool measureStarted() { return statTool->measureStarted(); }
    00190
    00191
    00192         /**
    00193          * CALLBACKABLE INTERFACE
    00194          *
    00195          *      this method is invoked when a callback is done from the class where this
    00196          * class is for callback registered, it is overwritten
    00197          */
    00198   virtual void doOnCallBack();
    00199
    00200
    00201   virtual StatisticTools* getStatisticTools() { return statTool; }
    00202
    00203 protected:
    00204
    00205   /**
    00206    * Nested class WindowStatistic, which puts the measure and the graphics text together.
    00207    */
    00208   class WindowStatistic {
    00209   public:
    00210
    00211     WindowStatistic(AbstractMeasure* measure, osgText::Text* text) : measure(measure),
    00212       text(text) {}
    00213
    00214     virtual ~WindowStatistic() {}
    00215
    00216     virtual AbstractMeasure* getMeasure() { return measure; }
    00217
    00218     virtual osgText::Text* getText() { return text; }
    00219
    00220   private:
    00221     AbstractMeasure* measure;
    00222     osgText::Text* text;
    00223   };
    00224
    00225 /// the struct list which holds the measures and the appropiate text
    00226   std::list<WindowStatistic*> windowStatisticList;
    00227
    00228   StatisticTools* statTool;
    00229
    00230   // position of first graphical text
    00231   float xInitPosition;
    00232   float yInitPosition;
    00233   float zInitPosition;
    00234   float yOffset;
    00235
    00236   // graphical node
    00237   osg::Geode* geode;
    00238
    00239   // default text properties
    00240   osgText::Font* font;
    00241   Color* textColor;
    00242   int fontsize;
    00243
    00244 };
    00245
    00246
    00247 }
    00248
    00249 #endif