Home || Architecture || Video Search || Visual Search || Scripts || Applications || Important Messages || OGL || Src

Line.h

Go to the documentation of this file.
00001 #ifndef Impala_Visualisation_Plot_Line_h
00002 #define Impala_Visualisation_Plot_Line_h
00003 
00004 #include "Visualization/Plot/Plottable.h"
00005 
00006 namespace Impala
00007 {
00008 namespace Visualization
00009 {
00010 namespace Plot
00011 {
00012 
00013 
00014 class Line : public Plottable
00015 {
00016 public:
00017     typedef Core::Array::Array2dScalarReal64 Array2dScalarReal64;
00018 
00019     Line(double z, bool normalize = false)
00020     {
00021         mData = 0;
00022         SetDimensionsZ(z,z);
00023         SetDomain();
00024         mNormalize = normalize;
00025     }
00026 
00027     virtual void
00028     Draw(Plot* plot)
00029     {
00030         if (!mData || mDataLength < 2)
00031             return;
00032 
00033         glColor3f(mRed, mGreen, mBlue);
00034 
00035         glPushMatrix();
00036         double dx = (mMaxX - mMinX) / ((double)mDataLength-1.0);
00037         if(mNormalize)
00038         {
00039             glScaled(1, 1./dx, 1);
00040         }
00041 
00042         glBegin(GL_LINE_STRIP);
00043         double x = mMinX;
00044         for (int i=0 ; i<mDataLength ; i++)
00045         {
00046             glVertex3d(x, mData[i], mMinZ);
00047             x += dx;
00048         }
00049         glEnd();
00050         glPopMatrix();
00051     }
00052 
00053     void SetData(Array2dScalarReal64* data, int dataLine)
00054     {
00055         SetData(data->CPB(0, dataLine), data->W());
00056     }
00057 
00058     void SetData(Array2dScalarReal64* data)
00059     {
00060         SetData(data->CPB(0, 0), data->W());
00061     }
00062 
00063     void SetData(double* data, int dataLength)
00064     {
00065         mData = data;
00066         mDataLength = dataLength;
00067         UpdateDimensionsY();
00068     }
00069 
00070     void
00071     SetDomain(double begin=-1, double end=1)
00072     {
00073         SetDimensionsX(begin, end);
00074     }
00075 
00076     void
00077     UpdateDimensionsY()
00078     {
00079         // measuring y dimensions
00080         double min, max;
00081         min = max = mData[0];
00082         for (int i=1 ; i<mDataLength ; i++)
00083         {
00084             if (mData[i] < min)
00085                 min = mData[i];
00086             if (mData[i] > max)
00087                 max = mData[i];
00088         }
00089         SetDimensionsY(min, max);
00090     }
00091 
00092     virtual bool
00093     GetDimensionsY(double& min, double& max)
00094     {
00095         double dx = 1.;
00096         if(mNormalize && mData)
00097         {
00098             dx = ((double)mDataLength-1.0)/(mMaxX - mMinX);
00099         }
00100         min = mMinY * dx;
00101         max = mMaxY * dx;
00102         return mMinY != mMaxY;
00103     }
00104 
00105 protected:
00106     double* mData;
00107     int mDataLength;
00108     int mDataLine;
00109     double mZ;
00110     bool mNormalize;
00111 };
00112 
00113 }//namespace Impala
00114 }//namespace Visulization
00115 }//namespace Plot
00116 
00117 #endif Impala_Visualisation_Plot_Line_h

Generated on Fri Mar 19 09:31:51 2010 for ImpalaSrc by  doxygen 1.5.1