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

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 
00079     virtual void autoScale(int maxSteps, 
00080         double &x1, double &x2, double &stepSize) const = 0;
00081 
00082     virtual QwtScaleDiv divideScale(double x1, double x2,
00083         int numMajorSteps, int numMinorSteps, 
00084         double stepSize = 0.0) const = 0;
00085 
00086     virtual QwtScaleTransformation transformation() const = 0;
00087 
00088 protected:
00089     bool contains(const QwtDoubleInterval &, double val) const;
00090     QwtTickList strip(const QwtTickList&, const QwtDoubleInterval &) const;
00091     double divideInterval(double interval, int numSteps) const;
00092 
00093     QwtDoubleInterval buildInterval(double v) const;
00094 
00095 private:
00096     class PrivateData;
00097     PrivateData *d_data;
00098 };
00099 
00107 class QWT_EXPORT QwtLinearScaleEngine: public QwtScaleEngine
00108 {
00109 public:
00110     virtual void autoScale(int maxSteps, 
00111         double &x1, double &x2, double &stepSize) const;
00112 
00113     virtual QwtScaleDiv divideScale(double x1, double x2,
00114         int numMajorSteps, int numMinorSteps,
00115         double stepSize = 0.0) const;
00116 
00117     virtual QwtScaleTransformation transformation() const;
00118 
00119 protected:
00120     QwtDoubleInterval align(const QwtDoubleInterval&,
00121         double stepSize) const;
00122 
00123 private:
00124     void buildTicks(
00125         const QwtDoubleInterval &, double stepSize, int maxMinSteps,
00126         QwtTickList ticks[QwtScaleDiv::NTickTypes]) const;
00127 
00128     void buildMinorTicks(
00129         const QwtTickList& majorTicks,
00130         int maxMinMark, double step,
00131         QwtTickList &, QwtTickList &) const;
00132 
00133     QwtTickList buildMajorTicks(
00134         const QwtDoubleInterval &interval, double stepSize) const;
00135 };
00136 
00148 class QWT_EXPORT QwtLog10ScaleEngine: public QwtScaleEngine
00149 {
00150 public:
00151     virtual void autoScale(int maxSteps, 
00152         double &x1, double &x2, double &stepSize) const;
00153 
00154     virtual QwtScaleDiv divideScale(double x1, double x2,
00155         int numMajorSteps, int numMinorSteps,
00156         double stepSize = 0.0) const;
00157 
00158     virtual QwtScaleTransformation transformation() const;
00159 
00160 protected:
00161     QwtDoubleInterval log10(const QwtDoubleInterval&) const;
00162     QwtDoubleInterval pow10(const QwtDoubleInterval&) const;
00163 
00164 private:
00165     QwtDoubleInterval align(const QwtDoubleInterval&,
00166         double stepSize) const;
00167 
00168     void buildTicks(
00169         const QwtDoubleInterval &, double stepSize, int maxMinSteps,
00170         QwtTickList ticks[QwtScaleDiv::NTickTypes]) const;
00171 
00172     QwtTickList buildMinorTicks(
00173         const QwtTickList& majorTicks,
00174         int maxMinMark, double step) const;
00175 
00176     QwtTickList buildMajorTicks(
00177         const QwtDoubleInterval &interval, double stepSize) const;
00178 };
00179 
00180 #endif

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