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)
71 Q_PROPERTY(
bool adaptiveSampling READ adaptiveSampling WRITE setAdaptiveSampling)
103 LineStyle lineStyle()
const {
return mLineStyle; }
105 ErrorType errorType()
const {
return mErrorType; }
106 QPen errorPen()
const {
return mErrorPen; }
107 double errorBarSize()
const {
return mErrorBarSize; }
108 bool errorBarSkipSymbol()
const {
return mErrorBarSkipSymbol; }
109 QCPGraph *channelFillGraph()
const {
return mChannelFillGraph.
data(); }
110 bool adaptiveSampling()
const {
return mAdaptiveSampling; }
113 void setData(
QCPDataMap *data,
bool copy=
false);
114 void setData(
const QVector<double> &key,
const QVector<double> &value);
115 void setDataKeyError(
const QVector<double> &key,
const QVector<double> &value,
const QVector<double> &keyError);
116 void setDataKeyError(
const QVector<double> &key,
const QVector<double> &value,
const QVector<double> &keyErrorMinus,
const QVector<double> &keyErrorPlus);
117 void setDataValueError(
const QVector<double> &key,
const QVector<double> &value,
const QVector<double> &valueError);
118 void setDataValueError(
const QVector<double> &key,
const QVector<double> &value,
const QVector<double> &valueErrorMinus,
const QVector<double> &valueErrorPlus);
119 void setDataBothError(
const QVector<double> &key,
const QVector<double> &value,
const QVector<double> &keyError,
const QVector<double> &valueError);
120 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);
121 void setLineStyle(LineStyle ls);
123 void setErrorType(ErrorType errorType);
124 void setErrorPen(
const QPen &pen);
125 void setErrorBarSize(
double size);
126 void setErrorBarSkipSymbol(
bool enabled);
127 void setChannelFillGraph(
QCPGraph *targetGraph);
128 void setAdaptiveSampling(
bool enabled);
132 void addData(
const QCPData &data);
133 void addData(
double key,
double value);
134 void addData(
const QVector<double> &keys,
const QVector<double> &values);
135 void removeDataBefore(
double key);
136 void removeDataAfter(
double key);
137 void removeData(
double fromKey,
double toKey);
138 void removeData(
double key);
142 virtual double selectTest(
const QPointF &pos,
bool onlySelectable, QVariant *details=0)
const;
146 void rescaleAxes(
bool onlyEnlarge,
bool includeErrorBars)
const;
147 void rescaleKeyAxis(
bool onlyEnlarge,
bool includeErrorBars)
const;
154 LineStyle mLineStyle;
156 ErrorType mErrorType;
157 double mErrorBarSize;
158 bool mErrorBarSkipSymbol;
159 QPointer<QCPGraph> mChannelFillGraph;
160 bool mAdaptiveSampling;
167 virtual QCPRange getKeyRange(
bool &foundRange, SignDomain inSignDomain,
bool includeErrors)
const;
171 virtual void drawFill(
QCPPainter *painter, QVector<QPointF> *lineData)
const;
172 virtual void drawScatterPlot(
QCPPainter *painter, QVector<QCPData> *scatterData)
const;
173 virtual void drawLinePlot(
QCPPainter *painter, QVector<QPointF> *lineData)
const;
174 virtual void drawImpulsePlot(
QCPPainter *painter, QVector<QPointF> *lineData)
const;
177 void getPreparedData(QVector<QCPData> *lineData, QVector<QCPData> *scatterData)
const;
178 void getPlotData(QVector<QPointF> *lineData, QVector<QCPData> *scatterData)
const;
179 void getScatterPlotData(QVector<QCPData> *scatterData)
const;
180 void getLinePlotData(QVector<QPointF> *linePixelData, QVector<QCPData> *scatterData)
const;
181 void getStepLeftPlotData(QVector<QPointF> *linePixelData, QVector<QCPData> *scatterData)
const;
182 void getStepRightPlotData(QVector<QPointF> *linePixelData, QVector<QCPData> *scatterData)
const;
183 void getStepCenterPlotData(QVector<QPointF> *linePixelData, QVector<QCPData> *scatterData)
const;
184 void getImpulsePlotData(QVector<QPointF> *linePixelData, QVector<QCPData> *scatterData)
const;
185 void drawError(
QCPPainter *painter,
double x,
double y,
const QCPData &data)
const;
186 void getVisibleDataBounds(QCPDataMap::const_iterator &lower, QCPDataMap::const_iterator &upper)
const;
187 int countDataInBounds(
const QCPDataMap::const_iterator &lower,
const QCPDataMap::const_iterator &upper,
int maxCount)
const;
188 void addFillBasePoints(QVector<QPointF> *lineData)
const;
189 void removeFillBasePoints(QVector<QPointF> *lineData)
const;
190 QPointF lowerFillBasePoint(
double lowerKey)
const;
191 QPointF upperFillBasePoint(
double upperKey)
const;
192 const QPolygonF getChannelFillPolygon(
const QVector<QPointF> *lineData)
const;
193 int findIndexBelowX(
const QVector<QPointF> *data,
double x)
const;
194 int findIndexAboveX(
const QVector<QPointF> *data,
double x)
const;
195 int findIndexBelowY(
const QVector<QPointF> *data,
double y)
const;
196 int findIndexAboveY(
const QVector<QPointF> *data,
double y)
const;
197 double pointDistance(
const QPointF &pixelPoint)
const;
203 #endif // QCP_PLOTTABLE_GRAPH_H