Krita Source Code Documentation
Loading...
Searching...
No Matches
KisStrokeSpeedMeasurer Class Reference

#include <KisStrokeSpeedMeasurer.h>

Classes

struct  Private
 

Public Member Functions

void addSample (const QPointF &pt, int time)
 
void addSamples (const QVector< QPointF > &points, int time)
 
qreal averageSpeed () const
 
qreal currentSpeed () const
 
 KisStrokeSpeedMeasurer (int timeSmoothWindow)
 
qreal maxSpeed () const
 
void reset ()
 
 ~KisStrokeSpeedMeasurer ()
 

Private Member Functions

void sampleMaxSpeed ()
 

Private Attributes

const QScopedPointer< Privatem_d
 

Detailed Description

Definition at line 18 of file KisStrokeSpeedMeasurer.h.

Constructor & Destructor Documentation

◆ KisStrokeSpeedMeasurer()

KisStrokeSpeedMeasurer::KisStrokeSpeedMeasurer ( int timeSmoothWindow)

Definition at line 36 of file KisStrokeSpeedMeasurer.cpp.

37 : m_d(new Private())
38{
39 m_d->timeSmoothWindow = timeSmoothWindow;
40}
const QScopedPointer< Private > m_d

References m_d.

◆ ~KisStrokeSpeedMeasurer()

KisStrokeSpeedMeasurer::~KisStrokeSpeedMeasurer ( )

Definition at line 42 of file KisStrokeSpeedMeasurer.cpp.

43{
44}

Member Function Documentation

◆ addSample()

void KisStrokeSpeedMeasurer::addSample ( const QPointF & pt,
int time )

Definition at line 66 of file KisStrokeSpeedMeasurer.cpp.

67{
68 m_d->addSampleImpl(pt, time);
69 m_d->purgeOldSamples();
71}

References m_d, and sampleMaxSpeed().

◆ addSamples()

void KisStrokeSpeedMeasurer::addSamples ( const QVector< QPointF > & points,
int time )

Definition at line 73 of file KisStrokeSpeedMeasurer.cpp.

74{
75 const int lastSampleTime = !m_d->samples.isEmpty() ? m_d->samples.last().time : 0;
76
77 const int timeSmoothBase = qMin(lastSampleTime, time);
78 const qreal timeSmoothStep = qreal(time - timeSmoothBase) / points.size();
79
80 for (int i = 0; i < points.size(); i++) {
81 const int sampleTime = timeSmoothBase + timeSmoothStep * (i + 1);
82 m_d->addSampleImpl(points[i], sampleTime);
83 }
84
85 m_d->purgeOldSamples();
87}

References m_d, and sampleMaxSpeed().

◆ averageSpeed()

qreal KisStrokeSpeedMeasurer::averageSpeed ( ) const

Definition at line 89 of file KisStrokeSpeedMeasurer.cpp.

90{
91 if (m_d->samples.isEmpty()) return 0;
92
93 const Private::StrokeSample &lastSample = m_d->samples.last();
94
95 const int timeDiff = lastSample.time - m_d->startTime;
96 if (!timeDiff) return 0;
97
99
100 return lastSample.distance / timeDiff;
101}
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:129

References KisStrokeSpeedMeasurer::Private::StrokeSample::distance, KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, m_d, and KisStrokeSpeedMeasurer::Private::StrokeSample::time.

◆ currentSpeed()

qreal KisStrokeSpeedMeasurer::currentSpeed ( ) const

Definition at line 125 of file KisStrokeSpeedMeasurer.cpp.

126{
127 if (m_d->samples.size() <= 1) return 0;
128
129 const Private::StrokeSample firstSample = m_d->samples.first();
130 const Private::StrokeSample lastSample = m_d->samples.last();
131
132 const int timeDiff = lastSample.time - firstSample.time;
133 if (!timeDiff) return 0;
134
136
137 return (lastSample.distance - firstSample.distance) / timeDiff;
138}

References KisStrokeSpeedMeasurer::Private::StrokeSample::distance, KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, m_d, and KisStrokeSpeedMeasurer::Private::StrokeSample::time.

◆ maxSpeed()

qreal KisStrokeSpeedMeasurer::maxSpeed ( ) const

Definition at line 140 of file KisStrokeSpeedMeasurer.cpp.

141{
142 return m_d->maxSpeed;
143}

References m_d.

◆ reset()

void KisStrokeSpeedMeasurer::reset ( )

Definition at line 145 of file KisStrokeSpeedMeasurer.cpp.

146{
147 m_d->samples.clear();
148 m_d->lastSamplePos = QPointF();
149 m_d->startTime = 0;
150 m_d->maxSpeed = 0;
151}

References m_d.

◆ sampleMaxSpeed()

void KisStrokeSpeedMeasurer::sampleMaxSpeed ( )
private

Definition at line 153 of file KisStrokeSpeedMeasurer.cpp.

154{
155 if (m_d->samples.size() <= 1) return;
156
157 const Private::StrokeSample firstSample = m_d->samples.first();
158 const Private::StrokeSample lastSample = m_d->samples.last();
159
160 const int timeDiff = lastSample.time - firstSample.time;
161 if (timeDiff < m_d->timeSmoothWindow) return;
162
163 const qreal speed = currentSpeed();
164 if (speed > m_d->maxSpeed) {
165 m_d->maxSpeed = speed;
166 }
167}

References currentSpeed(), m_d, and KisStrokeSpeedMeasurer::Private::StrokeSample::time.

Member Data Documentation

◆ m_d

const QScopedPointer<Private> KisStrokeSpeedMeasurer::m_d
private

Definition at line 38 of file KisStrokeSpeedMeasurer.h.


The documentation for this class was generated from the following files: