23#include <QDomDocument>
25#include <Qt3DCore/QEntity>
26#include <Qt3DExtras/QPhongMaterial>
27#include <Qt3DExtras/QSphereMesh>
28#include <Qt3DRender/QPointLight>
30using namespace Qt::StringLiterals;
44 Qt3DCore::QEntity *lightEntity =
new Qt3DCore::QEntity();
45 QgsGeoTransform *lightTransform =
new QgsGeoTransform;
46 lightTransform->setOrigin( map.
origin() );
47 lightTransform->setGeoTranslation(
position().toVector3D() );
49 Qt3DRender::QPointLight *light =
new Qt3DRender::QPointLight;
50 light->setColor(
color() );
57 lightEntity->addComponent( light );
58 lightEntity->addComponent( lightTransform );
62 lightEntity->setParent( parent );
67 Qt3DCore::QEntity *originEntity =
new Qt3DCore::QEntity();
69 QgsGeoTransform *originTransform =
new QgsGeoTransform;
70 originTransform->setOrigin( map.
origin() );
71 originTransform->setGeoTranslation(
position().toVector3D() );
72 originEntity->addComponent( originTransform );
74 Qt3DExtras::QPhongMaterial *materialLightOriginCenter =
new Qt3DExtras::QPhongMaterial;
75 materialLightOriginCenter->setAmbient(
color() );
76 originEntity->addComponent( materialLightOriginCenter );
78 Qt3DExtras::QSphereMesh *rendererLightOriginCenter =
new Qt3DExtras::QSphereMesh;
79 rendererLightOriginCenter->setRadius( 20 );
80 originEntity->addComponent( rendererLightOriginCenter );
82 originEntity->setEnabled(
true );
84 Qt3DCore::QEntity *groupEntity =
new Qt3DCore::QEntity( parent );
85 lightEntity->setParent( groupEntity );
86 originEntity->setParent( groupEntity );
87 groupEntity->setEnabled(
true );
94 QDomElement elemLight = doc.createElement( u
"point-light"_s );
95 elemLight.setAttribute( u
"x"_s, mPosition.x() );
96 elemLight.setAttribute( u
"y"_s, mPosition.y() );
97 elemLight.setAttribute( u
"z"_s, mPosition.z() );
99 elemLight.setAttribute( u
"intensity"_s, mIntensity );
100 elemLight.setAttribute( u
"attenuation-0"_s, mConstantAttenuation );
101 elemLight.setAttribute( u
"attenuation-1"_s, mLinearAttenuation );
102 elemLight.setAttribute( u
"attenuation-2"_s, mQuadraticAttenuation );
108 mPosition.set( elem.attribute( u
"x"_s ).toDouble(), elem.attribute( u
"y"_s ).toDouble(), elem.attribute( u
"z"_s ).toDouble() );
110 mIntensity = elem.attribute( u
"intensity"_s ).toFloat();
111 mConstantAttenuation = elem.attribute( u
"attenuation-0"_s ).toDouble();
112 mLinearAttenuation = elem.attribute( u
"attenuation-1"_s ).toDouble();
113 mQuadraticAttenuation = elem.attribute( u
"attenuation-2"_s ).toDouble();
118 return mPosition == other.mPosition && mColor == other.mColor && mIntensity == other.mIntensity && mConstantAttenuation == other.mConstantAttenuation && mLinearAttenuation == other.mLinearAttenuation && mQuadraticAttenuation == other.mQuadraticAttenuation;
LightSourceType
Light source types for 3D scenes.
@ Point
Point light source.
bool showLightSourceOrigins() const
Returns whether to show light source origins as a sphere (for debugging).
QgsVector3D origin() const
Returns coordinates in map CRS at which 3D scene has origin (0,0,0).
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.
QgsPointLightSettings()=default
Construct a point light with default values.
QDomElement writeXml(QDomDocument &doc, const QgsReadWriteContext &context=QgsReadWriteContext()) const override
Writes the light source's configuration to a new DOM element and returns it.
Qt3DCore::QEntity * createEntity(const Qgs3DMapSettings &map, Qt3DCore::QEntity *parent) const override
Creates an entity representing the light source.
bool operator==(const QgsPointLightSettings &other) const
float quadraticAttenuation() const
Returns quadratic attenuation (A_2).
QgsPointLightSettings * clone() const override
Returns a copy of the light source.
float linearAttenuation() const
Returns linear attenuation (A_1).
float intensity() const
Returns intensity of the light.
Qgis::LightSourceType type() const override
Returns the light source type.
void readXml(const QDomElement &elem, const QgsReadWriteContext &context=QgsReadWriteContext()) override
Reads configuration from a DOM element previously written using writeXml().
QgsVector3D position() const
Returns position of the light (in 3D map coordinates).
float constantAttenuation() const
Returns constant attenuation (A_0).
QColor color() const
Returns color of the light.
A container for the context for various read/write operations on objects.