annotate examples/qwt/simpleplot/simple.d @ 383:bd7f485e3573

More debug fixes
author Max Samukha <maxter@spambox.com>
date Mon, 12 Jul 2010 22:50:58 +0300
parents 347e4c7a9ba1
children
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
381
347e4c7a9ba1 make QwtD compile on Windows@
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 380
diff changeset
19 // hack to avoid linker error (undefined symbols), possibly a compiler bug
378
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
20 real mysin(real arg)
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
21 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
22 return sin(arg);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
23 }
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
24
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
25 real mycos(real arg)
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
26 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
27 return cos(arg);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
28 }
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
29
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
30 alias real function(real) double_func;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
31
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
32 class SimpleData: QwtData
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
33 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
34 // The x values depend on its index and the y values
383
bd7f485e3573 More debug fixes
Max Samukha <maxter@spambox.com>
parents: 381
diff changeset
35 // can be calculated from the corresponding x value.
378
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
36 // So we don't need to store the values.
383
bd7f485e3573 More debug fixes
Max Samukha <maxter@spambox.com>
parents: 381
diff changeset
37 // Such an implementation is slower because every point
378
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
38 // has to be recalculated for every replot, but it demonstrates how
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
39 // QwtData can be used.
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
40
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
41 public:
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
42 this(const double_func y, size_t size)
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
43 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
44 d_size = size;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
45 d_y = y;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
46 }
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
47
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
48 QwtData copy() const
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
49 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
50 return new SimpleData(d_y, d_size);
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
51 }
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
52
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
53 size_t size() const
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
54 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
55 return d_size;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
56 }
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
57
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
58 double x(size_t i) const
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
59 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
60 return 0.1 * i;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
61 }
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
62
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
63 double y(size_t i) const
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
64 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
65 return d_y(x(i));
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
66 }
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
67 private:
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
68 size_t d_size;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
69 const double_func d_y;
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
70 };
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
71
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
72 class Plot : QwtPlot
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
73 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
74 public:
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
75 this()
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
76 {
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
77 setTitle("A Simple QwtPlot Demonstration");
380
beb04f46ef4a fix NULL default values
Eldar Insafutdinov
parents: 379
diff changeset
78 insertLegend(new QwtLegend(), QwtPlot.RightLegend);
378
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
79
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
80 // Set axis titles
379
a795eeb3b21f example minor change
Eldar Insafutdinov
parents: 378
diff changeset
81 setAxisTitle(xBottom, "x -->");
a795eeb3b21f example minor change
Eldar Insafutdinov
parents: 378
diff changeset
82 setAxisTitle(yLeft, "y -->");
383
bd7f485e3573 More debug fixes
Max Samukha <maxter@spambox.com>
parents: 381
diff changeset
83
378
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
383
bd7f485e3573 More debug fixes
Max Samukha <maxter@spambox.com>
parents: 381
diff changeset
101
378
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();
383
bd7f485e3573 More debug fixes
Max Samukha <maxter@spambox.com>
parents: 381
diff changeset
130 return a.exec();
378
7341c47790d4 binding of qwt
Eldar Insafutdinov
parents:
diff changeset
131 }