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, 
00025             double p1, double p2, void *),
00026         double (*invXForm)(double x, double p1, double p2, 
00027             double s1, double s2, void *)
00028     );
00029 
00030     static double linearXForm(double x, double s1, double s2,
00031         double p1, double p2, void *);
00032 
00033     static double log10XForm(double x, double s1, double s2,
00034         double p1, double p2, void *);
00035     static double log10InvXForm(double x, double p1, double p2,
00036         double s1, double s2, void *);
00037 
00038     double (*xForm)(double x, double s1, double s2, 
00039         double p1, double p2, void *);
00040     double (*invXForm)(double y, double p1, double p2, 
00041         double s1, double s2, void *);
00042 };
00043 
00050 class QWT_EXPORT QwtScaleMap
00051 {
00052 public:
00053     QwtScaleMap();
00054     QwtScaleMap(int i1, int i2, double d1, double d2);
00055     ~QwtScaleMap();
00056 
00057     void setTransformation(bool logarithmic);
00058     void setTransformation(const QwtScaleTransformation& );
00059     const QwtScaleTransformation &transformation() const;
00060 
00061     void setPaintInterval(int p1, int p2);
00062     void setPaintXInterval(double p1, double p2);
00063     void setScaleInterval(double s1, double s2);
00064 
00065     void setTransformationData(void *);
00066     void *transformationData() const;
00067 
00068     int transform(double x) const;
00069     double invTransform(double i) const;
00070 
00071     double xTransform(double x) const;
00072 
00073     inline double p1() const;
00074     inline double p2() const;
00075 
00076     inline double s1() const;
00077     inline double s2() const;
00078 
00079     QT_STATIC_CONST double LogMin;
00080     QT_STATIC_CONST double LogMax;
00081 
00082 private:
00083     void newFactor();   
00084 
00085     double d_s1, d_s2;     // scale interval boundaries
00086     double d_p1, d_p2;     // paint device interval boundaries
00087 
00088     double d_cnv;       // conversion factor
00089     void *d_transformationData;  // data, passed to the transformations
00090 
00091     QwtScaleTransformation d_transformation;
00092 };
00093 
00097 inline double QwtScaleMap::s1() const 
00098 {
00099     return d_s1;
00100 }
00101 
00105 inline double QwtScaleMap::s2() const 
00106 {
00107     return d_s2;
00108 }
00109 
00113 inline double QwtScaleMap::p1() const 
00114 {
00115     return d_p1;
00116 }
00117 
00121 inline double QwtScaleMap::p2() const 
00122 {
00123     return d_p2;
00124 }
00125 
00130 inline double QwtScaleMap::xTransform(double x) const
00131 {
00132     // try to inline code from QwtScaleTransformation::linearXForm,
00133     // QwtScaleTransformation::logXForm. 
00134 
00135     if ( d_transformation.xForm == QwtScaleTransformation::linearXForm )
00136         return d_p1 + (x - d_s1) * d_cnv;
00137 
00138     if ( d_transformation.xForm == QwtScaleTransformation::log10XForm )
00139         return d_p1 + log(x / d_s1) * d_cnv;
00140 
00141     return (*d_transformation.xForm)(x, d_s1, d_s2, 
00142         d_p1, d_p2, d_transformationData );
00143 }
00144 
00149 inline double QwtScaleMap::invTransform(double y) const
00150 {
00151     return (*d_transformation.invXForm)(y, d_p1, d_p2, 
00152         d_s1, d_s2, d_transformationData);
00153 }
00154 
00162 inline int QwtScaleMap::transform(double x) const
00163 {
00164     return qRound(xTransform(x));
00165 }
00166 
00167 #endif

Generated on Mon Jan 30 22:16:26 2006 for Qwt User's Guide by  doxygen 1.4.4