22#include <QDomDocument>
24#include <Qt3DCore/QEntity>
25#include <Qt3DRender/QDirectionalLight>
27using namespace Qt::StringLiterals;
36 auto res = std::make_unique< QgsDirectionalLightSettings >( *
this );
43 Qt3DCore::QEntity *lightEntity =
new Qt3DCore::QEntity( parent );
45 Qt3DRender::QDirectionalLight *light =
new Qt3DRender::QDirectionalLight;
47 light->setIntensity(
static_cast< float >(
intensity() ) );
51 lightEntity->addComponent( light );
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() );
64 elemLight.setAttribute( u
"intensity"_s, mIntensity );
70 if ( elem.hasAttribute( u
"id"_s ) )
71 mId = elem.attribute( u
"id"_s );
73 mDirection.set( elem.attribute( u
"x"_s ).toFloat(), elem.attribute( u
"y"_s ).toFloat(), elem.attribute( u
"z"_s ).toFloat() );
75 mIntensity = elem.attribute( u
"intensity"_s ).toDouble();
80 return mId == other.
mId && mDirection == other.mDirection && mColor == other.mColor &&
qgsDoubleNear( mIntensity, other.mIntensity );
LightSourceType
Light source types for 3D scenes.
@ Directional
Directional light source.
static QColor srgbToLinear(const QColor &color)
Converts a SRGB color to a linear color.
static QColor colorFromString(const QString &string)
Decodes a string into a color value.
static QString colorToString(const QColor &color)
Encodes a color into a string value.
QgsDirectionalLightSettings * clone() const override
Returns a copy of the light source.
bool operator==(const QgsDirectionalLightSettings &other) const
QColor color() const
Returns color of the light.
QDomElement writeXml(QDomDocument &doc, const QgsReadWriteContext &context=QgsReadWriteContext()) const override
Writes the light source's configuration to a new DOM element and returns it.
QgsDirectionalLightSettings()=default
Construct a directional light with default values.
Qt3DCore::QEntity * createEntity(const Qgs3DMapSettings &map, Qt3DCore::QEntity *parent) const override
Creates an entity representing the light source.
void readXml(const QDomElement &elem, const QgsReadWriteContext &context=QgsReadWriteContext()) override
Reads configuration from a DOM element previously written using writeXml().
QgsVector3D direction() const
Returns the direction of the light in degrees.
Qgis::LightSourceType type() const override
Returns the light source type.
double intensity() const
Returns intensity of the light.
QString mId
Unique light ID.
A container for the context for various read/write operations on objects.
A 3D vector (similar to QVector3D) with the difference that it uses double precision instead of singl...
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference).