source: pacpusframework/branches/2.0-beta1/include/extlib/qwt-5.2.1/qwt_scale_map.h@ 89

Last change on this file since 89 was 89, checked in by morasjul, 11 years ago

PACPUS 2.0 Beta deployed in new branch

Major changes:
-Add communication interface between components
-Add examples for communications interface (TestComponents)
-Move to Qt5 support

  • Property svn:executable set to *
File size: 4.5 KB
Line 
1/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
2 * Qwt Widget Library
3 * Copyright (C) 1997 Josef Wilgen
4 * Copyright (C) 2002 Uwe Rathmann
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the Qwt License, Version 1.0
8 *****************************************************************************/
9
10#ifndef QWT_SCALE_MAP_H
11#define QWT_SCALE_MAP_H
12
13#include "qwt_global.h"
14#include "qwt_math.h"
15
16/*!
17 \brief Operations for linear or logarithmic (base 10) transformations
18*/
19class QWT_EXPORT QwtScaleTransformation
20{
21public:
22 enum Type
23 {
24 Linear,
25 Log10,
26
27 Other
28 };
29
30 QwtScaleTransformation(Type type);
31 virtual ~QwtScaleTransformation();
32
33 virtual double xForm(double x, double s1, double s2,
34 double p1, double p2) const;
35 virtual double invXForm(double x, double s1, double s2,
36 double p1, double p2) const;
37
38 Type type() const;
39
40 virtual QwtScaleTransformation *copy() const;
41
42private:
43 QwtScaleTransformation();
44 QwtScaleTransformation &operator=( const QwtScaleTransformation);
45
46 const Type d_type;
47};
48
49//! \return Transformation type
50inline QwtScaleTransformation::Type QwtScaleTransformation::type() const
51{
52 return d_type;
53}
54
55/*!
56 \brief A scale map
57
58 QwtScaleMap offers transformations from a scale
59 into a paint interval and vice versa.
60*/
61class QWT_EXPORT QwtScaleMap
62{
63public:
64 QwtScaleMap();
65 QwtScaleMap(const QwtScaleMap&);
66
67 ~QwtScaleMap();
68
69 QwtScaleMap &operator=(const QwtScaleMap &);
70
71 void setTransformation(QwtScaleTransformation * );
72 const QwtScaleTransformation *transformation() const;
73
74 void setPaintInterval(int p1, int p2);
75 void setPaintXInterval(double p1, double p2);
76 void setScaleInterval(double s1, double s2);
77
78 int transform(double x) const;
79 double invTransform(double i) const;
80
81 double xTransform(double x) const;
82
83 double p1() const;
84 double p2() const;
85
86 double s1() const;
87 double s2() const;
88
89 double pDist() const;
90 double sDist() const;
91
92 QT_STATIC_CONST double LogMin;
93 QT_STATIC_CONST double LogMax;
94
95private:
96 void newFactor();
97
98 double d_s1, d_s2; // scale interval boundaries
99 double d_p1, d_p2; // paint device interval boundaries
100
101 double d_cnv; // conversion factor
102
103 QwtScaleTransformation *d_transformation;
104};
105
106/*!
107 \return First border of the scale interval
108*/
109inline double QwtScaleMap::s1() const
110{
111 return d_s1;
112}
113
114/*!
115 \return Second border of the scale interval
116*/
117inline double QwtScaleMap::s2() const
118{
119 return d_s2;
120}
121
122/*!
123 \return First border of the paint interval
124*/
125inline double QwtScaleMap::p1() const
126{
127 return d_p1;
128}
129
130/*!
131 \return Second border of the paint interval
132*/
133inline double QwtScaleMap::p2() const
134{
135 return d_p2;
136}
137
138/*!
139 \return qwtAbs(p2() - p1())
140*/
141inline double QwtScaleMap::pDist() const
142{
143 return qwtAbs(d_p2 - d_p1);
144}
145
146/*!
147 \return qwtAbs(s2() - s1())
148*/
149inline double QwtScaleMap::sDist() const
150{
151 return qwtAbs(d_s2 - d_s1);
152}
153
154/*!
155 Transform a point related to the scale interval into an point
156 related to the interval of the paint device
157
158 \param s Value relative to the coordinates of the scale
159*/
160inline double QwtScaleMap::xTransform(double s) const
161{
162 // try to inline code from QwtScaleTransformation
163
164 if ( d_transformation->type() == QwtScaleTransformation::Linear )
165 return d_p1 + (s - d_s1) * d_cnv;
166
167 if ( d_transformation->type() == QwtScaleTransformation::Log10 )
168 return d_p1 + log(s / d_s1) * d_cnv;
169
170 return d_transformation->xForm(s, d_s1, d_s2, d_p1, d_p2 );
171}
172
173/*!
174 Transform an paint device value into a value in the
175 interval of the scale.
176
177 \param p Value relative to the coordinates of the paint device
178 \sa transform()
179*/
180inline double QwtScaleMap::invTransform(double p) const
181{
182 return d_transformation->invXForm(p, d_p1, d_p2, d_s1, d_s2 );
183}
184
185/*!
186 Transform a point related to the scale interval into an point
187 related to the interval of the paint device and round it to
188 an integer. (In Qt <= 3.x paint devices are integer based. )
189
190 \param s Value relative to the coordinates of the scale
191 \sa xTransform()
192*/
193inline int QwtScaleMap::transform(double s) const
194{
195 return qRound(xTransform(s));
196}
197
198#endif
Note: See TracBrowser for help on using the repository browser.