Qwt User's Guide 5.2.2

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:
00069     enum Attribute
00070     {
00071         NoAttribute = 0,
00072         IncludeReference = 1, 
00073         Symmetric = 2, 
00074         Floating = 4,
00075         Inverted = 8 
00076     };
00077 
00078     explicit QwtScaleEngine();
00079     virtual ~QwtScaleEngine();
00080 
00081     void setAttribute(Attribute, bool on = true);
00082     bool testAttribute(Attribute) const;
00083 
00084     void setAttributes(int);
00085     int attributes() const;
00086 
00087     void setReference(double reference);
00088     double reference() const;
00089 
00090     void setMargins(double lower, double upper);
00091     double lowerMargin() const;
00092     double upperMargin() const;
00093 
00102     virtual void autoScale(int maxNumSteps, 
00103         double &x1, double &x2, double &stepSize) const = 0;
00104 
00115     virtual QwtScaleDiv divideScale(double x1, double x2,
00116         int maxMajSteps, int maxMinSteps, 
00117         double stepSize = 0.0) const = 0;
00118 
00120     virtual QwtScaleTransformation *transformation() const = 0;
00121 
00122 protected:
00123     bool contains(const QwtDoubleInterval &, double val) const;
00124     QwtValueList strip(const QwtValueList&, const QwtDoubleInterval &) const;
00125     double divideInterval(double interval, int numSteps) const;
00126 
00127     QwtDoubleInterval buildInterval(double v) const;
00128 
00129 private:
00130     class PrivateData;
00131     PrivateData *d_data;
00132 };
00133 
00141 class QWT_EXPORT QwtLinearScaleEngine: public QwtScaleEngine
00142 {
00143 public:
00144     virtual void autoScale(int maxSteps, 
00145         double &x1, double &x2, double &stepSize) const;
00146 
00147     virtual QwtScaleDiv divideScale(double x1, double x2,
00148         int numMajorSteps, int numMinorSteps,
00149         double stepSize = 0.0) const;
00150 
00151     virtual QwtScaleTransformation *transformation() const;
00152 
00153 protected:
00154     QwtDoubleInterval align(const QwtDoubleInterval&,
00155         double stepSize) const;
00156 
00157 private:
00158     void buildTicks(
00159         const QwtDoubleInterval &, double stepSize, int maxMinSteps,
00160         QwtValueList ticks[QwtScaleDiv::NTickTypes]) const;
00161 
00162     void buildMinorTicks(
00163         const QwtValueList& majorTicks,
00164         int maxMinMark, double step,
00165         QwtValueList &, QwtValueList &) const;
00166 
00167     QwtValueList buildMajorTicks(
00168         const QwtDoubleInterval &interval, double stepSize) const;
00169 };
00170 
00182 class QWT_EXPORT QwtLog10ScaleEngine: public QwtScaleEngine
00183 {
00184 public:
00185     virtual void autoScale(int maxSteps, 
00186         double &x1, double &x2, double &stepSize) const;
00187 
00188     virtual QwtScaleDiv divideScale(double x1, double x2,
00189         int numMajorSteps, int numMinorSteps,
00190         double stepSize = 0.0) const;
00191 
00192     virtual QwtScaleTransformation *transformation() const;
00193 
00194 protected:
00195     QwtDoubleInterval log10(const QwtDoubleInterval&) const;
00196     QwtDoubleInterval pow10(const QwtDoubleInterval&) const;
00197 
00198 private:
00199     QwtDoubleInterval align(const QwtDoubleInterval&,
00200         double stepSize) const;
00201 
00202     void buildTicks(
00203         const QwtDoubleInterval &, double stepSize, int maxMinSteps,
00204         QwtValueList ticks[QwtScaleDiv::NTickTypes]) const;
00205 
00206     QwtValueList buildMinorTicks(
00207         const QwtValueList& majorTicks,
00208         int maxMinMark, double step) const;
00209 
00210     QwtValueList buildMajorTicks(
00211         const QwtDoubleInterval &interval, double stepSize) const;
00212 };
00213 
00214 #endif