summaryrefslogtreecommitdiff
path: root/gr-qtgui/lib/timeRasterGlobalData.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-qtgui/lib/timeRasterGlobalData.cc')
-rw-r--r--gr-qtgui/lib/timeRasterGlobalData.cc240
1 files changed, 240 insertions, 0 deletions
diff --git a/gr-qtgui/lib/timeRasterGlobalData.cc b/gr-qtgui/lib/timeRasterGlobalData.cc
new file mode 100644
index 0000000000..556196f644
--- /dev/null
+++ b/gr-qtgui/lib/timeRasterGlobalData.cc
@@ -0,0 +1,240 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2012,2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef TIMERASTER_GLOBAL_DATA_CPP
+#define TIMERASTER_GLOBAL_DATA_CPP
+
+#include <timeRasterGlobalData.h>
+#include <cstdio>
+#include <cmath>
+#include <iostream>
+
+TimeRasterData::TimeRasterData(const double rows, const double cols)
+#if QWT_VERSION < 0x060000
+ : QwtRasterData(QwtDoubleRect(0, 0, rows, cols))
+#else
+ : QwtRasterData()
+#endif
+{
+ d_nitems = 0;
+ d_rows = rows;
+ d_cols = cols;
+ d_resid = 0;
+
+ // We add 1 here so we always have the next row already started
+ // (helps when d_cols is fractional and we have to slide).
+ d_totalitems = static_cast<int>((d_rows+1)*floor(d_cols));
+ d_data_size = d_totalitems + static_cast<int>(floor(d_cols));
+
+ d_intensityRange = QwtDoubleInterval(0.0, 10.0);
+ d_data = new double[d_data_size];
+
+#if QWT_VERSION >= 0x060000
+ setInterval(Qt::XAxis, QwtInterval(0, cols));
+ setInterval(Qt::YAxis, QwtInterval(0, rows));
+ setInterval(Qt::ZAxis, QwtInterval(0.0, 10.0));
+#endif
+
+ reset();
+}
+
+TimeRasterData::~TimeRasterData()
+{
+ delete [] d_data;
+}
+
+void TimeRasterData::reset()
+{
+ d_resid = 0;
+ d_nitems = 0;
+ memset(d_data, 0x0, d_data_size*sizeof(double));
+}
+
+void TimeRasterData::copy(const TimeRasterData* rhs)
+{
+#if QWT_VERSION < 0x060000
+ if((d_cols != rhs->getNumCols()) ||
+ (boundingRect() != rhs->boundingRect()) ){
+ d_cols = rhs->getNumCols();
+ d_rows = rhs->getNumRows();
+ d_totalitems = static_cast<int>((d_rows+1)*floor(d_cols));
+ d_data_size = d_totalitems + static_cast<int>(floor(d_cols));
+ setBoundingRect(rhs->boundingRect());
+ delete [] d_data;
+ d_data = new double[d_data_size];
+ }
+#else
+ if((d_cols != rhs->getNumCols()) || (d_rows != rhs->getNumRows())) {
+ d_cols = rhs->getNumCols();
+ d_rows = rhs->getNumRows();
+ d_totalitems = static_cast<int>((d_rows+1)*floor(d_cols));
+ d_data_size = d_totalitems + static_cast<int>(floor(d_cols));
+ delete [] d_data;
+ d_data = new double[d_data_size];
+ }
+#endif
+
+ reset();
+
+#if QWT_VERSION < 0x060000
+ setRange(rhs->range());
+#else
+ setInterval(Qt::XAxis, rhs->interval(Qt::XAxis));
+ setInterval(Qt::YAxis, rhs->interval(Qt::YAxis));
+ setInterval(Qt::ZAxis, rhs->interval(Qt::ZAxis));
+#endif
+}
+
+void TimeRasterData::resizeData(const double rows, const double cols)
+{
+#if QWT_VERSION < 0x060000
+ if((cols != getNumCols()) || (boundingRect().width() != cols) ||
+ (rows != getNumRows()) || (boundingRect().height() != cols)) {
+ setBoundingRect(QwtDoubleRect(0, 0, cols, rows));
+ d_cols = cols;
+ d_rows = rows;
+ d_totalitems = static_cast<int>((d_rows+1)*floor(d_cols));
+ d_data_size = d_totalitems + static_cast<int>(floor(d_cols));
+ delete [] d_data;
+ d_data = new double[d_data_size];
+ }
+
+#else
+ if((cols != getNumCols()) || (interval(Qt::XAxis).width() != cols) ||
+ (rows != getNumRows()) || (interval(Qt::YAxis).width() != rows)) {
+
+ setInterval(Qt::XAxis, QwtInterval(0, cols));
+ setInterval(Qt::YAxis, QwtInterval(0, rows));
+
+ d_cols = cols;
+ d_rows = rows;
+ d_totalitems = static_cast<int>((d_rows+1)*floor(d_cols));
+ d_data_size = d_totalitems + static_cast<int>(floor(d_cols));
+
+ delete [] d_data;
+ d_data = new double[d_data_size];
+ }
+#endif
+
+ reset();
+}
+
+QwtRasterData *TimeRasterData::copy() const
+{
+#if QWT_VERSION < 0x060000
+ TimeRasterData* returnData = \
+ new TimeRasterData(d_cols, d_rows);
+#else
+ TimeRasterData* returnData = \
+ new TimeRasterData(d_cols, d_rows);
+#endif
+
+ returnData->copy(this);
+ return returnData;
+}
+
+
+#if QWT_VERSION < 0x060000
+QwtDoubleInterval TimeRasterData::range() const
+{
+ return d_intensityRange;
+}
+
+void TimeRasterData::setRange(const QwtDoubleInterval& newRange)
+{
+ d_intensityRange = newRange;
+}
+
+#endif
+
+
+double
+TimeRasterData::value(double x, double y) const
+{
+ double returnValue = 0.0;
+
+#if QWT_VERSION < 0x060000
+ double top = boundingRect().top();
+ double bottom = top - boundingRect().height();
+ double left = boundingRect().left();
+ double right = left - boundingRect().width();
+#else
+ double top = interval(Qt::YAxis).maxValue();
+ double bottom = interval(Qt::YAxis).minValue();
+ double left = interval(Qt::XAxis).minValue();
+ double right = interval(Qt::XAxis).maxValue();
+#endif
+
+ if((x < left) || (x > right) || (y < bottom) || (y > top))
+ return 0.0;
+
+ double _y = floor(top - y);
+ double _loc = _y*(d_cols) + x + d_resid;
+ int location = static_cast<int>(_loc);
+
+ if((location > -1) && (location < d_data_size)) {
+ returnValue = d_data[location];
+ }
+
+ return returnValue;
+}
+
+void
+TimeRasterData::incrementResidual()
+{
+ // After a full set of rows are drawn, we want to add up the
+ // residual due to any fractional value of d_cols to appropriately
+ // shift the next data in.
+ double icols = floor(d_cols);
+ d_resid = fmod(d_resid + (d_cols - icols) * d_rows, icols);
+}
+
+double
+TimeRasterData::getNumCols() const
+{
+ return d_cols;
+}
+
+double
+TimeRasterData::getNumRows() const
+{
+ return d_rows;
+}
+
+void
+TimeRasterData::addData(const double* data,
+ const int dataSize)
+{
+ int cols = static_cast<int>(d_cols);
+ if(dataSize == cols) {
+ if(d_nitems < d_totalitems) {
+ memcpy(&d_data[d_nitems], data, cols*sizeof(double));
+ d_nitems += cols;
+ }
+ else {
+ memcpy(&d_data[d_nitems], data, cols*sizeof(double));
+ memmove(d_data, &d_data[cols], d_totalitems*sizeof(double));
+ }
+ }
+}
+
+#endif /* TIMERASTER_GLOBAL_DATA_CPP */