diff --git a/src/framebufferseries.cpp b/src/framebufferseries.cpp
--- a/src/framebufferseries.cpp
+++ b/src/framebufferseries.cpp
@@ -1,5 +1,5 @@
/*
- Copyright © 2016 Hasan Yavuz Özderya
+ Copyright © 2017 Hasan Yavuz Özderya
This file is part of serialplot.
@@ -17,24 +17,74 @@
along with serialplot. If not, see .
*/
+#include
#include "framebufferseries.h"
FrameBufferSeries::FrameBufferSeries(FrameBuffer* buffer)
{
+ xAsIndex = true;
+ _xmin = 0;
+ _xmax = 1;
_buffer = buffer;
+ int_index_start = 0;
+ int_index_end = 0;
+}
+
+void FrameBufferSeries::setXAxis(bool asIndex, double xmin, double xmax)
+{
+ xAsIndex = asIndex;
+ _xmin = xmin;
+ _xmax = xmax;
}
size_t FrameBufferSeries::size() const
{
- return _buffer->size();
+ return int_index_end - int_index_start;
}
QPointF FrameBufferSeries::sample(size_t i) const
{
- return QPointF(i, _buffer->sample(i));
+ i += int_index_start;
+ if (xAsIndex)
+ {
+ return QPointF(i, _buffer->sample(i));
+ }
+ else
+ {
+ return QPointF(i * (_xmax - _xmin) / _buffer->size() + _xmin, _buffer->sample(i));
+ }
}
QRectF FrameBufferSeries::boundingRect() const
{
- return _buffer->boundingRect();
+ if (xAsIndex)
+ {
+ return _buffer->boundingRect();
+ }
+ else
+ {
+ auto rect = _buffer->boundingRect();
+ rect.setLeft(_xmin);
+ rect.setRight(_xmax);
+ return rect;
+ }
}
+
+void FrameBufferSeries::setRectOfInterest(const QRectF& rect)
+{
+ if (xAsIndex)
+ {
+ int_index_start = floor(rect.left())-1;
+ int_index_end = ceil(rect.right())+1;
+ }
+ else
+ {
+ double xsize = _xmax - _xmin;
+ size_t bsize = _buffer->size();
+ int_index_start = floor(bsize * (rect.left()-_xmin) / xsize)-1;
+ int_index_end = ceil(bsize * (rect.right()-_xmin) / xsize)+1;
+ }
+
+ int_index_start = std::max(int_index_start, (size_t) 0);
+ int_index_end = std::min(_buffer->size(), int_index_end);
+}