Qwt User's Guide: qwt_scale_map.cpp Source File

Qwt User's Guide 6.2.0

qwt_scale_map.cpp
1 /******************************************************************************
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 #include "qwt_scale_map.h"
11 #include "qwt_math.h"
12
13 #include <qrect.h>
14 #include <qdebug.h>
15
21 QwtScaleMap::QwtScaleMap()
22 : m_s1( 0.0 )
23 , m_s2( 1.0 )
24 , m_p1( 0.0 )
25 , m_p2( 1.0 )
26 , m_cnv( 1.0 )
27 , m_ts1( 0.0 )
28 , m_transform( NULL )
29 {
30 }
31
33 QwtScaleMap::QwtScaleMap( const QwtScaleMap& other )
34 : m_s1( other.m_s1 )
35 , m_s2( other.m_s2 )
36 , m_p1( other.m_p1 )
37 , m_p2( other.m_p2 )
38 , m_cnv( other.m_cnv )
39 , m_ts1( other.m_ts1 )
40 , m_transform( NULL )
41 {
42 if ( other.m_transform )
43 m_transform = other.m_transform->copy();
44 }
45
49 QwtScaleMap::~QwtScaleMap()
50 {
51 delete m_transform;
52 }
53
55 QwtScaleMap& QwtScaleMap::operator=( const QwtScaleMap& other )
56 {
57 m_s1 = other.m_s1;
58 m_s2 = other.m_s2;
59 m_p1 = other.m_p1;
60 m_p2 = other.m_p2;
61 m_cnv = other.m_cnv;
62 m_ts1 = other.m_ts1;
63
64 delete m_transform;
65 m_transform = NULL;
66
67 if ( other.m_transform )
68 m_transform = other.m_transform->copy();
69
70 return *this;
71 }
72
76 void QwtScaleMap::setTransformation( QwtTransform* transform )
77 {
78 if ( transform != m_transform )
79 {
80 delete m_transform;
81 m_transform = transform;
82 }
83
84 setScaleInterval( m_s1, m_s2 );
85 }
86
88 const QwtTransform* QwtScaleMap::transformation() const
89 {
90 return m_transform;
91 }
92
100 void QwtScaleMap::setScaleInterval( double s1, double s2 )
101 {
102 m_s1 = s1;
103 m_s2 = s2;
104
105 if ( m_transform )
106 {
107 m_s1 = m_transform->bounded( m_s1 );
108 m_s2 = m_transform->bounded( m_s2 );
109 }
110
111 updateFactor();
112 }
113
119 void QwtScaleMap::setPaintInterval( double p1, double p2 )
120 {
121 m_p1 = p1;
122 m_p2 = p2;
123
124 updateFactor();
125 }
126
127 void QwtScaleMap::updateFactor()
128 {
129 m_ts1 = m_s1;
130 double ts2 = m_s2;
131
132 if ( m_transform )
133 {
134 m_ts1 = m_transform->transform( m_ts1 );
135 ts2 = m_transform->transform( ts2 );
136 }
137
138 m_cnv = 1.0;
139 if ( m_ts1 != ts2 )
140 m_cnv = ( m_p2 - m_p1 ) / ( ts2 - m_ts1 );
141 }
142
153 QRectF QwtScaleMap::transform( const QwtScaleMap& xMap,
154 const QwtScaleMap& yMap, const QRectF& rect )
155 {
156 double x1 = xMap.transform( rect.left() );
157 double x2 = xMap.transform( rect.right() );
158 double y1 = yMap.transform( rect.top() );
159 double y2 = yMap.transform( rect.bottom() );
160
161 if ( x2 < x1 )
162 qSwap( x1, x2 );
163 if ( y2 < y1 )
164 qSwap( y1, y2 );
165
166 if ( qwtFuzzyCompare( x1, 0.0, x2 - x1 ) == 0 )
167 x1 = 0.0;
168 if ( qwtFuzzyCompare( x2, 0.0, x2 - x1 ) == 0 )
169 x2 = 0.0;
170 if ( qwtFuzzyCompare( y1, 0.0, y2 - y1 ) == 0 )
171 y1 = 0.0;
172 if ( qwtFuzzyCompare( y2, 0.0, y2 - y1 ) == 0 )
173 y2 = 0.0;
174
175 return QRectF( x1, y1, x2 - x1 + 1, y2 - y1 + 1 );
176 }
177
187 QPointF QwtScaleMap::invTransform( const QwtScaleMap& xMap,
188 const QwtScaleMap& yMap, const QPointF& pos )
189 {
190 return QPointF(
191 xMap.invTransform( pos.x() ),
192 yMap.invTransform( pos.y() )
193 );
194 }
195
206 QPointF QwtScaleMap::transform( const QwtScaleMap& xMap,
207 const QwtScaleMap& yMap, const QPointF& pos )
208 {
209 return QPointF(
210 xMap.transform( pos.x() ),
211 yMap.transform( pos.y() )
212 );
213 }
214
224 QRectF QwtScaleMap::invTransform( const QwtScaleMap& xMap,
225 const QwtScaleMap& yMap, const QRectF& rect )
226 {
227 const double x1 = xMap.invTransform( rect.left() );
228 const double x2 = xMap.invTransform( rect.right() - 1 );
229 const double y1 = yMap.invTransform( rect.top() );
230 const double y2 = yMap.invTransform( rect.bottom() - 1 );
231
232 const QRectF r( x1, y1, x2 - x1, y2 - y1 );
233 return r.normalized();
234 }
235
236 #ifndef QT_NO_DEBUG_STREAM
237
238 QDebug operator<<( QDebug debug, const QwtScaleMap& map )
239 {
240 debug.nospace() << "QwtScaleMap("
241 << map.transformation()
242 << ", s:" << map.s1() << "->" << map.s2()
243 << ", p:" << map.p1() << "->" << map.p2()
244 << ")";
245
246 return debug.space();
247 }
248
249 #endif
QwtScaleMap
A scale map.
Definition: qwt_scale_map.h:27
QwtScaleMap::operator=
QwtScaleMap & operator=(const QwtScaleMap &)
Assignment operator.
Definition: qwt_scale_map.cpp:55
QwtScaleMap::p1
double p1() const
Definition: qwt_scale_map.h:99
QwtScaleMap::transform
double transform(double s) const
Definition: qwt_scale_map.h:137
QwtScaleMap::s1
double s1() const
Definition: qwt_scale_map.h:83
QwtScaleMap::s2
double s2() const
Definition: qwt_scale_map.h:91
QwtScaleMap::transformation
const QwtTransform * transformation() const
Get the transformation.
Definition: qwt_scale_map.cpp:88
QwtScaleMap::QwtScaleMap
QwtScaleMap()
Constructor.
Definition: qwt_scale_map.cpp:21
QwtScaleMap::setPaintInterval
void setPaintInterval(double p1, double p2)
Specify the borders of the paint device interval.
Definition: qwt_scale_map.cpp:119
QwtScaleMap::setScaleInterval
void setScaleInterval(double s1, double s2)
Specify the borders of the scale interval.
Definition: qwt_scale_map.cpp:100
QwtScaleMap::invTransform
double invTransform(double p) const
Definition: qwt_scale_map.h:154
QwtScaleMap::p2
double p2() const
Definition: qwt_scale_map.h:107
QwtScaleMap::setTransformation
void setTransformation(QwtTransform *)
Definition: qwt_scale_map.cpp:76
QwtScaleMap::~QwtScaleMap
~QwtScaleMap()
Definition: qwt_scale_map.cpp:49
QwtTransform
A transformation between coordinate systems.
Definition: qwt_transform.h:36
QwtTransform::transform
virtual double transform(double value) const =0
QwtTransform::copy
virtual QwtTransform * copy() const =0
Virtualized copy operation.
QwtTransform::bounded
virtual double bounded(double value) const
Definition: qwt_transform.cpp:33