summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/q3dlight.cpp
blob: 68faa0643ad941f45bc3ebaf0f6aa4e0c0d8721b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Data Visualization module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:COMM$
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** $QT_END_LICENSE$
**
**
**
**
**
**
**
**
**
****************************************************************************/

#include "q3dlight_p.h"

QT_BEGIN_NAMESPACE_DATAVISUALIZATION

/*!
 * \class Q3DLight
 * \inmodule QtDataVisualization
 * \brief Representation of a light source in 3D space.
 * \since QtDataVisualization 1.0
 *
 * Q3DLight represents a monochrome light source in 3D space.
 *
 * \note Default light has isAutoPosition() \c true.
 */

/*!
 * \qmltype Light3D
 * \inqmlmodule QtDataVisualization
 * \since QtDataVisualization 1.0
 * \ingroup datavisualization_qml
 * \instantiates Q3DLight
 * \brief Representation of a light source in 3D space.
 *
 * Light3D represents a monochrome light source in 3D space.
 *
 * \note Default light has autoPosition \c true.
 */

/*!
 * \qmlproperty bool Light3D::autoPosition
 * \since QtDataVisualization 1.3
 * Defines whether the light position follows the camera automatically.
 * \note Has no effect if shadows are enabled. Remember to disable shadows before setting light's
 * position, or it will be overwritten by automatic positioning if this
 * property is \c false.
 */

/*!
 * Constructs a new 3D light located at origin. An optional \a parent parameter can be given
 * and is then passed to QObject constructor.
 */
Q3DLight::Q3DLight(QObject *parent) :
    Q3DObject(parent),
    d_ptr(new Q3DLightPrivate(this))
{
}

/*!
 * Destroys the light object.
 */
Q3DLight::~Q3DLight()
{
}

/*!
 * \property Q3DLight::autoPosition
 * \since QtDataVisualization 5.9
 * \brief Whether the light position follows the camera automatically.
 * \note Has no effect if shadows are enabled. Remember to disable shadows before setting light's
 * position, or it will be overwritten by automatic positioning if
 * \c isAutoPosition() is \c false.
 */
void Q3DLight::setAutoPosition(bool enabled)
{
    if (enabled != d_ptr->m_automaticLight) {
        d_ptr->m_automaticLight = enabled;
        setDirty(true);
        emit autoPositionChanged(enabled);
    }
}

bool Q3DLight::isAutoPosition()
{
    return d_ptr->m_automaticLight;
}

Q3DLightPrivate::Q3DLightPrivate(Q3DLight *q) :
    q_ptr(q),
    m_automaticLight(false)
{
}

Q3DLightPrivate::~Q3DLightPrivate()
{
}

void Q3DLightPrivate::sync(Q3DLight &other)
{
    if (q_ptr->isDirty()) {
        other.setPosition(q_ptr->position());
        other.setAutoPosition(q_ptr->isAutoPosition());
        q_ptr->setDirty(false);
    }
}

QT_END_NAMESPACE_DATAVISUALIZATION