00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "qwt_math.h"
00011 #include "qwt_data.h"
00012
00013 QwtData::QwtData()
00014 {
00015 }
00016
00017 QwtData::~QwtData()
00018 {
00019 }
00020
00032 QwtDoubleRect QwtData::boundingRect() const
00033 {
00034 const size_t sz = size();
00035
00036 if ( sz <= 0 )
00037 return QwtDoubleRect(1.0, 1.0, -2.0, -2.0);
00038
00039 double minX, maxX, minY, maxY;
00040 minX = maxX = x(0);
00041 minY = maxY = y(0);
00042
00043 for ( size_t i = 1; i < sz; i++ )
00044 {
00045 const double xv = x(i);
00046 if ( xv < minX )
00047 minX = xv;
00048 if ( xv > maxX )
00049 maxX = xv;
00050
00051 const double yv = y(i);
00052 if ( yv < minY )
00053 minY = yv;
00054 if ( yv > maxY )
00055 maxY = yv;
00056 }
00057 return QwtDoubleRect(minX, minY, maxX - minX, maxY - minY);
00058 }
00059
00060 QwtDoublePointData::QwtDoublePointData(const QwtArray<QwtDoublePoint> &data):
00061 d_data(data)
00062 {
00063 }
00064
00066 QwtDoublePointData& QwtDoublePointData::operator=(
00067 const QwtDoublePointData &data)
00068 {
00069 if (this != &data)
00070 {
00071 d_data = data.d_data;
00072 }
00073 return *this;
00074 }
00075
00076 size_t QwtDoublePointData::size() const
00077 {
00078 return d_data.size();
00079 }
00080
00081 double QwtDoublePointData::x(size_t i) const
00082 {
00083 return d_data[int(i)].x();
00084 }
00085
00086 double QwtDoublePointData::y(size_t i) const
00087 {
00088 return d_data[int(i)].y();
00089 }
00090
00091 const QwtArray<QwtDoublePoint> QwtDoublePointData::data() const
00092 {
00093 return d_data;
00094 }
00095
00096 QwtData *QwtDoublePointData::copy() const
00097 {
00098 return new QwtDoublePointData(d_data);
00099 }
00100
00106 QwtArrayData::QwtArrayData(
00107 const QwtArray<double> &x, const QwtArray<double> &y):
00108 d_x(x),
00109 d_y(y)
00110 {
00111 }
00112
00118 QwtArrayData::QwtArrayData(const double *x, const double *y, size_t size)
00119 {
00120 #if QT_VERSION >= 0x040000
00121 d_x.resize(size);
00122 qMemCopy(d_x.data(), x, size * sizeof(double));
00123
00124 d_y.resize(size);
00125 qMemCopy(d_y.data(), y, size * sizeof(double));
00126 #else
00127 d_x.detach();
00128 d_x.duplicate(x, size);
00129
00130 d_y.detach();
00131 d_y.duplicate(y, size);
00132 #endif
00133 }
00134
00136 QwtArrayData& QwtArrayData::operator=(const QwtArrayData &data)
00137 {
00138 if (this != &data)
00139 {
00140 d_x = data.d_x;
00141 d_y = data.d_y;
00142 }
00143 return *this;
00144 }
00145
00146 size_t QwtArrayData::size() const
00147 {
00148 return qwtMin(d_x.size(), d_y.size());
00149 }
00150
00151 double QwtArrayData::x(size_t i) const
00152 {
00153 return d_x[int(i)];
00154 }
00155
00156 double QwtArrayData::y(size_t i) const
00157 {
00158 return d_y[int(i)];
00159 }
00160
00161 const QwtArray<double> &QwtArrayData::xData() const
00162 {
00163 return d_x;
00164 }
00165
00166 const QwtArray<double> &QwtArrayData::yData() const
00167 {
00168 return d_y;
00169 }
00170
00171 QwtData *QwtArrayData::copy() const
00172 {
00173 return new QwtArrayData(d_x, d_y);
00174 }
00175
00181 QwtDoubleRect QwtArrayData::boundingRect() const
00182 {
00183 const size_t sz = size();
00184
00185 if ( sz <= 0 )
00186 return QwtDoubleRect(1.0, 1.0, -2.0, -2.0);
00187
00188 double minX, maxX, minY, maxY;
00189 QwtArray<double>::ConstIterator xIt = d_x.begin();
00190 QwtArray<double>::ConstIterator yIt = d_y.begin();
00191 QwtArray<double>::ConstIterator end = d_x.begin() + sz;
00192 minX = maxX = *xIt++;
00193 minY = maxY = *yIt++;
00194
00195 while ( xIt < end )
00196 {
00197 const double xv = *xIt++;
00198 if ( xv < minX )
00199 minX = xv;
00200 if ( xv > maxX )
00201 maxX = xv;
00202
00203 const double yv = *yIt++;
00204 if ( yv < minY )
00205 minY = yv;
00206 if ( yv > maxY )
00207 maxY = yv;
00208 }
00209 return QwtDoubleRect(minX, minY, maxX - minX, maxY - minY);
00210 }
00211
00212 QwtCPointerData::QwtCPointerData(const double *x, const double *y,
00213 size_t size):
00214 d_x(x), d_y(y), d_size(size)
00215 {
00216 }
00217
00219 QwtCPointerData& QwtCPointerData::operator=(const QwtCPointerData &data)
00220 {
00221 if (this != &data)
00222 {
00223 d_x = data.d_x;
00224 d_y = data.d_y;
00225 d_size = data.d_size;
00226 }
00227 return *this;
00228 }
00229
00230 size_t QwtCPointerData::size() const
00231 {
00232 return d_size;
00233 }
00234
00235 double QwtCPointerData::x(size_t i) const
00236 {
00237 return d_x[int(i)];
00238 }
00239
00240 double QwtCPointerData::y(size_t i) const
00241 {
00242 return d_y[int(i)];
00243 }
00244
00245 const double *QwtCPointerData::xData() const
00246 {
00247 return d_x;
00248 }
00249
00250 const double *QwtCPointerData::yData() const
00251 {
00252 return d_y;
00253 }
00254
00255 QwtData *QwtCPointerData::copy() const
00256 {
00257 return new QwtCPointerData(d_x, d_y, d_size);
00258 }
00259
00265 QwtDoubleRect QwtCPointerData::boundingRect() const
00266 {
00267 const size_t sz = size();
00268
00269 if ( sz <= 0 )
00270 return QwtDoubleRect(1.0, 1.0, -2.0, -2.0);
00271
00272 double minX, maxX, minY, maxY;
00273 const double *xIt = d_x;
00274 const double *yIt = d_y;
00275 const double *end = d_x + sz;
00276 minX = maxX = *xIt++;
00277 minY = maxY = *yIt++;
00278
00279 while ( xIt < end )
00280 {
00281 const double xv = *xIt++;
00282 if ( xv < minX )
00283 minX = xv;
00284 if ( xv > maxX )
00285 maxX = xv;
00286
00287 const double yv = *yIt++;
00288 if ( yv < minY )
00289 minY = yv;
00290 if ( yv > maxY )
00291 maxY = yv;
00292 }
00293 return QwtDoubleRect(minX, minY, maxX - minX, maxY - minY);
00294 }