QWT 7.0.1
Loading...
Searching...
No Matches
qwt_scale_engine.h
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 * Modified by ChenZongYan in 2024 <czy.t@163.com>
10 * Summary of major modifications (see ChangeLog.md for full history):
11 * 1. CMake build system & C++11 throughout.
12 * 2. Core panner/ zoomer refactored:
13 * - QwtPanner → QwtCachePanner (pixmap-cache version)
14 * - New real-time QwtPlotPanner derived from QwtPicker.
15 * 3. Zoomer supports multi-axis.
16 * 4. Parasite-plot framework:
17 * - QwtFigure, QwtPlotParasiteLayout, QwtPlotTransparentCanvas,
18 * - QwtPlotScaleEventDispatcher, built-in pan/zoom on axis.
19 * 5. New picker: QwtPlotSeriesDataPicker (works with date axis).
20 * 6. Raster & color-map extensions:
21 * - QwtGridRasterData (2-D table + interpolation)
22 * - QwtLinearColorMap::stopColors(), stopPos() API rename.
23 * 7. Bar-chart: expose pen/brush control.
24 * 8. Amalgamated build: single QwtPlot.h / QwtPlot.cpp pair in src-amalgamate.
25 *****************************************************************************/
26
27#ifndef QWT_SCALE_ENGINE_H
28#define QWT_SCALE_ENGINE_H
29
30#include "qwt_global.h"
31#include "qwt_scale_div.h"
32
33class QwtInterval;
34class QwtTransform;
35
39class QWT_EXPORT QwtScaleArithmetic
40{
41public:
42 static double ceilEps(double value, double intervalSize);
43 static double floorEps(double value, double intervalSize);
44
45 static double divideEps(double intervalSize, double numSteps);
46
47 static double divideInterval(double intervalSize, int numSteps, uint base);
48};
49
66class QWT_EXPORT QwtScaleEngine
67{
68public:
77 {
79 NoAttribute = 0x00,
80
82 IncludeReference = 0x01,
83
85 Symmetric = 0x02,
86
97 Floating = 0x04,
98
100 Inverted = 0x08
101 };
102
103 Q_DECLARE_FLAGS(Attributes, Attribute)
104
105 explicit QwtScaleEngine(uint base = 10);
106 virtual ~QwtScaleEngine();
107
108 void setBase(uint base);
109 uint base() const;
110
111 void setAttribute(Attribute, bool on = true);
112 bool testAttribute(Attribute) const;
113
114 void setAttributes(Attributes);
115 Attributes attributes() const;
116
117 void setReference(double);
118 double reference() const;
119
120 void setMargins(double lower, double upper);
121 double lowerMargin() const;
122 double upperMargin() const;
123
132 virtual void autoScale(int maxNumSteps, double& x1, double& x2, double& stepSize) const = 0;
133
146 virtual QwtScaleDiv
147 divideScale(double x1, double x2, int maxMajorSteps, int maxMinorSteps, double stepSize = 0.0) const = 0;
148
149 void setTransformation(QwtTransform*);
150 QwtTransform* transformation() const;
151
152protected:
153 bool contains(const QwtInterval&, double value) const;
154 QList< double > strip(const QList< double >&, const QwtInterval&) const;
155
156 double divideInterval(double intervalSize, int numSteps) const;
157
158 QwtInterval buildInterval(double value) const;
159
160private:
161 Q_DISABLE_COPY(QwtScaleEngine)
162
163 class PrivateData;
164 PrivateData* m_data;
165};
166
174class QWT_EXPORT QwtLinearScaleEngine : public QwtScaleEngine
175{
176public:
177 explicit QwtLinearScaleEngine(uint base = 10);
178 virtual ~QwtLinearScaleEngine();
179
180 virtual void autoScale(int maxNumSteps, double& x1, double& x2, double& stepSize) const QWT_OVERRIDE;
181
182 virtual QwtScaleDiv
183 divideScale(double x1, double x2, int maxMajorSteps, int maxMinorSteps, double stepSize = 0.0) const QWT_OVERRIDE;
184
185protected:
186 QwtInterval align(const QwtInterval&, double stepSize) const;
187
188 void buildTicks(const QwtInterval&, double stepSize, int maxMinorSteps, QList< double > ticks[ QwtScaleDiv::NTickTypes ]) const;
189
190 QList< double > buildMajorTicks(const QwtInterval& interval, double stepSize) const;
191
192 void buildMinorTicks(const QList< double >& majorTicks,
193 int maxMinorSteps,
194 double stepSize,
195 QList< double >& minorTicks,
196 QList< double >& mediumTicks) const;
197};
198
210class QWT_EXPORT QwtLogScaleEngine : public QwtScaleEngine
211{
212public:
213 explicit QwtLogScaleEngine(uint base = 10);
214 virtual ~QwtLogScaleEngine();
215
216 virtual void autoScale(int maxNumSteps, double& x1, double& x2, double& stepSize) const QWT_OVERRIDE;
217
218 virtual QwtScaleDiv
219 divideScale(double x1, double x2, int maxMajorSteps, int maxMinorSteps, double stepSize = 0.0) const QWT_OVERRIDE;
220
221protected:
222 QwtInterval align(const QwtInterval&, double stepSize) const;
223
224 void buildTicks(const QwtInterval&, double stepSize, int maxMinorSteps, QList< double > ticks[ QwtScaleDiv::NTickTypes ]) const;
225
226 QList< double > buildMajorTicks(const QwtInterval& interval, double stepSize) const;
227
228 void buildMinorTicks(const QList< double >& majorTicks,
229 int maxMinorSteps,
230 double stepSize,
231 QList< double >& minorTicks,
232 QList< double >& mediumTicks) const;
233};
234
235Q_DECLARE_OPERATORS_FOR_FLAGS(QwtScaleEngine::Attributes)
236
237#endif
A class representing an interval.
Definition qwt_interval.h:40
A scale engine for linear scales.
Definition qwt_scale_engine.h:175
A scale engine for logarithmic scales.
Definition qwt_scale_engine.h:211
Arithmetic including a tolerance.
Definition qwt_scale_engine.h:40
A class representing a scale division/表示刻度划分的类
Definition qwt_scale_div.h:53
@ NTickTypes
Number of valid tick types.
Definition qwt_scale_div.h:71
Base class for scale engines./刻度引擎的基类
Definition qwt_scale_engine.h:67
Attribute
Layout attributes/布局属性
Definition qwt_scale_engine.h:77
virtual void autoScale(int maxNumSteps, double &x1, double &x2, double &stepSize) const =0
Align and divide an interval.
virtual QwtScaleDiv divideScale(double x1, double x2, int maxMajorSteps, int maxMinorSteps, double stepSize=0.0) const =0
Calculate a scale division.
A transformation between coordinate systems.
Definition qwt_transform.h:53