26 #ifndef QCP_PLOTTABLE_GRAPH_H
27 #define QCP_PLOTTABLE_GRAPH_H
29 #include "../global.h"
31 #include "../plottable.h"
32 #include "../painter.h"
41 QCPData(
double key,
double value);
43 double keyErrorPlus, keyErrorMinus;
44 double valueErrorPlus, valueErrorMinus;
46 Q_DECLARE_TYPEINFO(
QCPData, Q_MOVABLE_TYPE);
56 typedef QMapIterator<double, QCPData> QCPDataMapIterator;
57 typedef QMutableMapIterator<double, QCPData> QCPDataMutableMapIterator;
64 Q_PROPERTY(
LineStyle lineStyle READ lineStyle WRITE setLineStyle)
65 Q_PROPERTY(
QCPScatterStyle scatterStyle READ scatterStyle WRITE setScatterStyle)
66 Q_PROPERTY(
ErrorType errorType READ errorType WRITE setErrorType)
67 Q_PROPERTY(QPen errorPen READ errorPen WRITE setErrorPen)
68 Q_PROPERTY(
double errorBarSize READ errorBarSize WRITE setErrorBarSize)
69 Q_PROPERTY(
bool errorBarSkipSymbol READ errorBarSkipSymbol WRITE setErrorBarSkipSymbol)
70 Q_PROPERTY(
QCPGraph* channelFillGraph READ channelFillGraph WRITE setChannelFillGraph)
101 const
QCPDataMap *data()
const {
return mData; }
102 LineStyle lineStyle()
const {
return mLineStyle; }
104 ErrorType errorType()
const {
return mErrorType; }
105 QPen errorPen()
const {
return mErrorPen; }
106 double errorBarSize()
const {
return mErrorBarSize; }
107 bool errorBarSkipSymbol()
const {
return mErrorBarSkipSymbol; }
108 QCPGraph *channelFillGraph()
const {
return mChannelFillGraph.data(); }
111 void setData(
QCPDataMap *data,
bool copy=
false);
112 void setData(
const QVector<double> &key,
const QVector<double> &value);
113 void setDataKeyError(
const QVector<double> &key,
const QVector<double> &value,
const QVector<double> &keyError);
114 void setDataKeyError(
const QVector<double> &key,
const QVector<double> &value,
const QVector<double> &keyErrorMinus,
const QVector<double> &keyErrorPlus);
115 void setDataValueError(
const QVector<double> &key,
const QVector<double> &value,
const QVector<double> &valueError);
116 void setDataValueError(
const QVector<double> &key,
const QVector<double> &value,
const QVector<double> &valueErrorMinus,
const QVector<double> &valueErrorPlus);
117 void setDataBothError(
const QVector<double> &key,
const QVector<double> &value,
const QVector<double> &keyError,
const QVector<double> &valueError);
118 void setDataBothError(
const QVector<double> &key,
const QVector<double> &value,
const QVector<double> &keyErrorMinus,
const QVector<double> &keyErrorPlus,
const QVector<double> &valueErrorMinus,
const QVector<double> &valueErrorPlus);
119 void setLineStyle(LineStyle ls);
121 void setErrorType(ErrorType errorType);
122 void setErrorPen(
const QPen &pen);
123 void setErrorBarSize(
double size);
124 void setErrorBarSkipSymbol(
bool enabled);
125 void setChannelFillGraph(
QCPGraph *targetGraph);
129 void addData(
const QCPData &data);
130 void addData(
double key,
double value);
131 void addData(
const QVector<double> &keys,
const QVector<double> &values);
132 void removeDataBefore(
double key);
133 void removeDataAfter(
double key);
134 void removeData(
double fromKey,
double toKey);
135 void removeData(
double key);
139 virtual double selectTest(
const QPointF &pos,
bool onlySelectable, QVariant *details=0)
const;
143 void rescaleAxes(
bool onlyEnlarge,
bool includeErrorBars)
const;
144 void rescaleKeyAxis(
bool onlyEnlarge,
bool includeErrorBars)
const;
151 LineStyle mLineStyle;
153 ErrorType mErrorType;
154 double mErrorBarSize;
155 bool mErrorBarSkipSymbol;
156 QPointer<QCPGraph> mChannelFillGraph;
163 virtual QCPRange getKeyRange(
bool &validRange, SignDomain inSignDomain,
bool includeErrors)
const;
167 virtual void drawFill(
QCPPainter *painter, QVector<QPointF> *lineData)
const;
168 virtual void drawScatterPlot(
QCPPainter *painter, QVector<QCPData> *pointData)
const;
169 virtual void drawLinePlot(
QCPPainter *painter, QVector<QPointF> *lineData)
const;
170 virtual void drawImpulsePlot(
QCPPainter *painter, QVector<QPointF> *lineData)
const;
173 void getPlotData(QVector<QPointF> *lineData, QVector<QCPData> *pointData)
const;
174 void getScatterPlotData(QVector<QCPData> *pointData)
const;
175 void getLinePlotData(QVector<QPointF> *lineData, QVector<QCPData> *pointData)
const;
176 void getStepLeftPlotData(QVector<QPointF> *lineData, QVector<QCPData> *pointData)
const;
177 void getStepRightPlotData(QVector<QPointF> *lineData, QVector<QCPData> *pointData)
const;
178 void getStepCenterPlotData(QVector<QPointF> *lineData, QVector<QCPData> *pointData)
const;
179 void getImpulsePlotData(QVector<QPointF> *lineData, QVector<QCPData> *pointData)
const;
180 void drawError(
QCPPainter *painter,
double x,
double y,
const QCPData &data)
const;
181 void getVisibleDataBounds(QCPDataMap::const_iterator &lower, QCPDataMap::const_iterator &upper,
int &count)
const;
182 void addFillBasePoints(QVector<QPointF> *lineData)
const;
183 void removeFillBasePoints(QVector<QPointF> *lineData)
const;
184 QPointF lowerFillBasePoint(
double lowerKey)
const;
185 QPointF upperFillBasePoint(
double upperKey)
const;
186 const QPolygonF getChannelFillPolygon(
const QVector<QPointF> *lineData)
const;
187 int findIndexBelowX(
const QVector<QPointF> *data,
double x)
const;
188 int findIndexAboveX(
const QVector<QPointF> *data,
double x)
const;
189 int findIndexBelowY(
const QVector<QPointF> *data,
double y)
const;
190 int findIndexAboveY(
const QVector<QPointF> *data,
double y)
const;
191 double pointDistance(
const QPointF &pixelPoint)
const;
197 #endif // QCP_PLOTTABLE_GRAPH_H