qwt_scale_engine.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_ENGINE_H
00011 #define QWT_SCALE_ENGINE_H
00012 
00013 #include "qwt_global.h"
00014 #include "qwt_scale_div.h"
00015 #include "qwt_double_interval.h"
00016 
00017 class QwtScaleTransformation;
00018 
00022 class QWT_EXPORT QwtScaleArithmetic
00023 {
00024 public:
00025     static int compareEps(
00026         double value1, double value2, double intervalSize);
00027 
00028     static double ceilEps(double value, double intervalSize);
00029     static double floorEps(double value, double intervalSize);
00030 
00031     static double divideEps(double interval, double steps);
00032 
00033     static double ceil125(double x);
00034     static double floor125(double x);
00035 };
00036 
00050 class QWT_EXPORT QwtScaleEngine
00051 {
00052 public:
00054     enum Attribute
00055     {
00056         NoAttribute = 0,
00057         IncludeReference = 1, 
00058         Symmetric = 2, 
00059         Floating = 4,
00060         Inverted = 8 
00061     };
00062 
00063     explicit QwtScaleEngine();
00064     virtual ~QwtScaleEngine();
00065 
00066     void setAttribute(Attribute, bool on = true);
00067     bool testAttribute(Attribute) const;
00068 
00069     void setAttributes(int);
00070     int attributes() const;
00071 
00072     void setReference(double reference);
00073     double reference() const;
00074 
00075     void setMargins(double m1, double m2);
00076     double loMargin() const;
00077     double hiMargin() const;
00078 
00087     virtual void autoScale(int maxNumSteps, 
00088         double &x1, double &x2, double &stepSize) const = 0;
00089 
00100     virtual QwtScaleDiv divideScale(double x1, double x2,
00101         int maxMajSteps, int maxMinSteps, 
00102         double stepSize = 0.0) const = 0;
00103 
00105     virtual QwtScaleTransformation *transformation() const = 0;
00106 
00107 protected:
00108     bool contains(const QwtDoubleInterval &, double val) const;
00109     QwtValueList strip(const QwtValueList&, const QwtDoubleInterval &) const;
00110     double divideInterval(double interval, int numSteps) const;
00111 
00112     QwtDoubleInterval buildInterval(double v) const;
00113 
00114 private:
00115     class PrivateData;
00116     PrivateData *d_data;
00117 };
00118 
00126 class QWT_EXPORT QwtLinearScaleEngine: public QwtScaleEngine
00127 {
00128 public:
00129     virtual void autoScale(int maxSteps, 
00130         double &x1, double &x2, double &stepSize) const;
00131 
00132     virtual QwtScaleDiv divideScale(double x1, double x2,
00133         int numMajorSteps, int numMinorSteps,
00134         double stepSize = 0.0) const;
00135 
00136     virtual QwtScaleTransformation *transformation() const;
00137 
00138 protected:
00139     QwtDoubleInterval align(const QwtDoubleInterval&,
00140         double stepSize) const;
00141 
00142 private:
00143     void buildTicks(
00144         const QwtDoubleInterval &, double stepSize, int maxMinSteps,
00145         QwtValueList ticks[QwtScaleDiv::NTickTypes]) const;
00146 
00147     void buildMinorTicks(
00148         const QwtValueList& majorTicks,
00149         int maxMinMark, double step,
00150         QwtValueList &, QwtValueList &) const;
00151 
00152     QwtValueList buildMajorTicks(
00153         const QwtDoubleInterval &interval, double stepSize) const;
00154 };
00155 
00167 class QWT_EXPORT QwtLog10ScaleEngine: public QwtScaleEngine
00168 {
00169 public:
00170     virtual void autoScale(int maxSteps, 
00171         double &x1, double &x2, double &stepSize) const;
00172 
00173     virtual QwtScaleDiv divideScale(double x1, double x2,
00174         int numMajorSteps, int numMinorSteps,
00175         double stepSize = 0.0) const;
00176 
00177     virtual QwtScaleTransformation *transformation() const;
00178 
00179 protected:
00180     QwtDoubleInterval log10(const QwtDoubleInterval&) const;
00181     QwtDoubleInterval pow10(const QwtDoubleInterval&) const;
00182 
00183 private:
00184     QwtDoubleInterval align(const QwtDoubleInterval&,
00185         double stepSize) const;
00186 
00187     void buildTicks(
00188         const QwtDoubleInterval &, double stepSize, int maxMinSteps,
00189         QwtValueList ticks[QwtScaleDiv::NTickTypes]) const;
00190 
00191     QwtValueList buildMinorTicks(
00192         const QwtValueList& majorTicks,
00193         int maxMinMark, double step) const;
00194 
00195     QwtValueList buildMajorTicks(
00196         const QwtDoubleInterval &interval, double stepSize) const;
00197 };
00198 
00199 #endif

Generated on Mon Feb 26 21:22:38 2007 for Qwt User's Guide by  doxygen 1.4.6