Main Page   Alphabetical List   Compound List   File List   Compound Members   Related Pages  

histo.h

00001 //---------------------------------------------------------------------------
00002 
00003 #ifndef histoH
00004 #define histoH
00005 //---------------------------------------------------------------------------
00006 
00007 #include <Classes.hpp>
00008 #include <Controls.hpp>
00009 #include <ExtCtrls.hpp>
00010 #include <assert.h>
00011 #include <math.h>
00012 
00013 #define MAX(x,y)        (((x)>(y)) ? (x) : (y))
00014 
00022 class THistogram {
00023 
00024 private:
00028         int *_histo;
00029         int _size;
00030         int _max;
00031         bool _maxDirty;
00032         bool _drawAverage;
00033         bool _horizontal;
00034         TColor _fg, _bg;
00035         float _histoZoom;       // 1 means, the whole histogram will be
00036         float _valZoom;         // plotted; any value greater 1 is a "zoom in";
00037                                 // values between 0 and 1 are "zoom out";
00038         float _histoPos;        // 0 means centered; <0 window moved to the
00039         float _valPos;          // left, >0 window moved to the right
00040         int _logType;           // 0=linear, 1=ld, 2=log10
00041 
00042         void __fastcall __drawLine(TPaintBox *pb, int val, int line);
00043         float __fastcall MYLOG(float val)
00044         {
00045                 switch(_logType)
00046                 {
00047                         case 1:
00048                                 return log(val);
00049                         case 2:
00050                                 return log10(val);
00051                         default:
00052                                 return val;
00053                 }
00054         }
00055 
00056 public:
00057         THistogram(int size);
00058         ~THistogram() {
00059                 delete [] _histo;
00060         }
00061 
00062         __property bool drawAverage = { read=_drawAverage, write=_drawAverage };
00063         __property bool horizontal = { read=_horizontal, write=_horizontal };
00064         __property TColor foreground = { read=_fg, write=_fg };
00065         __property TColor background = { read=_bg, write=_bg };
00066         __property float histoZoom = { read=_histoZoom, write=_histoZoom };
00067         __property float valZoom = { read=_valZoom, write=_valZoom };
00068         __property float histoPos = { read=_histoPos, write=_histoPos };
00069         __property float valPos = { read=_valPos, write=_valPos };
00070         __property int logType = { read=_logType, write=_logType };
00071         __property int size = { read=_size, write=_size };
00072 
00078         void __fastcall drawTo(TPaintBox *pb);
00079 
00086         float __fastcall getHPP(TPaintBox *pb);    // Histos per pixel
00093         float __fastcall getVPP(TPaintBox *pb);    // Values per pixel
00094 
00101         float __fastcall getHMaxZoom(TControl *pb);
00102 
00103         int __fastcall calcMax()
00104         {
00105                 if (_maxDirty) {
00106                         for(int i=0; i<_size; ++i)
00107                                 _max=MAX(_max, _histo[i]);
00108                         _maxDirty = false;
00109                 }
00110                 return _max;
00111         }
00112 
00113         int &operator[](int n) {
00114                 //assert(n>=0 && n<_size);
00115                 if (n<0 || n>=_size) {
00116                         return _histo[0];
00117                 } else {
00118                         _maxDirty = true;
00119                         return _histo[n];
00120                 }
00121         }
00122 };
00123 
00124 #endif

Generated on Thu Jan 23 06:17:37 2003 for Vol by doxygen1.2.18