Add files from zip
This commit is contained in:
118
playground/scaleengine/TransformPlot.cpp
Normal file
118
playground/scaleengine/TransformPlot.cpp
Normal file
@@ -0,0 +1,118 @@
|
||||
/*****************************************************************************
|
||||
* Qwt Examples - Copyright (C) 2002 Uwe Rathmann
|
||||
* This file may be used under the terms of the 3-clause BSD License
|
||||
*****************************************************************************/
|
||||
|
||||
#include "TransformPlot.h"
|
||||
|
||||
#include <QwtPlotCurve>
|
||||
#include <QwtSyntheticPointData>
|
||||
#include <QwtTransform>
|
||||
#include <QwtLegend>
|
||||
#include <QwtLegendLabel>
|
||||
|
||||
namespace
|
||||
{
|
||||
class TransformData : public QwtSyntheticPointData
|
||||
{
|
||||
public:
|
||||
TransformData( QwtTransform* transform )
|
||||
: QwtSyntheticPointData( 200 )
|
||||
, m_transform( transform )
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~TransformData()
|
||||
{
|
||||
delete m_transform;
|
||||
}
|
||||
|
||||
const QwtTransform* transform() const
|
||||
{
|
||||
return m_transform;
|
||||
}
|
||||
|
||||
virtual double y( double x ) const QWT_OVERRIDE
|
||||
{
|
||||
const double min = 10.0;
|
||||
const double max = 1000.0;
|
||||
|
||||
const double value = min + x * ( max - min );
|
||||
|
||||
const double s1 = m_transform->transform( min );
|
||||
const double s2 = m_transform->transform( max );
|
||||
const double s = m_transform->transform( value );
|
||||
|
||||
return ( s - s1 ) / ( s2 - s1 );
|
||||
}
|
||||
|
||||
private:
|
||||
const QwtTransform* m_transform;
|
||||
};
|
||||
}
|
||||
|
||||
TransformPlot::TransformPlot( QWidget* parent )
|
||||
: QwtPlot( parent )
|
||||
{
|
||||
setTitle( "Transformations" );
|
||||
setCanvasBackground( Qt::white );
|
||||
|
||||
setAxisScale( QwtAxis::XBottom, 0.0, 1.0 );
|
||||
setAxisScale( QwtAxis::YLeft, 0.0, 1.0 );
|
||||
|
||||
QwtLegend* legend = new QwtLegend();
|
||||
legend->setDefaultItemMode( QwtLegendData::Checkable );
|
||||
insertLegend( legend, QwtPlot::RightLegend );
|
||||
|
||||
connect( legend, SIGNAL(checked(const QVariant&,bool,int)),
|
||||
this, SLOT(legendChecked(const QVariant&,bool)) );
|
||||
}
|
||||
|
||||
void TransformPlot::insertTransformation(
|
||||
const QString& title, const QColor& color, QwtTransform* transform )
|
||||
{
|
||||
QwtPlotCurve* curve = new QwtPlotCurve( title );
|
||||
curve->setRenderHint( QwtPlotItem::RenderAntialiased, true );
|
||||
curve->setPen( color, 2 );
|
||||
curve->setData( new TransformData( transform ) );
|
||||
curve->attach( this );
|
||||
}
|
||||
|
||||
void TransformPlot::legendChecked( const QVariant& itemInfo, bool on )
|
||||
{
|
||||
QwtPlotItem* plotItem = infoToItem( itemInfo );
|
||||
|
||||
setLegendChecked( plotItem );
|
||||
|
||||
if ( on && plotItem->rtti() == QwtPlotItem::Rtti_PlotCurve )
|
||||
{
|
||||
QwtPlotCurve* curve = static_cast< QwtPlotCurve* >( plotItem );
|
||||
TransformData* curveData = static_cast< TransformData* >( curve->data() );
|
||||
|
||||
Q_EMIT selected( curveData->transform()->copy() );
|
||||
}
|
||||
}
|
||||
|
||||
void TransformPlot::setLegendChecked( QwtPlotItem* plotItem )
|
||||
{
|
||||
const QwtPlotItemList items = itemList();
|
||||
for ( int i = 0; i < items.size(); i++ )
|
||||
{
|
||||
QwtPlotItem* item = items[ i ];
|
||||
if ( item->testItemAttribute( QwtPlotItem::Legend ) )
|
||||
{
|
||||
QwtLegend* lgd = qobject_cast< QwtLegend* >( legend() );
|
||||
|
||||
QwtLegendLabel* label = qobject_cast< QwtLegendLabel* >(
|
||||
lgd->legendWidget( itemToInfo( item ) ) );
|
||||
if ( label )
|
||||
{
|
||||
lgd->blockSignals( true );
|
||||
label->setChecked( item == plotItem );
|
||||
lgd->blockSignals( false );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#include "moc_TransformPlot.cpp"
|
||||
Reference in New Issue
Block a user