Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qquickpointattractor.cpp
Go to the documentation of this file.
1
// Copyright (C) 2016 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4
#
include
"qquickpointattractor_p.h"
5
#
include
<
cmath
>
6
#
include
<
QDebug
>
7
QT_BEGIN_NAMESPACE
8
/*!
9
\qmltype Attractor
10
\nativetype QQuickAttractorAffector
11
\inqmlmodule QtQuick.Particles
12
\ingroup qtquick-particles
13
\inherits ParticleAffector
14
\brief Attracts particles towards a specific point.
15
16
Like other affectors, Attractor has the standard properties x, y, width,
17
and height that represent the affected area. The size and position of the
18
Attractor item determine the affected particles.
19
20
The size of the attracting point is always 0x0, and its location is
21
specified by \l pointX and \l pointY properties.
22
*/
23
24
25
/*!
26
\qmlproperty real QtQuick.Particles::Attractor::pointX
27
28
The x coordinate of the attracting point, relative
29
to the x coordinate of the Attractor item.
30
*/
31
/*!
32
\qmlproperty real QtQuick.Particles::Attractor::pointY
33
34
The y coordinate of the attracting point, relative
35
to the y coordinate of the Attractor item.
36
*/
37
/*!
38
\qmlproperty real QtQuick.Particles::Attractor::strength
39
40
The pull, in units per second, to be exerted on an item one pixel away.
41
42
Strength, together with the value of \l proportionalToDistance property,
43
determine the exact amount of pull exerted on particles at a distance.
44
*/
45
/*!
46
\qmlproperty enumeration QtQuick.Particles::Attractor::affectedParameter
47
48
The attribute of particles that is directly affected.
49
50
\value Attractor.Position Position
51
\value Attractor.Velocity Velocity
52
\value Attractor.Acceleration Acceleration
53
*/
54
/*!
55
\qmlproperty enumeration QtQuick.Particles::Attractor::proportionalToDistance
56
57
The relation between the \l strength of the attraction and the distance from
58
the particle to the attracting point.
59
60
\value Attractor.Constant Constant
61
\value Attractor.Linear Linear
62
\value Attractor.InverseLinear Inverse linear
63
\value Attractor.Quadratic Quadratic
64
\value Attractor.InverseQuadratic Inverse quadratic
65
*/
66
67
68
QQuickAttractorAffector::QQuickAttractorAffector(QQuickItem *parent) :
69
QQuickParticleAffector(parent), m_strength(0.0), m_x(0), m_y(0)
70
, m_physics(Velocity), m_proportionalToDistance(Linear)
71
{
72
}
73
74
bool
QQuickAttractorAffector::affectParticle(QQuickParticleData *d, qreal dt)
75
{
76
if
(m_strength == 0.0)
77
return
false
;
78
qreal dx = m_x+m_offset.x() - d->curX(m_system);
79
qreal dy = m_y+m_offset.y() - d->curY(m_system);
80
qreal r = std::sqrt((dx*dx) + (dy*dy));
81
qreal theta = std::atan2(dy,dx);
82
qreal ds = 0;
83
switch
(m_proportionalToDistance){
84
case
InverseQuadratic:
85
ds = (m_strength / qMax<qreal>(1.,r*r));
86
break
;
87
case
InverseLinear:
88
ds = (m_strength / qMax<qreal>(1.,r));
89
break
;
90
case
Quadratic:
91
ds = (m_strength * qMax<qreal>(1.,r*r));
92
break
;
93
case
Linear:
94
ds = (m_strength * qMax<qreal>(1.,r));
95
break
;
96
default
:
//also Constant
97
ds = m_strength;
98
}
99
ds *= dt;
100
dx = ds * std::cos(theta);
101
dy = ds * std::sin(theta);
102
qreal vx,vy;
103
switch
(m_physics){
104
case
Position:
105
d->x = (d->x + dx);
106
d->y = (d->y + dy);
107
break
;
108
case
Acceleration:
109
d->setInstantaneousAX(d->ax + dx, m_system);
110
d->setInstantaneousAY(d->ay + dy, m_system);
111
break
;
112
case
Velocity:
//also default
113
default
:
114
vx = d->curVX(m_system);
115
vy = d->curVY(m_system);
116
d->setInstantaneousVX(vx + dx, m_system);
117
d->setInstantaneousVY(vy + dy, m_system);
118
}
119
120
return
true
;
121
}
122
QT_END_NAMESPACE
123
124
#
include
"moc_qquickpointattractor_p.cpp"
qtdeclarative
src
particles
qquickpointattractor.cpp
Generated on
for Qt by
1.18.0