qwt_transform.h 3.42 KB
Newer Older
Bryant's avatar
Bryant committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
 * Qwt Widget Library
 * Copyright (C) 1997   Josef Wilgen
 * Copyright (C) 2002   Uwe Rathmann
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the Qwt License, Version 1.0
 *****************************************************************************/

#ifndef QWT_TRANSFORM_H
#define QWT_TRANSFORM_H

#include "qwt_global.h"

/*!
   \brief A transformation between coordinate systems

   QwtTransform manipulates values, when being mapped between
   the scale and the paint device coordinate system.

   A transformation consists of 2 methods:

   - transform
   - invTransform

   where one is is the inverse function of the other.

   When p1, p2 are the boundaries of the paint device coordinates
   and s1, s2 the boundaries of the scale, QwtScaleMap uses the
   following calculations:

   - p = p1 + ( p2 - p1 ) * ( T( s ) - T( s1 ) / ( T( s2 ) - T( s1 ) );
   - s = invT ( T( s1 ) + ( T( s2 ) - T( s1 ) ) * ( p - p1 ) / ( p2 - p1 ) );
*/
class QWT_EXPORT QwtTransform
{
public:
    QwtTransform();
    virtual ~QwtTransform();

    /*!
       Modify value to be a valid value for the transformation.
       The default implementation does nothing.
     */
    virtual double bounded( double value ) const;

    /*!
        Transformation function

        \param value Value
        \return Modified value

        \sa invTransform()
     */
    virtual double transform( double value ) const = 0;

    /*!
        Inverse transformation function

        \param value Value
        \return Modified value

        \sa transform()
     */
    virtual double invTransform( double value ) const = 0;

    //! Virtualized copy operation
    virtual QwtTransform *copy() const = 0;
};

/*!
   \brief Null transformation

   QwtNullTransform returns the values unmodified.
   
 */
class QWT_EXPORT QwtNullTransform: public QwtTransform
{
public:
    QwtNullTransform();
    virtual ~QwtNullTransform();

    virtual double transform( double value ) const;
    virtual double invTransform( double value ) const;

    virtual QwtTransform *copy() const;
};
/*!
   \brief Logarithmic transformation

   QwtLogTransform modifies the values using log() and exp().

   \note In the calculations of QwtScaleMap the base of the log function
         has no effect on the mapping. So QwtLogTransform can be used 
         for log2(), log10() or any other logarithmic scale.
 */
class QWT_EXPORT QwtLogTransform: public QwtTransform
{   
public:
    QwtLogTransform();
    virtual ~QwtLogTransform();
    
    virtual double transform( double value ) const;
    virtual double invTransform( double value ) const;

    virtual double bounded( double value ) const;

    virtual QwtTransform *copy() const;

110 111
    static const double LogMin;
    static const double LogMax;
Bryant's avatar
Bryant committed
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
};

/*!
   \brief A transformation using pow()

   QwtPowerTransform preserves the sign of a value. 
   F.e. a transformation with a factor of 2
   transforms a value of -3 to -9 and v.v. Thus QwtPowerTransform
   can be used for scales including negative values.
 */
class QWT_EXPORT QwtPowerTransform: public QwtTransform
{
public:
    QwtPowerTransform( double exponent );
    virtual ~QwtPowerTransform();

    virtual double transform( double value ) const;
    virtual double invTransform( double value ) const;

    virtual QwtTransform *copy() const;

private:
    const double d_exponent;
};

#endif