diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/qwt/simpleplot/simple.d	Sat Jul 10 21:54:44 2010 +0100
@@ -0,0 +1,131 @@
+module simple;
+
+import std.math;
+
+import qt.gui.QApplication;
+import qt.qwt.QwtPlot;
+import qt.qwt.QwtPlotMarker;
+import qt.qwt.QwtPlotCurve;
+import qt.qwt.QwtLegend;
+import qt.qwt.QwtData;
+import qt.qwt.QwtText;
+
+//-----------------------------------------------------------------
+//              simple.d
+//
+//      A simple example which shows how to use QwtPlot and QwtData
+//-----------------------------------------------------------------
+
+real mysin(real arg)
+{
+    return sin(arg);
+}
+
+real mycos(real arg)
+{
+    return cos(arg);
+}
+
+alias real function(real) double_func;
+
+class SimpleData: QwtData
+{
+    // The x values depend on its index and the y values
+    // can be calculated from the corresponding x value. 
+    // So we don't need to store the values.
+    // Such an implementation is slower because every point 
+    // has to be recalculated for every replot, but it demonstrates how
+    // QwtData can be used.
+
+public:
+    this(const double_func y, size_t size)
+    {
+        d_size = size;
+        d_y = y;
+    }
+
+    QwtData copy() const
+    {
+        return new SimpleData(d_y, d_size);
+    }
+
+    size_t size() const
+    {
+        return d_size;
+    }
+
+    double x(size_t i) const
+    {
+        return 0.1 * i;
+    }
+
+    double y(size_t i) const
+    {
+        return d_y(x(i));
+    }
+private:
+    size_t d_size;
+    const double_func d_y;
+};
+
+class Plot : QwtPlot
+{
+public:
+    this()
+    {
+        super(cast(QWidget)null);
+        setTitle("A Simple QwtPlot Demonstration");
+        insertLegend(new QwtLegend(cast(QWidget)null), QwtPlot.RightLegend);
+
+        // Set axis titles
+        setAxisTitle(xBottom, "x -.");
+        setAxisTitle(yLeft, "y -.");
+        
+        // Insert new curves
+        auto cSin = new QwtPlotCurve("y = sin(x)");
+        cSin.setRenderHint(QwtPlotItem.RenderAntialiased);
+        cSin.setPen(new QPen(new QColor(Qt.red)));
+        cSin.attach(this);
+
+        auto cCos = new QwtPlotCurve("y = cos(x)");
+        cCos.setRenderHint(QwtPlotItem.RenderAntialiased);
+        cCos.setPen(new QPen(new QColor(Qt.blue)));
+        cCos.attach(this);
+
+        // Create sin and cos data
+        const int nPoints = 100;
+        cSin.setData(new SimpleData(&mysin, nPoints));
+        cCos.setData(new SimpleData(&mycos, nPoints));
+
+        // Insert markers
+        
+        //  ...a horizontal line at y = 0...
+        auto mY = new QwtPlotMarker();
+        mY.setLabel(new QwtText("y = 0"));
+        mY.setLabelAlignment(Qt.AlignRight | Qt.AlignTop);
+        mY.setLineStyle(QwtPlotMarker.HLine);
+        mY.setYValue(0.0);
+        mY.attach(this);
+
+        //  ...a vertical line at x = 2 * pi
+        auto mX = new QwtPlotMarker();
+        mX.setLabel(new QwtText("x = 2 pi"));
+        mX.setLabelAlignment(Qt.AlignLeft | Qt.AlignBottom);
+        mX.setLabelOrientation(Qt.Vertical);
+        mX.setLineStyle(QwtPlotMarker.VLine);
+        mX.setLinePen(new QPen(new QBrush(Qt.black), 0, Qt.DashDotLine));
+        mX.setXValue(2.0 * PI);
+        mX.attach(this);
+    }
+
+};
+
+int main(string[] args)
+{
+    auto a = new QApplication(args);
+
+    scope plot = new Plot;
+    plot.resize(600,400);
+    plot.show();
+    return a.exec(); 
+}