Released version 6.1.3
This commit is contained in:
commit
a94503cb82
1885 changed files with 276310 additions and 0 deletions
19
examples/animation/animation.pro
Normal file
19
examples/animation/animation.pro
Normal file
|
@ -0,0 +1,19 @@
|
|||
################################################################
|
||||
# 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
|
||||
################################################################
|
||||
|
||||
include( $${PWD}/../examples.pri )
|
||||
|
||||
TARGET = animation
|
||||
|
||||
HEADERS = \
|
||||
plot.h
|
||||
|
||||
SOURCES = \
|
||||
plot.cpp \
|
||||
main.cpp
|
46
examples/animation/main.cpp
Normal file
46
examples/animation/main.cpp
Normal file
|
@ -0,0 +1,46 @@
|
|||
#include <qapplication.h>
|
||||
#include "plot.h"
|
||||
|
||||
#ifndef QWT_NO_OPENGL
|
||||
#define USE_OPENGL 1
|
||||
#endif
|
||||
|
||||
#if USE_OPENGL
|
||||
#include <qgl.h>
|
||||
#include <qwt_plot_glcanvas.h>
|
||||
#else
|
||||
#include <qwt_plot_canvas.h>
|
||||
#endif
|
||||
|
||||
int main ( int argc, char **argv )
|
||||
{
|
||||
#if USE_OPENGL
|
||||
#if QT_VERSION >= 0x040600 && QT_VERSION < 0x050000
|
||||
// on my box QPaintEngine::OpenGL2 has serious problems, f.e:
|
||||
// the lines of a simple drawRect are wrong.
|
||||
|
||||
QGL::setPreferredPaintEngine( QPaintEngine::OpenGL );
|
||||
#endif
|
||||
#endif
|
||||
|
||||
QApplication a( argc, argv );
|
||||
|
||||
Plot plot;
|
||||
|
||||
#if USE_OPENGL
|
||||
QwtPlotGLCanvas *canvas = new QwtPlotGLCanvas();
|
||||
canvas->setFrameStyle( QwtPlotGLCanvas::NoFrame );
|
||||
#else
|
||||
QwtPlotCanvas *canvas = new QwtPlotCanvas();
|
||||
canvas->setFrameStyle( QFrame::NoFrame );
|
||||
canvas->setPaintAttribute( QwtPlotCanvas::BackingStore, false );
|
||||
#endif
|
||||
|
||||
plot.setCanvas( canvas );
|
||||
plot.setCanvasBackground( QColor( 30, 30, 50 ) );
|
||||
|
||||
plot.resize( 400, 400 );
|
||||
plot.show();
|
||||
|
||||
return a.exec();
|
||||
}
|
241
examples/animation/plot.cpp
Normal file
241
examples/animation/plot.cpp
Normal file
|
@ -0,0 +1,241 @@
|
|||
#include <qapplication.h>
|
||||
#include <qwt_math.h>
|
||||
#include <qwt_symbol.h>
|
||||
#include <qwt_curve_fitter.h>
|
||||
#include <qwt_plot_curve.h>
|
||||
#include <qwt_plot_canvas.h>
|
||||
#include <qwt_plot_layout.h>
|
||||
#include <qevent.h>
|
||||
#include "plot.h"
|
||||
|
||||
class Curve: public QwtPlotCurve
|
||||
{
|
||||
public:
|
||||
void setTransformation( const QTransform &transform )
|
||||
{
|
||||
d_transform = transform;
|
||||
}
|
||||
|
||||
virtual void updateSamples( double phase )
|
||||
{
|
||||
setSamples( d_transform.map( points( phase ) ) );
|
||||
}
|
||||
|
||||
private:
|
||||
virtual QPolygonF points( double phase ) const = 0;
|
||||
|
||||
private:
|
||||
QTransform d_transform;
|
||||
};
|
||||
|
||||
class Curve1: public Curve
|
||||
{
|
||||
public:
|
||||
Curve1()
|
||||
{
|
||||
setPen( QColor( 150, 150, 200 ), 2 );
|
||||
setStyle( QwtPlotCurve::Lines );
|
||||
|
||||
QwtSplineCurveFitter *curveFitter = new QwtSplineCurveFitter();
|
||||
curveFitter->setSplineSize( 150 );
|
||||
setCurveFitter( curveFitter );
|
||||
|
||||
setCurveAttribute( QwtPlotCurve::Fitted, true );
|
||||
|
||||
QwtSymbol *symbol = new QwtSymbol( QwtSymbol::XCross );
|
||||
symbol->setPen( Qt::yellow );
|
||||
symbol->setSize( 7 );
|
||||
|
||||
setSymbol( symbol );
|
||||
|
||||
// somewhere to the left
|
||||
QTransform transform;
|
||||
transform.scale( 1.5, 1.0 );
|
||||
transform.translate( 1.5, 3.0 );
|
||||
|
||||
setTransformation( transform );
|
||||
}
|
||||
|
||||
virtual QPolygonF points( double phase ) const
|
||||
{
|
||||
QPolygonF points;
|
||||
|
||||
const int numSamples = 15;
|
||||
for ( int i = 0; i < numSamples; i++ )
|
||||
{
|
||||
const double v = 6.28 * double( i ) / double( numSamples - 1 );
|
||||
points += QPointF( qSin( v - phase ), v );
|
||||
}
|
||||
|
||||
return points;
|
||||
}
|
||||
};
|
||||
|
||||
class Curve2: public Curve
|
||||
{
|
||||
public:
|
||||
Curve2()
|
||||
{
|
||||
setStyle( QwtPlotCurve::Sticks );
|
||||
setPen( QColor( 200, 150, 50 ) );
|
||||
|
||||
setSymbol( new QwtSymbol( QwtSymbol::Ellipse,
|
||||
QColor( Qt::gray ), QColor( Qt::yellow ), QSize( 5, 5 ) ) );
|
||||
}
|
||||
|
||||
private:
|
||||
virtual QPolygonF points( double phase ) const
|
||||
{
|
||||
QPolygonF points;
|
||||
|
||||
const int numSamples = 50;
|
||||
for ( int i = 0; i < numSamples; i++ )
|
||||
{
|
||||
const double v = 10.0 * i / double( numSamples - 1 );
|
||||
points += QPointF( v, qCos( 3.0 * ( v + phase ) ) );
|
||||
}
|
||||
|
||||
return points;
|
||||
}
|
||||
};
|
||||
|
||||
class Curve3: public Curve
|
||||
{
|
||||
public:
|
||||
Curve3()
|
||||
{
|
||||
setStyle( QwtPlotCurve::Lines );
|
||||
setPen( QColor( 100, 200, 150 ), 2 );
|
||||
|
||||
QwtSplineCurveFitter* curveFitter = new QwtSplineCurveFitter();
|
||||
curveFitter->setFitMode( QwtSplineCurveFitter::ParametricSpline );
|
||||
curveFitter->setSplineSize( 200 );
|
||||
setCurveFitter( curveFitter );
|
||||
|
||||
setCurveAttribute( QwtPlotCurve::Fitted, true );
|
||||
|
||||
// somewhere in the top right corner
|
||||
QTransform transform;
|
||||
transform.translate( 7.0, 7.5 );
|
||||
transform.scale( 2.0, 2.0 );
|
||||
|
||||
setTransformation( transform );
|
||||
}
|
||||
|
||||
private:
|
||||
virtual QPolygonF points( double phase ) const
|
||||
{
|
||||
QPolygonF points;
|
||||
|
||||
const int numSamples = 9;
|
||||
for ( int i = 0; i < numSamples; i++ )
|
||||
{
|
||||
const double v = i * 2.0 * M_PI / ( numSamples - 1 );
|
||||
points += QPointF( qSin( v - phase ), qCos( 3.0 * ( v + phase ) ) );
|
||||
}
|
||||
|
||||
return points;
|
||||
}
|
||||
};
|
||||
|
||||
class Curve4: public Curve
|
||||
{
|
||||
public:
|
||||
Curve4()
|
||||
{
|
||||
setStyle( QwtPlotCurve::Lines );
|
||||
setPen( Qt::red, 2 );
|
||||
|
||||
initSamples();
|
||||
|
||||
// somewhere in the center
|
||||
QTransform transform;
|
||||
transform.translate( 7.0, 3.0 );
|
||||
transform.scale( 1.5, 1.5 );
|
||||
|
||||
setTransformation( transform );
|
||||
}
|
||||
|
||||
private:
|
||||
virtual QPolygonF points( double phase ) const
|
||||
{
|
||||
const double speed = 0.05;
|
||||
|
||||
const double s = speed * qSin( phase );
|
||||
const double c = qSqrt( 1.0 - s * s );
|
||||
|
||||
for ( int i = 0; i < d_points.size(); i++ )
|
||||
{
|
||||
const QPointF p = d_points[i];
|
||||
|
||||
const double u = p.x();
|
||||
const double v = p.y();
|
||||
|
||||
d_points[i].setX( u * c - v * s );
|
||||
d_points[i].setY( v * c + u * s );
|
||||
}
|
||||
|
||||
return d_points;
|
||||
}
|
||||
|
||||
void initSamples()
|
||||
{
|
||||
const int numSamples = 15;
|
||||
|
||||
for ( int i = 0; i < numSamples; i++ )
|
||||
{
|
||||
const double angle = i * ( 2.0 * M_PI / ( numSamples - 1 ) );
|
||||
|
||||
QPointF p( qCos( angle ), qSin( angle ) );
|
||||
if ( i % 2 )
|
||||
p *= 0.4;
|
||||
|
||||
d_points += p;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
mutable QPolygonF d_points;
|
||||
};
|
||||
|
||||
Plot::Plot( QWidget *parent ):
|
||||
QwtPlot( parent)
|
||||
{
|
||||
setAutoReplot( false );
|
||||
|
||||
setTitle( "Animated Curves" );
|
||||
|
||||
// hide all axes
|
||||
for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
|
||||
enableAxis( axis, false );
|
||||
|
||||
plotLayout()->setCanvasMargin( 10 );
|
||||
|
||||
d_curves[0] = new Curve1();
|
||||
d_curves[1] = new Curve2();
|
||||
d_curves[2] = new Curve3();
|
||||
d_curves[3] = new Curve4();
|
||||
|
||||
updateCurves();
|
||||
|
||||
for ( int i = 0; i < CurveCount; i++ )
|
||||
d_curves[i]->attach( this );
|
||||
|
||||
d_time.start();
|
||||
( void )startTimer( 40 );
|
||||
}
|
||||
|
||||
void Plot::timerEvent( QTimerEvent * )
|
||||
{
|
||||
updateCurves();
|
||||
replot();
|
||||
}
|
||||
|
||||
void Plot::updateCurves()
|
||||
{
|
||||
const double speed = 2 * M_PI / 25000.0; // a cycle every 25 seconds
|
||||
|
||||
const double phase = d_time.elapsed() * speed;
|
||||
for ( int i = 0; i < CurveCount; i++ )
|
||||
d_curves[i]->updateSamples( phase );
|
||||
}
|
21
examples/animation/plot.h
Normal file
21
examples/animation/plot.h
Normal file
|
@ -0,0 +1,21 @@
|
|||
#include <qwt_plot.h>
|
||||
#include <qdatetime.h>
|
||||
|
||||
class Curve;
|
||||
|
||||
class Plot: public QwtPlot
|
||||
{
|
||||
public:
|
||||
Plot( QWidget * = NULL);
|
||||
|
||||
protected:
|
||||
virtual void timerEvent( QTimerEvent * );
|
||||
|
||||
private:
|
||||
void updateCurves();
|
||||
|
||||
enum { CurveCount = 4 };
|
||||
Curve *d_curves[CurveCount];
|
||||
|
||||
QTime d_time;
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue