Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

qwt_scale_map.h

00001 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
00002  * Qwt Widget Library
00003  * Copyright (C) 1997   Josef Wilgen
00004  * Copyright (C) 2002   Uwe Rathmann
00005  * 
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the Qwt License, Version 1.0
00008  *****************************************************************************/
00009 
00010 #ifndef QWT_SCALE_MAP_H
00011 #define QWT_SCALE_MAP_H
00012 
00013 #include "qwt_global.h"
00014 #include "qwt_math.h"
00015 
00019 class QWT_EXPORT QwtScaleTransformation
00020 {
00021 public:
00022     QwtScaleTransformation();
00023     QwtScaleTransformation(
00024         double (*xForm)(double x, double s1, double s2, double p1, double p2),
00025         double (*invXForm)(double x, double p1, double p2, double s1, double s2)
00026     );
00027 
00028     static double linearXForm(double x, double s1, double s2,
00029         double p1, double p2);
00030 
00031     static double log10XForm(double x, double s1, double s2,
00032         double p1, double p2);
00033     static double log10InvXForm(double x, double p1, double p2,
00034         double s1, double s2);
00035 
00036 
00037     double (*xForm)(double x, double s1, double s2, double p1, double p2);
00038     double (*invXForm)(double y, double p1, double p2, double s1, double s2);
00039 };
00040 
00047 class QWT_EXPORT QwtScaleMap
00048 {
00049 public:
00050     QwtScaleMap();
00051     QwtScaleMap(int i1, int i2, double d1, double d2);
00052     ~QwtScaleMap();
00053 
00054     void setTransformation(bool logarithmic);
00055     void setTransformation(const QwtScaleTransformation& );
00056     const QwtScaleTransformation &transformation() const;
00057 
00058     void setPaintInterval(int p1, int p2);
00059     void setPaintXInterval(double p1, double p2);
00060     void setScaleInterval(double s1, double s2);
00061 
00062     int transform(double x) const;
00063     double invTransform(double i) const;
00064 
00065     double xTransform(double x) const;
00066 
00067     inline double p1() const;
00068     inline double p2() const;
00069 
00070     inline double s1() const;
00071     inline double s2() const;
00072 
00073     QT_STATIC_CONST double LogMin;
00074     QT_STATIC_CONST double LogMax;
00075 
00076 private:
00077     void newFactor();   
00078 
00079     double d_s1, d_s2;     // scale interval boundaries
00080     double d_p1, d_p2;     // paint device interval boundaries
00081 
00082     double d_cnv;       // conversion factor
00083 
00084     QwtScaleTransformation d_transformation;
00085 };
00086 
00090 inline double QwtScaleMap::s1() const 
00091 {
00092     return d_s1;
00093 }
00094 
00098 inline double QwtScaleMap::s2() const 
00099 {
00100     return d_s2;
00101 }
00102 
00106 inline double QwtScaleMap::p1() const 
00107 {
00108     return d_p1;
00109 }
00110 
00114 inline double QwtScaleMap::p2() const 
00115 {
00116     return d_p2;
00117 }
00118 
00123 inline double QwtScaleMap::xTransform(double x) const
00124 {
00125     // try to inline code from QwtScaleTransformation::linearXForm,
00126     // QwtScaleTransformation::logXForm. 
00127 
00128     if ( d_transformation.xForm == QwtScaleTransformation::linearXForm )
00129         return d_p1 + (x - d_s1) * d_cnv;
00130 
00131     if ( d_transformation.xForm == QwtScaleTransformation::log10XForm )
00132         return d_p1 + log(x / d_s1) * d_cnv;
00133 
00134     return (*d_transformation.xForm)(x, d_s1, d_s2, d_p1, d_p2);
00135 }
00136 
00141 inline double QwtScaleMap::invTransform(double y) const
00142 {
00143     return (*d_transformation.invXForm)(y, d_p1, d_p2, d_s1, d_s2);
00144 }
00145 
00153 inline int QwtScaleMap::transform(double x) const
00154 {
00155     return qRound(xTransform(x));
00156 }
00157 
00158 #endif

Generated on Wed Aug 31 23:02:30 2005 for Qwt User's Guide by  doxygen 1.4.1