diff --git a/plot.cpp b/plot.cpp --- a/plot.cpp +++ b/plot.cpp @@ -17,8 +17,8 @@ along with serialplot. If not, see . */ +#include #include "plot.h" - Plot::Plot(QWidget* parent) : QwtPlot(parent), zoomer(this->canvas(), false), @@ -31,6 +31,9 @@ Plot::Plot(QWidget* parent) : zoomer.setZoomBase(); grid.attach(this); + rectItem.setRect(QRectF(0,0,100,1)); + // rectItem.attach(this); + darkBackground(false); } diff --git a/plot.h b/plot.h --- a/plot.h +++ b/plot.h @@ -22,6 +22,7 @@ #include #include +#include #include "zoomer.h" #include "scalezoomer.h" @@ -39,6 +40,7 @@ private: Zoomer zoomer; ScaleZoomer sZoomer; QwtPlotGrid grid; + QwtPlotShapeItem rectItem; void resetAxes(); diff --git a/scalezoomer.cpp b/scalezoomer.cpp --- a/scalezoomer.cpp +++ b/scalezoomer.cpp @@ -28,10 +28,35 @@ ScaleZoomer::ScaleZoomer(QwtPlot* plot, { _plot = plot; _zoomer = zoomer; + connect(&bottomPicker, &ScalePicker::pickStarted, this, &ScaleZoomer::bottomPickStarted); + connect(&bottomPicker, &ScalePicker::picking, this, &ScaleZoomer::bottomPicking); connect(&bottomPicker, &ScalePicker::picked, this, &ScaleZoomer::bottomPicked); connect(&leftPicker, &ScalePicker::picked, this, &ScaleZoomer::leftPicked); } +void ScaleZoomer::bottomPickStarted(double firstPos) +{ + double yMin = _plot->axisScaleDiv(QwtPlot::yLeft).lowerBound(); + double yMax = _plot->axisScaleDiv(QwtPlot::yLeft).upperBound(); + rectShape.setRect(QRectF(firstPos, yMin, 2, yMax-yMin)); + rectShape.attach(_plot); + _plot->replot(); +} + +void ScaleZoomer::bottomPicking(double firstPos, double lastPos) +{ + double yMin = _plot->axisScaleDiv(QwtPlot::yLeft).lowerBound(); + double yMax = _plot->axisScaleDiv(QwtPlot::yLeft).upperBound(); + if (lastPos > firstPos) { + rectShape.setRect(QRectF(firstPos, yMin, lastPos-firstPos, yMax-yMin)); + } + else + { + rectShape.setRect(QRectF(lastPos, yMin, firstPos-lastPos, yMax-yMin)); + } + _plot->replot(); +} + void ScaleZoomer::bottomPicked(double firstPos, double lastPos) { QRectF zRect; @@ -49,6 +74,8 @@ void ScaleZoomer::bottomPicked(double fi zRect.setBottom(_plot->axisScaleDiv(QwtPlot::yLeft).lowerBound()); zRect.setTop(_plot->axisScaleDiv(QwtPlot::yLeft).upperBound()); _zoomer->zoom(zRect); + rectShape.detach(); + _plot->replot(); } void ScaleZoomer::leftPicked(double firstPos, double lastPos) diff --git a/scalezoomer.h b/scalezoomer.h --- a/scalezoomer.h +++ b/scalezoomer.h @@ -23,6 +23,7 @@ #include #include #include +#include #include "scalepicker.h" @@ -39,9 +40,12 @@ private: ScalePicker bottomPicker; ScalePicker leftPicker; + QwtPlotShapeItem rectShape; private slots: + void bottomPickStarted(double firstPos); void bottomPicked(double firstPos, double lastPos); + void bottomPicking(double firstPos, double lastPos); void leftPicked(double firstPos, double lastPos); };