Qwt Polar User's Guide  0.1.0
qwt_polar_curve.h
00001 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
00002  * QwtPolar Widget Library
00003  * Copyright (C) 2008   Uwe Rathmann
00004  *
00005  * This library is free software; you can redistribute it and/or
00006  * modify it under the terms of the Qwt License, Version 1.0
00007  *****************************************************************************/
00008 
00009 #ifndef QWT_POLAR_CURVE_H
00010 #define QWT_POLAR_CURVE_H
00011 
00012 #include "qwt_polar_global.h"
00013 #include "qwt_data.h"
00014 #include "qwt_polar_point.h"
00015 #include "qwt_polar_item.h"
00016 
00017 class QPainter;
00018 class QwtSymbol;
00019 class QwtCurveFitter;
00020 
00030 class QWT_POLAR_EXPORT QwtPolarCurve: public QwtPolarItem
00031 {
00032 public:
00045     enum CurveStyle
00046     {
00047         NoCurve,
00048         Lines,
00049         UserCurve = 100
00050     };
00051 
00052     explicit QwtPolarCurve();
00053     explicit QwtPolarCurve(const QwtText &title);
00054     explicit QwtPolarCurve(const QString &title);
00055 
00056     virtual ~QwtPolarCurve();
00057 
00058     virtual int rtti() const;
00059 
00060     void setData(const QwtData &data);
00061     QwtData &data();
00062     const QwtData &data() const;
00063 
00064     int dataSize() const;
00065     double radius(int i) const;
00066     double azimuth(int i) const;
00067     QwtPolarPoint sample(int i) const;
00068 
00069     void setPen(const QPen &);
00070     const QPen &pen() const;
00071 
00072     void setStyle(CurveStyle style);
00073     CurveStyle style() const;
00074 
00075     void setSymbol(const QwtSymbol &s);
00076     const QwtSymbol& symbol() const;
00077 
00078     void setCurveFitter(QwtCurveFitter *);
00079     QwtCurveFitter *curveFitter() const;
00080 
00081     virtual void draw(QPainter *p, 
00082         const QwtScaleMap &azimuthMap, const QwtScaleMap &radialMap,
00083         const QwtDoublePoint &pole, double radius,
00084         const QwtDoubleRect &canvasRect) const;
00085 
00086     virtual void draw(QPainter *p,
00087         const QwtScaleMap &azimuthMap, const QwtScaleMap &radialMap,
00088         const QwtDoublePoint &pole,
00089         int from, int to) const;
00090 
00091     virtual void updateLegend(QwtLegend *) const;
00092     virtual QwtDoubleInterval boundingInterval(int scaleId) const;
00093 
00094 protected:
00095 
00096     void init();
00097 
00098     virtual void drawCurve(QPainter *, int style,
00099         const QwtScaleMap &azimuthMap, const QwtScaleMap &radialMap,
00100         const QwtDoublePoint &pole,
00101         int from, int to) const;
00102 
00103     virtual void drawSymbols(QPainter *, const QwtSymbol &,
00104         const QwtScaleMap &azimuthMap, const QwtScaleMap &radialMap,
00105         const QwtDoublePoint &pole,
00106         int from, int to) const;
00107 
00108     void drawLines(QPainter *, 
00109         const QwtScaleMap &azimuthMap, const QwtScaleMap &radialMap,
00110         const QwtDoublePoint &pole,
00111         int from, int to) const;
00112 
00113 private:
00114     QwtData *d_points;
00115 
00116     class PrivateData;
00117     PrivateData *d_data;
00118 };
00119 
00121 inline QwtData &QwtPolarCurve::data()
00122 {
00123     return *d_points;
00124 }
00125 
00127 inline const QwtData &QwtPolarCurve::data() const
00128 {
00129     return *d_points;
00130 }
00131 
00136 inline double QwtPolarCurve::azimuth(int i) const 
00137 { 
00138     return d_points->x(i); 
00139 }
00140 
00145 inline double QwtPolarCurve::radius(int i) const 
00146 { 
00147     return d_points->y(i); 
00148 }
00149 
00154 inline QwtPolarPoint QwtPolarCurve::sample(int i) const
00155 {
00156     return QwtPolarPoint(azimuth(i), radius(i));
00157 }
00158 
00159 #endif