QGIS API Documentation
4.3.0-Master (16eddb2670e)
Toggle main menu visibility
Loading...
Searching...
No Matches
src
3d
lights
qgsdirectionallightsettings.cpp
Go to the documentation of this file.
1
/***************************************************************************
2
qgsdirectionallightsettings.cpp
3
--------------------------------------
4
Date : June 2020
5
Copyright : (C) 2020 by Belgacem Nedjima
6
Email : gb underscore nedjima at esi dot dz
7
***************************************************************************
8
* *
9
* This program is free software; you can redistribute it and/or modify *
10
* it under the terms of the GNU General Public License as published by *
11
* the Free Software Foundation; either version 2 of the License, or *
12
* (at your option) any later version. *
13
* *
14
***************************************************************************/
15
16
#include "
qgsdirectionallightsettings.h
"
17
18
#include "
qgs3dutils.h
"
19
#include "
qgscolorutils.h
"
20
#include "
qgssymbollayerutils.h
"
21
22
#include <QDomDocument>
23
#include <QString>
24
#include <Qt3DCore/QEntity>
25
#include <Qt3DRender/QDirectionalLight>
26
27
using namespace
Qt::StringLiterals;
28
29
Qgis::LightSourceType
QgsDirectionalLightSettings::type
()
const
30
{
31
return
Qgis::LightSourceType::Directional
;
32
}
33
34
QgsDirectionalLightSettings
*
QgsDirectionalLightSettings::clone
()
const
35
{
36
auto
res = std::make_unique< QgsDirectionalLightSettings >( *
this
);
37
res->mId =
mId
;
38
return
res.release();
39
}
40
41
Qt3DCore::QEntity *
QgsDirectionalLightSettings::createEntity
(
const
Qgs3DMapSettings
&, Qt3DCore::QEntity *parent )
const
42
{
43
Qt3DCore::QEntity *lightEntity =
new
Qt3DCore::QEntity( parent );
44
45
Qt3DRender::QDirectionalLight *light =
new
Qt3DRender::QDirectionalLight;
46
light->setColor(
Qgs3DUtils::srgbToLinear
(
color
() ) );
47
light->setIntensity(
static_cast<
float
>
(
intensity
() ) );
48
QgsVector3D
direction
=
QgsDirectionalLightSettings::direction
();
49
light->setWorldDirection( QVector3D(
direction
.x(),
direction
.y(),
direction
.z() ) );
50
51
lightEntity->addComponent( light );
52
53
return
lightEntity;
54
}
55
56
QDomElement
QgsDirectionalLightSettings::writeXml
( QDomDocument &doc,
const
QgsReadWriteContext
& )
const
57
{
58
QDomElement elemLight = doc.createElement( u
"directional-light"
_s );
59
elemLight.setAttribute( u
"id"
_s,
mId
);
60
elemLight.setAttribute( u
"x"
_s, mDirection.x() );
61
elemLight.setAttribute( u
"y"
_s, mDirection.y() );
62
elemLight.setAttribute( u
"z"
_s, mDirection.z() );
63
elemLight.setAttribute( u
"color"
_s,
QgsColorUtils::colorToString
( mColor ) );
64
elemLight.setAttribute( u
"intensity"
_s, mIntensity );
65
return
elemLight;
66
}
67
68
void
QgsDirectionalLightSettings::readXml
(
const
QDomElement &elem,
const
QgsReadWriteContext
& )
69
{
70
if
( elem.hasAttribute( u
"id"
_s ) )
71
mId
= elem.attribute( u
"id"
_s );
72
73
mDirection.set( elem.attribute( u
"x"
_s ).toFloat(), elem.attribute( u
"y"
_s ).toFloat(), elem.attribute( u
"z"
_s ).toFloat() );
74
mColor =
QgsColorUtils::colorFromString
( elem.attribute( u
"color"
_s ) );
75
mIntensity = elem.attribute( u
"intensity"
_s ).toDouble();
76
}
77
78
bool
QgsDirectionalLightSettings::operator==
(
const
QgsDirectionalLightSettings
&other )
const
79
{
80
return
mId
== other.
mId
&& mDirection == other.mDirection && mColor == other.mColor &&
qgsDoubleNear
( mIntensity, other.mIntensity );
81
}
Qgis::LightSourceType
LightSourceType
Light source types for 3D scenes.
Definition
qgis.h:4539
Qgis::LightSourceType::Directional
@ Directional
Directional light source.
Definition
qgis.h:4541
Qgs3DMapSettings
Definition of the world.
Definition
qgs3dmapsettings.h:59
Qgs3DUtils::srgbToLinear
static QColor srgbToLinear(const QColor &color)
Converts a SRGB color to a linear color.
Definition
qgs3dutils.cpp:533
QgsColorUtils::colorFromString
static QColor colorFromString(const QString &string)
Decodes a string into a color value.
Definition
qgscolorutils.cpp:239
QgsColorUtils::colorToString
static QString colorToString(const QColor &color)
Encodes a color into a string value.
Definition
qgscolorutils.cpp:174
QgsDirectionalLightSettings::clone
QgsDirectionalLightSettings * clone() const override
Returns a copy of the light source.
Definition
qgsdirectionallightsettings.cpp:34
QgsDirectionalLightSettings::operator==
bool operator==(const QgsDirectionalLightSettings &other) const
Definition
qgsdirectionallightsettings.cpp:78
QgsDirectionalLightSettings::color
QColor color() const
Returns color of the light.
Definition
qgsdirectionallightsettings.h:51
QgsDirectionalLightSettings::writeXml
QDomElement writeXml(QDomDocument &doc, const QgsReadWriteContext &context=QgsReadWriteContext()) const override
Writes the light source's configuration to a new DOM element and returns it.
Definition
qgsdirectionallightsettings.cpp:56
QgsDirectionalLightSettings::QgsDirectionalLightSettings
QgsDirectionalLightSettings()=default
Construct a directional light with default values.
QgsDirectionalLightSettings::createEntity
Qt3DCore::QEntity * createEntity(const Qgs3DMapSettings &map, Qt3DCore::QEntity *parent) const override
Creates an entity representing the light source.
Definition
qgsdirectionallightsettings.cpp:41
QgsDirectionalLightSettings::readXml
void readXml(const QDomElement &elem, const QgsReadWriteContext &context=QgsReadWriteContext()) override
Reads configuration from a DOM element previously written using writeXml().
Definition
qgsdirectionallightsettings.cpp:68
QgsDirectionalLightSettings::direction
QgsVector3D direction() const
Returns the direction of the light in degrees.
Definition
qgsdirectionallightsettings.h:46
QgsDirectionalLightSettings::type
Qgis::LightSourceType type() const override
Returns the light source type.
Definition
qgsdirectionallightsettings.cpp:29
QgsDirectionalLightSettings::intensity
double intensity() const
Returns intensity of the light.
Definition
qgsdirectionallightsettings.h:56
QgsLightSource::mId
QString mId
Unique light ID.
Definition
qgslightsource.h:101
QgsReadWriteContext
A container for the context for various read/write operations on objects.
Definition
qgsreadwritecontext.h:38
QgsVector3D
A 3D vector (similar to QVector3D) with the difference that it uses double precision instead of singl...
Definition
qgsvector3d.h:33
qgsDoubleNear
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference).
Definition
qgis.h:7743
qgs3dutils.h
qgscolorutils.h
qgsdirectionallightsettings.h
qgssymbollayerutils.h
Generated on
for QGIS API Documentation by
1.17.0