annotate examples/qwt/simpleplot/simple.d @ 378:7341c47790d4

binding of qwt
author Eldar Insafutdinov
date Sat, 10 Jul 2010 21:54:44 +0100
parents
children a795eeb3b21f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
378
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
1 module simple;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
2
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
3 import std.math;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
4
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
5 import qt.gui.QApplication;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
6 import qt.qwt.QwtPlot;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
7 import qt.qwt.QwtPlotMarker;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
8 import qt.qwt.QwtPlotCurve;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
9 import qt.qwt.QwtLegend;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
10 import qt.qwt.QwtData;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
11 import qt.qwt.QwtText;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
12
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
13 //-----------------------------------------------------------------
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
14 // simple.d
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
15 //
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
16 // A simple example which shows how to use QwtPlot and QwtData
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
17 //-----------------------------------------------------------------
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
18
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
19 real mysin(real arg)
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
20 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
21 return sin(arg);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
22 }
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
23
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
24 real mycos(real arg)
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
25 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
26 return cos(arg);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
27 }
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
28
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
29 alias real function(real) double_func;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
30
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
31 class SimpleData: QwtData
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
32 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
33 // The x values depend on its index and the y values
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
34 // can be calculated from the corresponding x value.
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
35 // So we don't need to store the values.
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
36 // Such an implementation is slower because every point
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
37 // has to be recalculated for every replot, but it demonstrates how
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
38 // QwtData can be used.
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
39
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
40 public:
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
41 this(const double_func y, size_t size)
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
42 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
43 d_size = size;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
44 d_y = y;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
45 }
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
46
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
47 QwtData copy() const
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
48 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
49 return new SimpleData(d_y, d_size);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
50 }
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
51
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
52 size_t size() const
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
53 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
54 return d_size;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
55 }
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
56
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
57 double x(size_t i) const
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
58 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
59 return 0.1 * i;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
60 }
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
61
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
62 double y(size_t i) const
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
63 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
64 return d_y(x(i));
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
65 }
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
66 private:
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
67 size_t d_size;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
68 const double_func d_y;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
69 };
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
70
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
71 class Plot : QwtPlot
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
72 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
73 public:
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
74 this()
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
75 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
76 super(cast(QWidget)null);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
77 setTitle("A Simple QwtPlot Demonstration");
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
78 insertLegend(new QwtLegend(cast(QWidget)null), QwtPlot.RightLegend);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
79
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
80 // Set axis titles
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
81 setAxisTitle(xBottom, "x -.");
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
82 setAxisTitle(yLeft, "y -.");
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
83
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
84 // Insert new curves
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
85 auto cSin = new QwtPlotCurve("y = sin(x)");
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
86 cSin.setRenderHint(QwtPlotItem.RenderAntialiased);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
87 cSin.setPen(new QPen(new QColor(Qt.red)));
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
88 cSin.attach(this);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
89
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
90 auto cCos = new QwtPlotCurve("y = cos(x)");
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
91 cCos.setRenderHint(QwtPlotItem.RenderAntialiased);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
92 cCos.setPen(new QPen(new QColor(Qt.blue)));
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
93 cCos.attach(this);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
94
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
95 // Create sin and cos data
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
96 const int nPoints = 100;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
97 cSin.setData(new SimpleData(&mysin, nPoints));
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
98 cCos.setData(new SimpleData(&mycos, nPoints));
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
99
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
100 // Insert markers
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
101
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
102 // ...a horizontal line at y = 0...
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
103 auto mY = new QwtPlotMarker();
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
104 mY.setLabel(new QwtText("y = 0"));
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
105 mY.setLabelAlignment(Qt.AlignRight | Qt.AlignTop);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
106 mY.setLineStyle(QwtPlotMarker.HLine);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
107 mY.setYValue(0.0);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
108 mY.attach(this);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
109
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
110 // ...a vertical line at x = 2 * pi
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
111 auto mX = new QwtPlotMarker();
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
112 mX.setLabel(new QwtText("x = 2 pi"));
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
113 mX.setLabelAlignment(Qt.AlignLeft | Qt.AlignBottom);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
114 mX.setLabelOrientation(Qt.Vertical);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
115 mX.setLineStyle(QwtPlotMarker.VLine);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
116 mX.setLinePen(new QPen(new QBrush(Qt.black), 0, Qt.DashDotLine));
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
117 mX.setXValue(2.0 * PI);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
118 mX.attach(this);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
119 }
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
120
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
121 };
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
122
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
123 int main(string[] args)
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
124 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
125 auto a = new QApplication(args);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
126
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
127 scope plot = new Plot;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
128 plot.resize(600,400);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
129 plot.show();
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
130 return a.exec();
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
131 }