##// END OF EJS Templates
Log domains zoomin, zoomout and move added
Marek Rosa -
r2280:75ed5c985850
parent child
Show More
@@ -33,6 +33,9
33 #include "qpieseries.h"
33 #include "qpieseries.h"
34 #include "chartitem_p.h"
34 #include "chartitem_p.h"
35 #include "xydomain_p.h"
35 #include "xydomain_p.h"
36 #include "xlogydomain_p.h"
37 #include "logxydomain_p.h"
38 #include "logxlogydomain_p.h"
36
39
37 #ifndef QT_ON_ARM
40 #ifndef QT_ON_ARM
38 #include "qdatetimeaxis.h"
41 #include "qdatetimeaxis.h"
@@ -52,29 +52,6 QSizeF AbstractDomain::size() const
52 return m_size;
52 return m_size;
53 }
53 }
54
54
55 //void AbstractDomain::setRange(qreal minX, qreal maxX, qreal minY, qreal maxY)
56 //{
57 // bool axisXChanged = false;
58 // bool axisYChanged = false;
59
60 // if (!qFuzzyIsNull(m_minX - minX) || !qFuzzyIsNull(m_maxX - maxX)) {
61 // m_minX = minX;
62 // m_maxX = maxX;
63 // axisXChanged = true;
64 // emit rangeHorizontalChanged(m_minX, m_maxX);
65 // }
66
67 // if (!qFuzzyIsNull(m_minY - minY) || !qFuzzyIsNull(m_maxY - maxY)) {
68 // m_minY = minY;
69 // m_maxY = maxY;
70 // axisYChanged = true;
71 // emit rangeVerticalChanged(m_minY, m_maxY);
72 // }
73
74 // if (axisXChanged || axisYChanged)
75 // emit updated();
76 //}
77
78 void AbstractDomain::setRangeX(qreal min, qreal max)
55 void AbstractDomain::setRangeX(qreal min, qreal max)
79 {
56 {
80 setRange(min, max, m_minY, m_maxY);
57 setRange(min, max, m_minY, m_maxY);
@@ -122,89 +99,6 bool AbstractDomain::isEmpty() const
122 return qFuzzyIsNull(spanX()) || qFuzzyIsNull(spanY()) || m_size.isEmpty() ;
99 return qFuzzyIsNull(spanX()) || qFuzzyIsNull(spanY()) || m_size.isEmpty() ;
123 }
100 }
124
101
125 void AbstractDomain::zoomIn(const QRectF &rect)
126 {
127 qreal dx = spanX() / m_size.width();
128 qreal dy = spanY() / m_size.height();
129
130 qreal maxX = m_maxX;
131 qreal minX = m_minX;
132 qreal minY = m_minY;
133 qreal maxY = m_maxY;
134
135 maxX = minX + dx * rect.right();
136 minX = minX + dx * rect.left();
137 minY = maxY - dy * rect.bottom();
138 maxY = maxY - dy * rect.top();
139
140 setRange(minX, maxX, minY, maxY);
141 }
142
143 void AbstractDomain::zoomOut(const QRectF &rect)
144 {
145 qreal dx = spanX() / rect.width();
146 qreal dy = spanY() / rect.height();
147
148 qreal maxX = m_maxX;
149 qreal minX = m_minX;
150 qreal minY = m_minY;
151 qreal maxY = m_maxY;
152
153 minX = maxX - dx * rect.right();
154 maxX = minX + dx * m_size.width();
155 maxY = minY + dy * rect.bottom();
156 minY = maxY - dy * m_size.height();
157
158 setRange(minX, maxX, minY, maxY);
159 }
160
161 void AbstractDomain::move(qreal dx, qreal dy)
162 {
163 qreal x = spanX() / m_size.width();
164 qreal y = spanY() / m_size.height();
165
166 qreal maxX = m_maxX;
167 qreal minX = m_minX;
168 qreal minY = m_minY;
169 qreal maxY = m_maxY;
170
171 if (dx != 0) {
172 minX = minX + x * dx;
173 maxX = maxX + x * dx;
174 }
175 if (dy != 0) {
176 minY = minY + y * dy;
177 maxY = maxY + y * dy;
178 }
179 setRange(minX, maxX, minY, maxY);
180 }
181
182 //QPointF AbstractDomain::calculateGeometryPoint(const QPointF &point) const
183 //{
184 // const qreal deltaX = m_size.width() / (m_maxX - m_minX);
185 // const qreal deltaY = m_size.height() / (m_maxY - m_minY);
186 // qreal x = (point.x() - m_minX) * deltaX;
187 // qreal y = (point.y() - m_minY) * -deltaY + m_size.height();
188 // return QPointF(x, y);
189 //}
190
191 //QVector<QPointF> AbstractDomain::calculateGeometryPoints(const QList<QPointF>& vector) const
192 //{
193 // const qreal deltaX = m_size.width() / (m_maxX - m_minX);
194 // const qreal deltaY = m_size.height() / (m_maxY - m_minY);
195
196 // QVector<QPointF> result;
197 // result.resize(vector.count());
198
199 // for (int i = 0; i < vector.count(); ++i) {
200 // qreal x = (vector[i].x() - m_minX) * deltaX;
201 // qreal y = (vector[i].y() - m_minY) * -deltaY + m_size.height();
202 // result[i].setX(x);
203 // result[i].setY(y);
204 // }
205 // return result;
206 //}
207
208 QPointF AbstractDomain::calculateDomainPoint(const QPointF &point) const
102 QPointF AbstractDomain::calculateDomainPoint(const QPointF &point) const
209 {
103 {
210 const qreal deltaX = m_size.width() / (m_maxX - m_minX);
104 const qreal deltaX = m_size.width() / (m_maxX - m_minX);
@@ -72,9 +72,9 public:
72 friend bool QTCOMMERCIALCHART_AUTOTEST_EXPORT operator!= (const AbstractDomain &domain1, const AbstractDomain &domain2);
72 friend bool QTCOMMERCIALCHART_AUTOTEST_EXPORT operator!= (const AbstractDomain &domain1, const AbstractDomain &domain2);
73 friend QDebug QTCOMMERCIALCHART_AUTOTEST_EXPORT operator<<(QDebug dbg, const AbstractDomain &domain);
73 friend QDebug QTCOMMERCIALCHART_AUTOTEST_EXPORT operator<<(QDebug dbg, const AbstractDomain &domain);
74
74
75 void zoomIn(const QRectF &rect);
75 virtual void zoomIn(const QRectF &rect) = 0;
76 void zoomOut(const QRectF &rect);
76 virtual void zoomOut(const QRectF &rect) = 0;
77 void move(qreal dx, qreal dy);
77 virtual void move(qreal dx, qreal dy) = 0;
78
78
79 virtual QPointF calculateGeometryPoint(const QPointF &point) const = 0;
79 virtual QPointF calculateGeometryPoint(const QPointF &point) const = 0;
80 virtual QPointF calculateDomainPoint(const QPointF &point) const = 0;
80 virtual QPointF calculateDomainPoint(const QPointF &point) const = 0;
@@ -68,58 +68,46 void LogXLogYDomain::setRange(qreal minX, qreal maxX, qreal minY, qreal maxY)
68
68
69 void LogXLogYDomain::zoomIn(const QRectF &rect)
69 void LogXLogYDomain::zoomIn(const QRectF &rect)
70 {
70 {
71 qreal dx = spanX() / m_size.width();
71 qreal newLogMinX = rect.left() * (m_logMaxX - m_logMinX) / m_size.width() + m_logMinX;
72 qreal dy = spanY() / m_size.height();
72 qreal newLogMaxX = rect.right() * (m_logMaxX - m_logMinX) / m_size.width() + m_logMinX;
73 qreal minX = qPow(m_logBaseX, newLogMinX);
74 qreal maxX = qPow(m_logBaseX, newLogMaxX);
73
75
74 qreal maxX = m_maxX;
76 qreal newLogMinY = m_logMaxY - rect.bottom() * (m_logMaxY - m_logMinY) / m_size.height();
75 qreal minX = m_minX;
77 qreal newLogMaxY = m_logMaxY - rect.top() * (m_logMaxY - m_logMinY) / m_size.height();
76 qreal minY = m_minY;
78 qreal minY = qPow(m_logBaseY, newLogMinY);
77 qreal maxY = m_maxY;
79 qreal maxY = qPow(m_logBaseY, newLogMaxY);
78
79 maxX = minX + dx * rect.right();
80 minX = minX + dx * rect.left();
81 minY = maxY - dy * rect.bottom();
82 maxY = maxY - dy * rect.top();
83
80
84 setRange(minX, maxX, minY, maxY);
81 setRange(minX, maxX, minY, maxY);
85 }
82 }
86
83
87 void LogXLogYDomain::zoomOut(const QRectF &rect)
84 void LogXLogYDomain::zoomOut(const QRectF &rect)
88 {
85 {
89 qreal dx = spanX() / rect.width();
86 qreal ratioX = m_size.width()/rect.width();
90 qreal dy = spanY() / rect.height();
87 qreal newLogMinX = m_logMinX - (m_logMaxX - m_logMinX) / ratioX;
91
88 qreal newLogMaxX = m_logMaxX + (m_logMaxX - m_logMinX) / ratioX;
92 qreal maxX = m_maxX;
89 qreal minX = qPow(m_logBaseX, newLogMinX);
93 qreal minX = m_minX;
90 qreal maxX = qPow(m_logBaseX, newLogMaxX);
94 qreal minY = m_minY;
91
95 qreal maxY = m_maxY;
92 qreal ratioY = m_size.height()/rect.height();
96
93 qreal newLogMinY = m_logMaxY - (m_logMaxY - m_logMinY) / ratioY;
97 minX = maxX - dx * rect.right();
94 qreal newLogMaxY = m_logMaxY + (m_logMaxY - m_logMinY) / ratioY;
98 maxX = minX + dx * m_size.width();
95 qreal minY = qPow(m_logBaseY, newLogMinY);
99 maxY = minY + dy * rect.bottom();
96 qreal maxY = qPow(m_logBaseY, newLogMaxY);
100 minY = maxY - dy * m_size.height();
101
97
102 setRange(minX, maxX, minY, maxY);
98 setRange(minX, maxX, minY, maxY);
103 }
99 }
104
100
105 void LogXLogYDomain::move(qreal dx, qreal dy)
101 void LogXLogYDomain::move(qreal dx, qreal dy)
106 {
102 {
107 qreal x = spanX() / m_size.width();
103 qreal stepX = dx * qAbs(m_logMaxX - m_logMinX) / m_size.width();
108 qreal y = spanY() / m_size.height();
104 qreal minX = qPow(m_logBaseX, m_logMinX + stepX);
105 qreal maxX = qPow(m_logBaseX, m_logMaxX + stepX);
109
106
110 qreal maxX = m_maxX;
107 qreal stepY = dy * qAbs(m_logMaxY - m_logMinY) / m_size.height();
111 qreal minX = m_minX;
108 qreal minY = qPow(m_logBaseY, m_logMinY + stepY);
112 qreal minY = m_minY;
109 qreal maxY = qPow(m_logBaseY, m_logMaxY + stepY);
113 qreal maxY = m_maxY;
114
110
115 if (dx != 0) {
116 minX = minX + x * dx;
117 maxX = maxX + x * dx;
118 }
119 if (dy != 0) {
120 minY = minY + y * dy;
121 maxY = maxY + y * dy;
122 }
123 setRange(minX, maxX, minY, maxY);
111 setRange(minX, maxX, minY, maxY);
124 }
112 }
125
113
@@ -64,16 +64,15 void LogXYDomain::setRange(qreal minX, qreal maxX, qreal minY, qreal maxY)
64
64
65 void LogXYDomain::zoomIn(const QRectF &rect)
65 void LogXYDomain::zoomIn(const QRectF &rect)
66 {
66 {
67 qreal dx = spanX() / m_size.width();
67 qreal newLogMinX = rect.left() * (m_logMaxX - m_logMinX) / m_size.width() + m_logMinX;
68 qreal dy = spanY() / m_size.height();
68 qreal newLogMaxX = rect.right() * (m_logMaxX - m_logMinX) / m_size.width() + m_logMinX;
69 qreal minX = qPow(m_logBaseX, newLogMinX);
70 qreal maxX = qPow(m_logBaseX, newLogMaxX);
69
71
70 qreal maxX = m_maxX;
72 qreal dy = spanY() / m_size.height();
71 qreal minX = m_minX;
72 qreal minY = m_minY;
73 qreal minY = m_minY;
73 qreal maxY = m_maxY;
74 qreal maxY = m_maxY;
74
75
75 maxX = minX + dx * rect.right();
76 minX = minX + dx * rect.left();
77 minY = maxY - dy * rect.bottom();
76 minY = maxY - dy * rect.bottom();
78 maxY = maxY - dy * rect.top();
77 maxY = maxY - dy * rect.top();
79
78
@@ -82,16 +81,16 void LogXYDomain::zoomIn(const QRectF &rect)
82
81
83 void LogXYDomain::zoomOut(const QRectF &rect)
82 void LogXYDomain::zoomOut(const QRectF &rect)
84 {
83 {
85 qreal dx = spanX() / rect.width();
84 qreal ratioX = m_size.width()/rect.width();
86 qreal dy = spanY() / rect.height();
85 qreal newLogMinX = m_logMinX - (m_logMaxX - m_logMinX) / ratioX;
86 qreal newLogMaxX = m_logMaxX + (m_logMaxX - m_logMinX) / ratioX;
87 qreal minX = qPow(m_logBaseX, newLogMinX);
88 qreal maxX = qPow(m_logBaseX, newLogMaxX);
87
89
88 qreal maxX = m_maxX;
90 qreal dy = spanY() / rect.height();
89 qreal minX = m_minX;
90 qreal minY = m_minY;
91 qreal minY = m_minY;
91 qreal maxY = m_maxY;
92 qreal maxY = m_maxY;
92
93
93 minX = maxX - dx * rect.right();
94 maxX = minX + dx * m_size.width();
95 maxY = minY + dy * rect.bottom();
94 maxY = minY + dy * rect.bottom();
96 minY = maxY - dy * m_size.height();
95 minY = maxY - dy * m_size.height();
97
96
@@ -100,18 +99,14 void LogXYDomain::zoomOut(const QRectF &rect)
100
99
101 void LogXYDomain::move(qreal dx, qreal dy)
100 void LogXYDomain::move(qreal dx, qreal dy)
102 {
101 {
103 qreal x = spanX() / m_size.width();
102 qreal stepX = dx * qAbs(m_logMaxX - m_logMinX) / m_size.width();
104 qreal y = spanY() / m_size.height();
103 qreal minX = qPow(m_logBaseX, m_logMinX + stepX);
104 qreal maxX = qPow(m_logBaseX, m_logMaxX + stepX);
105
105
106 qreal maxX = m_maxX;
106 qreal y = spanY() / m_size.height();
107 qreal minX = m_minX;
108 qreal minY = m_minY;
107 qreal minY = m_minY;
109 qreal maxY = m_maxY;
108 qreal maxY = m_maxY;
110
109
111 if (dx != 0) {
112 minX = minX + x * dx;
113 maxX = maxX + x * dx;
114 }
115 if (dy != 0) {
110 if (dy != 0) {
116 minY = minY + y * dy;
111 minY = minY + y * dy;
117 maxY = maxY + y * dy;
112 maxY = maxY + y * dy;
@@ -64,17 +64,16 void XLogYDomain::setRange(qreal minX, qreal maxX, qreal minY, qreal maxY)
64 void XLogYDomain::zoomIn(const QRectF &rect)
64 void XLogYDomain::zoomIn(const QRectF &rect)
65 {
65 {
66 qreal dx = spanX() / m_size.width();
66 qreal dx = spanX() / m_size.width();
67 qreal dy = spanY() / m_size.height();
68
69 qreal maxX = m_maxX;
67 qreal maxX = m_maxX;
70 qreal minX = m_minX;
68 qreal minX = m_minX;
71 qreal minY = m_minY;
72 qreal maxY = m_maxY;
73
69
74 maxX = minX + dx * rect.right();
70 maxX = minX + dx * rect.right();
75 minX = minX + dx * rect.left();
71 minX = minX + dx * rect.left();
76 minY = maxY - dy * rect.bottom();
72
77 maxY = maxY - dy * rect.top();
73 qreal newLogMinY = m_logMaxY - rect.bottom() * (m_logMaxY - m_logMinY) / m_size.height();
74 qreal newLogMaxY = m_logMaxY - rect.top() * (m_logMaxY - m_logMinY) / m_size.height();
75 qreal minY = qPow(m_logBaseY, newLogMinY);
76 qreal maxY = qPow(m_logBaseY, newLogMaxY);
78
77
79 setRange(minX, maxX, minY, maxY);
78 setRange(minX, maxX, minY, maxY);
80 }
79 }
@@ -82,17 +81,17 void XLogYDomain::zoomIn(const QRectF &rect)
82 void XLogYDomain::zoomOut(const QRectF &rect)
81 void XLogYDomain::zoomOut(const QRectF &rect)
83 {
82 {
84 qreal dx = spanX() / rect.width();
83 qreal dx = spanX() / rect.width();
85 qreal dy = spanY() / rect.height();
86
87 qreal maxX = m_maxX;
84 qreal maxX = m_maxX;
88 qreal minX = m_minX;
85 qreal minX = m_minX;
89 qreal minY = m_minY;
90 qreal maxY = m_maxY;
91
86
92 minX = maxX - dx * rect.right();
87 minX = maxX - dx * rect.right();
93 maxX = minX + dx * m_size.width();
88 maxX = minX + dx * m_size.width();
94 maxY = minY + dy * rect.bottom();
89
95 minY = maxY - dy * m_size.height();
90 qreal ratioY = m_size.height()/rect.height();
91 qreal newLogMinY = m_logMaxY - (m_logMaxY - m_logMinY) / ratioY;
92 qreal newLogMaxY = m_logMaxY + (m_logMaxY - m_logMinY) / ratioY;
93 qreal minY = qPow(m_logBaseY, newLogMinY);
94 qreal maxY = qPow(m_logBaseY, newLogMaxY);
96
95
97 setRange(minX, maxX, minY, maxY);
96 setRange(minX, maxX, minY, maxY);
98 }
97 }
@@ -100,21 +99,18 void XLogYDomain::zoomOut(const QRectF &rect)
100 void XLogYDomain::move(qreal dx, qreal dy)
99 void XLogYDomain::move(qreal dx, qreal dy)
101 {
100 {
102 qreal x = spanX() / m_size.width();
101 qreal x = spanX() / m_size.width();
103 qreal y = spanY() / m_size.height();
104
105 qreal maxX = m_maxX;
102 qreal maxX = m_maxX;
106 qreal minX = m_minX;
103 qreal minX = m_minX;
107 qreal minY = m_minY;
108 qreal maxY = m_maxY;
109
104
110 if (dx != 0) {
105 if (dx != 0) {
111 minX = minX + x * dx;
106 minX = minX + x * dx;
112 maxX = maxX + x * dx;
107 maxX = maxX + x * dx;
113 }
108 }
114 if (dy != 0) {
109
115 minY = minY + y * dy;
110 qreal stepY = dy * qAbs(m_logMaxY - m_logMinY) / m_size.height();
116 maxY = maxY + y * dy;
111 qreal minY = qPow(m_logBaseY, m_logMinY + stepY);
117 }
112 qreal maxY = qPow(m_logBaseY, m_logMaxY + stepY);
113
118 setRange(minX, maxX, minY, maxY);
114 setRange(minX, maxX, minY, maxY);
119 }
115 }
120
116
General Comments 0
You need to be logged in to leave comments. Login now