21#include <Qt3DRender/QMaterial>
22#include <Qt3DRender/QParameter>
23#include <Qt3DRender/QTexture>
94 elem.setAttribute( QStringLiteral(
"point-size" ),
mPointSize );
95 elem.setAttribute( QStringLiteral(
"render-as-triangles" ),
mRenderAsTriangles ? 1 : 0 );
106 mPointSize = elem.attribute( QStringLiteral(
"point-size" ), QStringLiteral(
"3.0" ) ).toFloat();
107 mRenderAsTriangles = elem.attribute( QStringLiteral(
"render-as-triangles" ), QStringLiteral(
"0" ) ).toInt() == 1;
108 mHorizontalTriangleFilter = elem.attribute( QStringLiteral(
"horizontal-triangle-filter" ), QStringLiteral(
"0" ) ).toInt() == 1;
109 mHorizontalFilterThreshold = elem.attribute( QStringLiteral(
"horizontal-filter-threshold" ), QStringLiteral(
"10.0" ) ).toFloat();
110 mVerticalTriangleFilter = elem.attribute( QStringLiteral(
"vertical-triangle-filter" ), QStringLiteral(
"0" ) ).toInt() == 1;
111 mVerticalFilterThreshold = elem.attribute( QStringLiteral(
"vertical-filter-threshold" ), QStringLiteral(
"10.0" ) ).toFloat();
136 return QStringLiteral(
"single-color" );
142 result->mSingleColor = mSingleColor;
166 mSingleColor = color;
172 mat->addParameter( renderingStyle );
173 Qt3DRender::QParameter *pointSizeParameter =
new Qt3DRender::QParameter(
"u_pointSize", QVariant::fromValue(
mPointSize ) );
174 mat->addParameter( pointSizeParameter );
175 Qt3DRender::QParameter *singleColorParameter =
new Qt3DRender::QParameter(
"u_singleColor", QVector3D( mSingleColor.redF(), mSingleColor.greenF(), mSingleColor.blueF() ) );
176 mat->addParameter( singleColorParameter );
190 result->mRenderingParameter = mRenderingParameter;
191 result->mColorRampShader = mColorRampShader;
192 result->mColorRampShaderMin = mColorRampShaderMin;
193 result->mColorRampShaderMax = mColorRampShaderMax;
200 return QStringLiteral(
"color-ramp" );
208 elem.setAttribute( QStringLiteral(
"rendering-parameter" ), mRenderingParameter );
209 elem.setAttribute( QStringLiteral(
"color-ramp-shader-min" ), mColorRampShaderMin );
210 elem.setAttribute( QStringLiteral(
"color-ramp-shader-max" ), mColorRampShaderMax );
211 QDomDocument doc = elem.ownerDocument();
212 const QDomElement elemColorRampShader = mColorRampShader.
writeXml( doc );
213 elem.appendChild( elemColorRampShader );
221 mRenderingParameter = elem.attribute(
"rendering-parameter", QString() );
222 mColorRampShaderMin = elem.attribute( QStringLiteral(
"color-ramp-shader-min" ), QStringLiteral(
"0.0" ) ).toDouble();
223 mColorRampShaderMax = elem.attribute( QStringLiteral(
"color-ramp-shader-max" ), QStringLiteral(
"1.0" ) ).toDouble();
224 mColorRampShader.
readXml( elem );
229 return mRenderingParameter;
234 mRenderingParameter = parameter;
239 return mColorRampShader;
249 mColorRampShaderMin = min;
250 mColorRampShaderMax = max;
256 mat->addParameter( renderingStyle );
257 Qt3DRender::QParameter *pointSizeParameter =
new Qt3DRender::QParameter(
"u_pointSize", QVariant::fromValue(
mPointSize ) );
258 mat->addParameter( pointSizeParameter );
260 Qt3DRender::QTexture1D *colorRampTexture =
nullptr;
263 colorRampTexture =
new Qt3DRender::QTexture1D( mat );
264 colorRampTexture->addTextureImage(
new QgsColorRampTexture( mColorRampShader, 1 ) );
265 colorRampTexture->setMinificationFilter( Qt3DRender::QTexture1D::Linear );
266 colorRampTexture->setMagnificationFilter( Qt3DRender::QTexture1D::Linear );
270 Qt3DRender::QParameter *colorRampTextureParameter =
new Qt3DRender::QParameter(
"u_colorRampTexture", colorRampTexture );
271 mat->addParameter( colorRampTextureParameter );
272 Qt3DRender::QParameter *colorRampCountParameter =
new Qt3DRender::QParameter(
"u_colorRampCount", mColorRampShader.
colorRampItemList().count() );
273 mat->addParameter( colorRampCountParameter );
275 Qt3DRender::QParameter *colorRampTypeParameter =
new Qt3DRender::QParameter(
"u_colorRampType",
static_cast< int >( colorRampType ) );
276 mat->addParameter( colorRampTypeParameter );
289 return QStringLiteral(
"rgb" );
295 result->mRedAttribute = mRedAttribute;
296 result->mGreenAttribute = mGreenAttribute;
297 result->mBlueAttribute = mBlueAttribute;
299 if ( mRedContrastEnhancement )
303 if ( mGreenContrastEnhancement )
307 if ( mBlueContrastEnhancement )
321 elem.setAttribute( QStringLiteral(
"red" ), mRedAttribute );
322 elem.setAttribute( QStringLiteral(
"green" ), mGreenAttribute );
323 elem.setAttribute( QStringLiteral(
"blue" ), mBlueAttribute );
325 QDomDocument doc = elem.ownerDocument();
328 if ( mRedContrastEnhancement )
330 QDomElement redContrastElem = doc.createElement( QStringLiteral(
"redContrastEnhancement" ) );
331 mRedContrastEnhancement->writeXml( doc, redContrastElem );
332 elem.appendChild( redContrastElem );
334 if ( mGreenContrastEnhancement )
336 QDomElement greenContrastElem = doc.createElement( QStringLiteral(
"greenContrastEnhancement" ) );
337 mGreenContrastEnhancement->writeXml( doc, greenContrastElem );
338 elem.appendChild( greenContrastElem );
340 if ( mBlueContrastEnhancement )
342 QDomElement blueContrastElem = doc.createElement( QStringLiteral(
"blueContrastEnhancement" ) );
343 mBlueContrastEnhancement->writeXml( doc, blueContrastElem );
344 elem.appendChild( blueContrastElem );
354 setRedAttribute( elem.attribute( QStringLiteral(
"red" ), QStringLiteral(
"Red" ) ) );
355 setGreenAttribute( elem.attribute( QStringLiteral(
"green" ), QStringLiteral(
"Green" ) ) );
356 setBlueAttribute( elem.attribute( QStringLiteral(
"blue" ), QStringLiteral(
"Blue" ) ) );
360 const QDomElement redContrastElem = elem.firstChildElement( QStringLiteral(
"redContrastEnhancement" ) );
361 if ( !redContrastElem.isNull() )
369 const QDomElement greenContrastElem = elem.firstChildElement( QStringLiteral(
"greenContrastEnhancement" ) );
370 if ( !greenContrastElem.isNull() )
378 const QDomElement blueContrastElem = elem.firstChildElement( QStringLiteral(
"blueContrastEnhancement" ) );
379 if ( !blueContrastElem.isNull() )
390 mat->addParameter( renderingStyle );
391 Qt3DRender::QParameter *pointSizeParameter =
new Qt3DRender::QParameter(
"u_pointSize", QVariant::fromValue(
mPointSize ) );
392 mat->addParameter( pointSizeParameter );
398 return mRedAttribute;
408 return mGreenAttribute;
418 return mBlueAttribute;
428 return mRedContrastEnhancement.get();
433 mRedContrastEnhancement.reset( enhancement );
438 return mGreenContrastEnhancement.get();
443 mGreenContrastEnhancement.reset( enhancement );
448 return mBlueContrastEnhancement.get();
453 mBlueContrastEnhancement.reset( enhancement );
468 result->mRenderingParameter = mRenderingParameter;
469 result->mCategoriesList = mCategoriesList;
476 return QStringLiteral(
"classification" );
482 QDomDocument doc = elem.ownerDocument();
486 elem.setAttribute( QStringLiteral(
"rendering-parameter" ), mRenderingParameter );
489 QDomElement catsElem = doc.createElement( QStringLiteral(
"categories" ) );
492 QDomElement catElem = doc.createElement( QStringLiteral(
"category" ) );
493 catElem.setAttribute( QStringLiteral(
"value" ), QString::number( category.value() ) );
494 catElem.setAttribute( QStringLiteral(
"pointSize" ), category.pointSize() );
495 catElem.setAttribute( QStringLiteral(
"label" ), category.label() );
497 catElem.setAttribute( QStringLiteral(
"render" ), category.renderState() ?
"true" :
"false" );
498 catsElem.appendChild( catElem );
500 elem.appendChild( catsElem );
508 mRenderingParameter = elem.attribute(
"rendering-parameter", QString() );
510 const QDomElement catsElem = elem.firstChildElement( QStringLiteral(
"categories" ) );
511 if ( !catsElem.isNull() )
513 mCategoriesList.clear();
514 QDomElement catElem = catsElem.firstChildElement();
515 while ( !catElem.isNull() )
517 if ( catElem.tagName() == QLatin1String(
"category" ) )
519 const int value = catElem.attribute( QStringLiteral(
"value" ) ).toInt();
520 const double size = catElem.attribute( QStringLiteral(
"pointSize" ), QStringLiteral(
"0" ) ).toDouble();
521 const QString label = catElem.attribute( QStringLiteral(
"label" ) );
522 const bool render = catElem.attribute( QStringLiteral(
"render" ) ) != QLatin1String(
"false" );
526 catElem = catElem.nextSiblingElement();
533 return mRenderingParameter;
543 mCategoriesList = categories;
551 if ( !category.renderState() )
552 filteredOut.push_back( category );
562 QList<QgsColorRampShader::ColorRampItem> colorRampItemList;
565 const QColor color = category.color();
567 colorRampItemList.push_back( item );
570 return colorRampShader;
578 mat->addParameter( renderingStyle );
579 Qt3DRender::QParameter *pointSizeParameter =
new Qt3DRender::QParameter(
"u_pointSize", QVariant::fromValue(
mPointSize ) );
580 mat->addParameter( pointSizeParameter );
582 Qt3DRender::QTexture1D *colorRampTexture =
nullptr;
585 colorRampTexture =
new Qt3DRender::QTexture1D( mat );
586 colorRampTexture->addTextureImage(
new QgsColorRampTexture( mColorRampShader, 1 ) );
587 colorRampTexture->setMinificationFilter( Qt3DRender::QTexture1D::Linear );
588 colorRampTexture->setMagnificationFilter( Qt3DRender::QTexture1D::Linear );
592 Qt3DRender::QParameter *colorRampTextureParameter =
new Qt3DRender::QParameter(
"u_colorRampTexture", colorRampTexture );
593 mat->addParameter( colorRampTextureParameter );
594 Qt3DRender::QParameter *colorRampCountParameter =
new Qt3DRender::QParameter(
"u_colorRampCount", mColorRampShader.
colorRampItemList().count() );
595 mat->addParameter( colorRampCountParameter );
597 Qt3DRender::QParameter *colorRampTypeParameter =
new Qt3DRender::QParameter(
"u_colorRampType",
static_cast< int >( colorRampType ) );
598 mat->addParameter( colorRampTypeParameter );
ShaderInterpolationMethod
Color ramp shader interpolation methods.
@ Exact
Assigns the color of the exact matching value in the color ramp item list.
@ Continuous
Uses breaks from color palette.
@ UnknownDataType
Unknown or unspecified type.
virtual void copyBaseSettings(QgsAbstract3DSymbol *destination) const
Copies base class settings from this object to a destination object.
void readXml(const QDomElement &elem, const QgsReadWriteContext &context) override
void writeXml(QDomElement &elem, const QgsReadWriteContext &context) const override
QgsAbstract3DSymbol * clone() const override SIP_FACTORY
QString attribute() const
Returns the attribute used to select the color of the point cloud.
void fillMaterial(Qt3DRender::QMaterial *material) override SIP_SKIP
Used to fill material object with necessary QParameters (and consequently opengl uniforms)
void setCategoriesList(const QgsPointCloudCategoryList &categories)
Sets the list of categories of the classification.
QgsPointCloudCategoryList getFilteredOutCategories() const
Gets the list of categories of the classification that should not be rendered.
void setAttribute(const QString &attribute)
Sets the attribute used to select the color of the point cloud.
QString symbolType() const override
Returns a unique string identifier of the symbol type.
QgsClassificationPointCloud3DSymbol()
void fillMaterial(Qt3DRender::QMaterial *material) override SIP_SKIP
Used to fill material object with necessary QParameters (and consequently opengl uniforms)
void readXml(const QDomElement &elem, const QgsReadWriteContext &context) override
QgsAbstract3DSymbol * clone() const override SIP_FACTORY
void setAttribute(const QString &attribute)
Sets the attribute used to select the color of the point cloud.
void writeXml(QDomElement &elem, const QgsReadWriteContext &context) const override
void setColorRampShaderMinMax(double min, double max)
Sets the minimum and maximum values used when classifying colors in the color ramp shader.
QString attribute() const
Returns the attribute used to select the color of the point cloud.
QString symbolType() const override
Returns a unique string identifier of the symbol type.
QgsColorRampShader colorRampShader() const
Returns the color ramp shader used to render the color.
void setColorRampShader(const QgsColorRampShader &colorRampShader)
Sets the color ramp shader used to render the point cloud.
QgsColorRampPointCloud3DSymbol()
A ramp shader will color a raster pixel based on a list of values ranges in a ramp.
Qgis::ShaderInterpolationMethod colorRampType() const
Returns the color ramp interpolation method.
void setClassificationMode(Qgis::ShaderClassificationMethod classificationMode)
Sets the classification mode.
QList< QgsColorRampShader::ColorRampItem > colorRampItemList() const
Returns the custom color map.
QDomElement writeXml(QDomDocument &doc, const QgsReadWriteContext &context=QgsReadWriteContext()) const
Writes configuration to a new DOM element.
void setColorRampType(Qgis::ShaderInterpolationMethod colorRampType)
Sets the color ramp interpolation method.
void setColorRampItemList(const QList< QgsColorRampShader::ColorRampItem > &list)
Sets a custom color map.
void readXml(const QDomElement &elem, const QgsReadWriteContext &context=QgsReadWriteContext())
Reads configuration from the given DOM element.
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.
Manipulates raster or point cloud pixel values so that they enhanceContrast or clip into a specified ...
void readXml(const QDomElement &elem)
bool verticalTriangleFilter() const
Returns whether triangles are filtered by vertical height for rendering.
float mVerticalFilterThreshold
float verticalFilterThreshold() const
Returns the threshold vertical height value for filtering triangles.
void setVerticalTriangleFilter(bool verticalTriangleFilter)
Sets whether triangles are filtered by vertical height for rendering.
void setHorizontalFilterThreshold(float horizontalFilterThreshold)
Sets the threshold horizontal size value for filtering triangles.
void setRenderAsTriangles(bool asTriangles)
Sets whether points are triangulated to render solid surface.
float horizontalFilterThreshold() const
Returns the threshold horizontal size value for filtering triangles.
void copyBaseSettings(QgsAbstract3DSymbol *destination) const override
float mHorizontalFilterThreshold
bool renderAsTriangles() const
Returns whether points are triangulated to render solid surface.
bool mHorizontalTriangleFilter
void setPointSize(float size)
Sets the point size.
~QgsPointCloud3DSymbol() override
void writeBaseXml(QDomElement &elem, const QgsReadWriteContext &context) const
Writes symbol configuration of this class to the given DOM element.
bool mVerticalTriangleFilter
@ Classification
Render the point cloud with classified colors.
@ SingleColor
Render the point cloud with a single color.
@ ColorRamp
Render the point cloud with a color ramp.
@ RgbRendering
Render the RGB colors of the point cloud.
void setHorizontalTriangleFilter(bool horizontalTriangleFilter)
Sets whether whether triangles are filtered by horizontal size for rendering.
bool horizontalTriangleFilter() const
Returns whether triangles are filtered by horizontal size for rendering.
void readBaseXml(const QDomElement &elem, const QgsReadWriteContext &context)
Reads symbol configuration of this class from the given DOM element.
void setVerticalFilterThreshold(float verticalFilterThreshold)
Sets the threshold vertical height value for filtering triangles.
Represents an individual category (class) from a QgsPointCloudClassifiedRenderer.
The class is used as a container of context for various read/write operations on other objects.
QString blueAttribute() const
Returns the attribute to use for the blue channel.
void readXml(const QDomElement &elem, const QgsReadWriteContext &context) override
void setBlueAttribute(const QString &attribute)
Sets the attribute to use for the blue channel.
void setGreenContrastEnhancement(QgsContrastEnhancement *enhancement SIP_TRANSFER)
Sets the contrast enhancement to use for the green channel.
void fillMaterial(Qt3DRender::QMaterial *material) override SIP_SKIP
Used to fill material object with necessary QParameters (and consequently opengl uniforms)
QgsRgbPointCloud3DSymbol()
QString greenAttribute() const
Returns the attribute to use for the green channel.
QgsContrastEnhancement * blueContrastEnhancement()
Returns the contrast enhancement to use for the blue channel.
void setGreenAttribute(const QString &attribute)
Sets the attribute to use for the green channel.
QString redAttribute() const
Returns the attribute to use for the red channel.
void setBlueContrastEnhancement(QgsContrastEnhancement *enhancement SIP_TRANSFER)
Sets the contrast enhancement to use for the blue channel.
QgsContrastEnhancement * greenContrastEnhancement()
Returns the contrast enhancement to use for the green channel.
QgsContrastEnhancement * redContrastEnhancement()
Returns the contrast enhancement to use for the red channel.
void setRedContrastEnhancement(QgsContrastEnhancement *enhancement SIP_TRANSFER)
Sets the contrast enhancement to use for the red channel.
QgsAbstract3DSymbol * clone() const override SIP_FACTORY
QString symbolType() const override
Returns a unique string identifier of the symbol type.
void writeXml(QDomElement &elem, const QgsReadWriteContext &context) const override
void setRedAttribute(const QString &attribute)
Sets the attribute to use for the red channel.
QString symbolType() const override
Returns a unique string identifier of the symbol type.
QgsAbstract3DSymbol * clone() const override SIP_FACTORY
void fillMaterial(Qt3DRender::QMaterial *material) override SIP_SKIP
Used to fill material object with necessary QParameters (and consequently opengl uniforms)
void readXml(const QDomElement &elem, const QgsReadWriteContext &context) override
void writeXml(QDomElement &elem, const QgsReadWriteContext &context) const override
QgsSingleColorPointCloud3DSymbol()
void setSingleColor(QColor color)
Sets the color used by the renderer when using SingleColor rendering mode.
QList< QgsPointCloudCategory > QgsPointCloudCategoryList