QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsphongmaterialsettings.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsphongmaterialsettings.h
3 --------------------------------------
4 Date : July 2017
5 Copyright : (C) 2017 by Martin Dobias
6 Email : wonder dot sk at gmail dot com
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#ifndef QGSPHONGMATERIALSETTINGS_H
17#define QGSPHONGMATERIALSETTINGS_H
18
19#include "qgis_3d.h"
21
22#include <QColor>
23
24class QDomElement;
25
36{
37 public:
38
43
44 QString type() const override;
45
49 static bool supportsTechnique( QgsMaterialSettingsRenderingTechnique technique );
50
55
56 QgsPhongMaterialSettings *clone() const override SIP_FACTORY;
57
59 QColor ambient() const { return mAmbient; }
61 QColor diffuse() const { return mDiffuse; }
63 QColor specular() const { return mSpecular; }
65 double shininess() const { return mShininess; }
66
71 double opacity() const { return mOpacity; }
72
82 double ambientCoefficient() const { return mAmbientCoefficient; }
83
93 double diffuseCoefficient() const { return mDiffuseCoefficient; }
94
104 double specularCoefficient() const { return mSpecularCoefficient; }
105
106 QMap<QString, QString> toExportParameters() const override;
107
109 void setAmbient( const QColor &ambient ) { mAmbient = ambient; }
111 void setDiffuse( const QColor &diffuse ) { mDiffuse = diffuse; }
113 void setSpecular( const QColor &specular ) { mSpecular = specular; }
115 void setShininess( float shininess ) { mShininess = shininess; }
116
121 void setOpacity( double opacity ) { mOpacity = opacity; }
122
132 void setAmbientCoefficient( double coefficient ) { mAmbientCoefficient = coefficient; }
133
143 void setDiffuseCoefficient( double coefficient ) { mDiffuseCoefficient = coefficient; }
144
154 void setSpecularCoefficient( double coefficient ) { mSpecularCoefficient = coefficient; }
155
156 void readXml( const QDomElement &elem, const QgsReadWriteContext &context ) override;
157 void writeXml( QDomElement &elem, const QgsReadWriteContext &context ) const override;
158
159#ifndef SIP_RUN
160 Qt3DRender::QMaterial *toMaterial( QgsMaterialSettingsRenderingTechnique technique, const QgsMaterialContext &context ) const override SIP_FACTORY;
161 void addParametersToEffect( Qt3DRender::QEffect *effect ) const override;
162
163 QByteArray dataDefinedVertexColorsAsByte( const QgsExpressionContext &expressionContext ) const override;
164 int dataDefinedByteStride() const override;
165#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
166 void applyDataDefinedToGeometry( Qt3DRender::QGeometry *geometry, int vertexCount, const QByteArray &data ) const override;
167#else
168 void applyDataDefinedToGeometry( Qt3DCore::QGeometry *geometry, int vertexCount, const QByteArray &data ) const override;
169#endif
170#endif
171
172 // TODO c++20 - replace with = default
173 bool operator==( const QgsPhongMaterialSettings &other ) const
174 {
175 return mAmbient == other.mAmbient &&
176 mDiffuse == other.mDiffuse &&
177 mOpacity == other.mOpacity &&
178 mSpecular == other.mSpecular &&
179 mShininess == other.mShininess &&
180 mAmbientCoefficient == other.mAmbientCoefficient &&
181 mDiffuseCoefficient == other.mDiffuseCoefficient &&
182 mSpecularCoefficient == other.mSpecularCoefficient;
183 }
184
185 private:
186 QColor mAmbient{ QColor::fromRgbF( 0.1f, 0.1f, 0.1f, 1.0f ) };
187 QColor mDiffuse{ QColor::fromRgbF( 0.7f, 0.7f, 0.7f, 1.0f ) };
188 QColor mSpecular{ QColor::fromRgbF( 1.0f, 1.0f, 1.0f, 1.0f ) };
189 double mShininess = 0.0;
190
191 double mAmbientCoefficient = 1.0;
192 double mDiffuseCoefficient = 1.0;
193 double mSpecularCoefficient = 1.0;
194
195 double mOpacity = 1.0;
196
198 Qt3DRender::QMaterial *constantColorMaterial( const QgsMaterialContext &context ) const;
199 Qt3DRender::QMaterial *dataDefinedMaterial() const;
200};
201
202
203#endif // QGSPHONGMATERIALSETTINGS_H
virtual void writeXml(QDomElement &element, const QgsReadWriteContext &) const
Writes settings to a DOM element.
virtual QByteArray dataDefinedVertexColorsAsByte(const QgsExpressionContext &expressionContext) const
Returns byte array corresponding to the data defined colors depending of the expressionContext,...
virtual QMap< QString, QString > toExportParameters() const =0
Returns the parameters to be exported to .mtl file.
virtual void readXml(const QDomElement &element, const QgsReadWriteContext &)
Reads settings from a DOM element.
virtual int dataDefinedByteStride() const
Returns byte stride of the data defined colors,used to fill the vertex colors data defined buffer for...
virtual Qt3DRender::QMaterial * toMaterial(QgsMaterialSettingsRenderingTechnique technique, const QgsMaterialContext &context) const =0
Creates a new QMaterial object representing the material settings.
virtual QString type() const =0
Returns the unique type name for the material.
virtual void addParametersToEffect(Qt3DRender::QEffect *effect) const =0
Adds parameters from the material to a destination effect.
virtual void applyDataDefinedToGeometry(Qt3DCore::QGeometry *geometry, int vertexCount, const QByteArray &dataDefinedBytes) const
Applies the data defined bytes, dataDefinedBytes, on the geometry by filling a specific vertex buffer...
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
double ambientCoefficient() const
Returns the coefficient for the ambient color contribution (ie strength factor of the ambient color).
void setOpacity(double opacity)
Sets opacity of the surface.
bool operator==(const QgsPhongMaterialSettings &other) const
void setDiffuse(const QColor &diffuse)
Sets diffuse color component.
void setDiffuseCoefficient(double coefficient)
Sets the coefficient for the diffuse color contribution (ie strength factor of the diffuse color).
QColor diffuse() const
Returns diffuse color component.
double opacity() const
Returns the opacity of the surface.
QColor specular() const
Returns specular color component.
void setAmbient(const QColor &ambient)
Sets ambient color component.
void setSpecularCoefficient(double coefficient)
Sets the coefficient for the specular color contribution (ie strength factor of the specular color).
double specularCoefficient() const
Returns the coefficient for the specular color contribution (ie strength factor of the specular color...
double shininess() const
Returns shininess of the surface.
QgsPhongMaterialSettings()=default
Constructor for QgsPhongMaterialSettings.
void setShininess(float shininess)
Sets shininess of the surface.
double diffuseCoefficient() const
Returns the coefficient for the diffuse color contribution (ie strength factor of the diffuse color).
void setSpecular(const QColor &specular)
Sets specular color component.
void setAmbientCoefficient(double coefficient)
Sets the coefficient for the ambient color contribution (ie strength factor of the ambient color).
The class is used as a container of context for various read/write operations on other objects.
QgsMaterialSettingsRenderingTechnique
Material rendering techniques 3.
#define SIP_FACTORY
Definition: qgis_sip.h:76