QWT API (中文) 7.3.0
Qt绘图库 - 中文API文档
载入中...
搜索中...
未找到
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 "qwtcore_global.h"
31#include "qwt_scale_div.h"
32
33class QwtInterval;
34class QwtTransform;
35
39class QWTCORE_EXPORT QwtScaleArithmetic
40{
41public:
43 static double ceilEps(double value, double intervalSize);
45 static double floorEps(double value, double intervalSize);
46
48 static double divideEps(double intervalSize, double numSteps);
49
51 static double divideInterval(double intervalSize, int numSteps, uint base);
52};
53
61class QWTCORE_EXPORT QwtScaleEngine
62{
63public:
69 {
71 NoAttribute = 0x00,
72
74 IncludeReference = 0x01,
75
77 Symmetric = 0x02,
78
85 Floating = 0x04,
86
88 Inverted = 0x08
89 };
90
91 Q_DECLARE_FLAGS(Attributes, Attribute)
92
93 explicit QwtScaleEngine(uint base = 10);
94 virtual ~QwtScaleEngine();
95
97 void setBase(uint base);
99 uint base() const;
100
102 void setAttribute(Attribute, bool on = true);
104 bool testAttribute(Attribute) const;
105
107 void setAttributes(Attributes);
109 Attributes attributes() const;
110
112 void setReference(double);
114 double reference() const;
115
117 void setMargins(double lower, double upper);
119 double lowerMargin() const;
121 double upperMargin() const;
122
124 virtual void autoScale(int maxNumSteps, double& x1, double& x2, double& stepSize) const = 0;
125
127 virtual QwtScaleDiv
128 divideScale(double x1, double x2, int maxMajorSteps, int maxMinorSteps, double stepSize = 0.0) const = 0;
129
131 void setTransformation(QwtTransform*);
133 QwtTransform* transformation() const;
134
135protected:
137 bool contains(const QwtInterval&, double value) const;
139 QList< double > strip(const QList< double >&, const QwtInterval&) const;
140
142 double divideInterval(double intervalSize, int numSteps) const;
143
145 QwtInterval buildInterval(double value) const;
146
147private:
148 QwtScaleEngine(const QwtScaleEngine&) = delete;
149 QwtScaleEngine& operator=(const QwtScaleEngine&) = delete;
150
151 QWT_DECLARE_PRIVATE(QwtScaleEngine)
152};
153
159class QWTCORE_EXPORT QwtLinearScaleEngine : public QwtScaleEngine
160{
161public:
162 explicit QwtLinearScaleEngine(uint base = 10);
163 ~QwtLinearScaleEngine() override;
164
165 virtual void autoScale(int maxNumSteps, double& x1, double& x2, double& stepSize) const override;
166
167 virtual QwtScaleDiv
168 divideScale(double x1, double x2, int maxMajorSteps, int maxMinorSteps, double stepSize = 0.0) const override;
169
170protected:
171 QwtInterval align(const QwtInterval&, double stepSize) const;
172
173 void buildTicks(const QwtInterval&, double stepSize, int maxMinorSteps, QList< double > ticks[ QwtScaleDiv::NTickTypes ]) const;
174
175 QList< double > buildMajorTicks(const QwtInterval& interval, double stepSize) const;
176
177 void buildMinorTicks(const QList< double >& majorTicks,
178 int maxMinorSteps,
179 double stepSize,
180 QList< double >& minorTicks,
181 QList< double >& mediumTicks) const;
182};
183
193class QWTCORE_EXPORT QwtLogScaleEngine : public QwtScaleEngine
194{
195public:
196 explicit QwtLogScaleEngine(uint base = 10);
197 ~QwtLogScaleEngine() override;
198
199 virtual void autoScale(int maxNumSteps, double& x1, double& x2, double& stepSize) const override;
200
201 virtual QwtScaleDiv
202 divideScale(double x1, double x2, int maxMajorSteps, int maxMinorSteps, double stepSize = 0.0) const override;
203
204protected:
205 QwtInterval align(const QwtInterval&, double stepSize) const;
206
207 void buildTicks(const QwtInterval&, double stepSize, int maxMinorSteps, QList< double > ticks[ QwtScaleDiv::NTickTypes ]) const;
208
209 QList< double > buildMajorTicks(const QwtInterval& interval, double stepSize) const;
210
211 void buildMinorTicks(const QList< double >& majorTicks,
212 int maxMinorSteps,
213 double stepSize,
214 QList< double >& minorTicks,
215 QList< double >& mediumTicks) const;
216};
217
218Q_DECLARE_OPERATORS_FOR_FLAGS(QwtScaleEngine::Attributes)
219
220#endif
A class representing an interval
Definition qwt_interval.h:39
A scale engine for linear scales
Definition qwt_scale_engine.h:160
A scale engine for logarithmic scales
Definition qwt_scale_engine.h:194
Arithmetic including a tolerance
Definition qwt_scale_engine.h:40
A class representing a scale division
Definition qwt_scale_div.h:47
@ NTickTypes
Number of valid tick types
Definition qwt_scale_div.h:65
Base class for scale engines
Definition qwt_scale_engine.h:62
Attribute
Layout attributes
Definition qwt_scale_engine.h:69
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:47