地面站终端 App
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

147 lines
0 B

15 years ago
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
* Qwt Widget Library
* Copyright (C) 1997 Josef Wilgen
* Copyright (C) 2002 Uwe Rathmann
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the Qwt License, Version 1.0
*****************************************************************************/
// vim: expandtab
#include <math.h>
#include <qevent.h>
#include "qwt_plot.h"
#include "qwt_plot_canvas.h"
#include "qwt_scale_div.h"
#include "qwt_plot_magnifier.h"
class QwtPlotMagnifier::PrivateData
{
public:
PrivateData() {
15 years ago
for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
isAxisEnabled[axis] = true;
}
bool isAxisEnabled[QwtPlot::axisCnt];
};
/*!
15 years ago
Constructor
\param canvas Plot canvas to be magnified
*/
QwtPlotMagnifier::QwtPlotMagnifier(QwtPlotCanvas *canvas):
QwtMagnifier(canvas)
{
d_data = new PrivateData();
}
//! Destructor
QwtPlotMagnifier::~QwtPlotMagnifier()
{
delete d_data;
}
/*!
\brief En/Disable an axis
Axes that are enabled will be synchronized to the
result of panning. All other axes will remain unchanged.
\param axis Axis, see QwtPlot::Axis
\param on On/Off
\sa isAxisEnabled
*/
void QwtPlotMagnifier::setAxisEnabled(int axis, bool on)
{
if ( axis >= 0 && axis < QwtPlot::axisCnt )
d_data->isAxisEnabled[axis] = on;
}
/*!
Test if an axis is enabled
\param axis Axis, see QwtPlot::Axis
\return True, if the axis is enabled
\sa setAxisEnabled
*/
bool QwtPlotMagnifier::isAxisEnabled(int axis) const
{
if ( axis >= 0 && axis < QwtPlot::axisCnt )
return d_data->isAxisEnabled[axis];
return true;
}
//! Return observed plot canvas
QwtPlotCanvas *QwtPlotMagnifier::canvas()
{
QObject *w = parent();
if ( w && w->inherits("QwtPlotCanvas") )
return (QwtPlotCanvas *)w;
return NULL;
}
//! Return Observed plot canvas
const QwtPlotCanvas *QwtPlotMagnifier::canvas() const
{
return ((QwtPlotMagnifier *)this)->canvas();
}
//! Return plot widget, containing the observed plot canvas
QwtPlot *QwtPlotMagnifier::plot()
{
QObject *w = canvas();
if ( w ) {
15 years ago
w = w->parent();
if ( w && w->inherits("QwtPlot") )
return (QwtPlot *)w;
}
return NULL;
}
//! Return plot widget, containing the observed plot canvas
const QwtPlot *QwtPlotMagnifier::plot() const
{
return ((QwtPlotMagnifier *)this)->plot();
}
/*!
15 years ago
Zoom in/out the axes scales
\param factor A value < 1.0 zooms in, a value > 1.0 zooms out.
*/
void QwtPlotMagnifier::rescale(double factor)
{
factor = qwtAbs(factor);
if ( factor == 1.0 || factor == 0.0 )
return;
bool doReplot = false;
QwtPlot* plt = plot();
const bool autoReplot = plt->autoReplot();
plt->setAutoReplot(false);
for ( int axisId = 0; axisId < QwtPlot::axisCnt; axisId++ ) {
15 years ago
const QwtScaleDiv *scaleDiv = plt->axisScaleDiv(axisId);
if ( isAxisEnabled(axisId) && scaleDiv->isValid() ) {
15 years ago
const double center =
scaleDiv->lBound() + scaleDiv->range() / 2;
const double width_2 = scaleDiv->range() / 2 * factor;
plt->setAxisScale(axisId, center - width_2, center + width_2);
doReplot = true;
}
}
plt->setAutoReplot(autoReplot);
if ( doReplot )
plt->replot();
}