Qwt User's Guide
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_interval.h"
00016 
00017 class QwtTransform;
00018 
00022 class QWT_EXPORT QwtScaleArithmetic
00023 {
00024 public:
00025     static double ceilEps( double value, double intervalSize );
00026     static double floorEps( double value, double intervalSize );
00027 
00028     static double divideEps( double interval, double steps );
00029 
00030     static double divideInterval( double interval, 
00031         int numSteps, uint base );
00032 };
00033 
00045 class QWT_EXPORT QwtScaleEngine
00046 {
00047 public:
00054     enum Attribute
00055     {
00057         NoAttribute = 0x00,
00058 
00060         IncludeReference = 0x01,
00061 
00063         Symmetric = 0x02,
00064 
00072         Floating = 0x04,
00073 
00075         Inverted = 0x08
00076     };
00077 
00079     typedef QFlags<Attribute> Attributes;
00080 
00081     explicit QwtScaleEngine( uint base = 10 );
00082     virtual ~QwtScaleEngine();
00083 
00084     void setBase( uint base );
00085     uint base() const;
00086 
00087     void setAttribute( Attribute, bool on = true );
00088     bool testAttribute( Attribute ) const;
00089 
00090     void setAttributes( Attributes );
00091     Attributes attributes() const;
00092 
00093     void setReference( double reference );
00094     double reference() const;
00095 
00096     void setMargins( double lower, double upper );
00097     double lowerMargin() const;
00098     double upperMargin() const;
00099 
00108     virtual void autoScale( int maxNumSteps,
00109         double &x1, double &x2, double &stepSize ) const = 0;
00110 
00123     virtual QwtScaleDiv divideScale( double x1, double x2,
00124         int maxMajorSteps, int maxMinorSteps,
00125         double stepSize = 0.0 ) const = 0;
00126 
00127     void setTransformation( QwtTransform * );
00128     QwtTransform *transformation() const;
00129 
00130 protected:
00131     bool contains( const QwtInterval &, double val ) const;
00132     QList<double> strip( const QList<double>&, const QwtInterval & ) const;
00133 
00134     double divideInterval( double interval, int numSteps ) const;
00135 
00136     QwtInterval buildInterval( double v ) const;
00137 
00138 private:
00139     class PrivateData;
00140     PrivateData *d_data;
00141 };
00142 
00150 class QWT_EXPORT QwtLinearScaleEngine: public QwtScaleEngine
00151 {
00152 public:
00153     QwtLinearScaleEngine( uint base = 10 );
00154     virtual ~QwtLinearScaleEngine();
00155 
00156     virtual void autoScale( int maxSteps,
00157         double &x1, double &x2, double &stepSize ) const;
00158 
00159     virtual QwtScaleDiv divideScale( double x1, double x2,
00160         int numMajorSteps, int numMinorSteps,
00161                                      double stepSize = 0.0 ) const;
00162 
00163 
00164 protected:
00165     QwtInterval align( const QwtInterval&, double stepSize ) const;
00166 
00167     void buildTicks(
00168         const QwtInterval &, double stepSize, int maxMinSteps,
00169         QList<double> ticks[QwtScaleDiv::NTickTypes] ) const;
00170 
00171     QList<double> buildMajorTicks(
00172         const QwtInterval &interval, double stepSize ) const;
00173 
00174     void buildMinorTicks( const QList<double>& majorTicks,
00175         int maxMinorSteps, double stepSize,
00176         QList<double> &minorTicks, QList<double> &mediumTicks ) const;
00177 };
00178 
00190 class QWT_EXPORT QwtLogScaleEngine: public QwtScaleEngine
00191 {
00192 public:
00193     QwtLogScaleEngine( uint base = 10 );
00194     virtual ~QwtLogScaleEngine();
00195 
00196     virtual void autoScale( int maxSteps,
00197         double &x1, double &x2, double &stepSize ) const;
00198 
00199     virtual QwtScaleDiv divideScale( double x1, double x2,
00200         int numMajorSteps, int numMinorSteps,
00201         double stepSize = 0.0 ) const;
00202 
00203 protected:
00204     QwtInterval align( const QwtInterval&, double stepSize ) const;
00205 
00206     void buildTicks(
00207         const QwtInterval &, double stepSize, int maxMinSteps,
00208         QList<double> ticks[QwtScaleDiv::NTickTypes] ) const;
00209 
00210     QList<double> buildMajorTicks(
00211         const QwtInterval &interval, double stepSize ) const;
00212 
00213     void buildMinorTicks( const QList<double>& majorTicks,
00214         int maxMinorSteps, double stepSize,
00215         QList<double> &minorTicks, QList<double> &mediumTicks ) const;
00216 };
00217 
00218 Q_DECLARE_OPERATORS_FOR_FLAGS( QwtScaleEngine::Attributes )
00219 
00220 #endif
 All Classes Functions Variables Typedefs Enumerations Enumerator