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", 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( 
"label" ), category.label() );
 
  496    catElem.setAttribute( QStringLiteral( 
"render" ), category.renderState() ? 
"true" : 
"false" );
 
  497    catsElem.appendChild( catElem );
 
  499  elem.appendChild( catsElem );
 
  507  mRenderingParameter = elem.attribute( 
"rendering-parameter", QString() );
 
  509  const QDomElement catsElem = elem.firstChildElement( QStringLiteral( 
"categories" ) );
 
  510  if ( !catsElem.isNull() )
 
  512    mCategoriesList.clear();
 
  513    QDomElement catElem = catsElem.firstChildElement();
 
  514    while ( !catElem.isNull() )
 
  516      if ( catElem.tagName() == QLatin1String( 
"category" ) )
 
  518        const int value = catElem.attribute( QStringLiteral( 
"value" ) ).toInt();
 
  519        const QString label = catElem.attribute( QStringLiteral( 
"label" ) );
 
  520        const bool render = catElem.attribute( QStringLiteral( 
"render" ) ) != QLatin1String( 
"false" );
 
  524      catElem = catElem.nextSiblingElement();
 
  531  return mRenderingParameter;
 
  541  mCategoriesList = categories;
 
  549    if ( !category.renderState() )
 
  550      filteredOut.push_back( category );
 
  560  QList<QgsColorRampShader::ColorRampItem> colorRampItemList;
 
  563    const QColor color = category.color();
 
  565    colorRampItemList.push_back( item );
 
  568  return colorRampShader;
 
  576  mat->addParameter( renderingStyle );
 
  577  Qt3DRender::QParameter *pointSizeParameter = 
new Qt3DRender::QParameter( 
"u_pointSize", QVariant::fromValue( 
mPointSize ) );
 
  578  mat->addParameter( pointSizeParameter );
 
  580  Qt3DRender::QTexture1D *colorRampTexture = 
nullptr;
 
  583    colorRampTexture = 
new Qt3DRender::QTexture1D( mat );
 
  584    colorRampTexture->addTextureImage( 
new QgsColorRampTexture( mColorRampShader, 1 ) );
 
  585    colorRampTexture->setMinificationFilter( Qt3DRender::QTexture1D::Linear );
 
  586    colorRampTexture->setMagnificationFilter( Qt3DRender::QTexture1D::Linear );
 
  590  Qt3DRender::QParameter *colorRampTextureParameter = 
new Qt3DRender::QParameter( 
"u_colorRampTexture", colorRampTexture );
 
  591  mat->addParameter( colorRampTextureParameter );
 
  592  Qt3DRender::QParameter *colorRampCountParameter = 
new Qt3DRender::QParameter( 
"u_colorRampCount", mColorRampShader.
colorRampItemList().count() );
 
  593  mat->addParameter( colorRampCountParameter );
 
  595  Qt3DRender::QParameter *colorRampTypeParameter = 
new Qt3DRender::QParameter( 
"u_colorRampType", colorRampType );
 
  596  mat->addParameter( colorRampTypeParameter );
 
@ 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()
Constructor for 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()
Constructor for QgsColorRampPointCloud3DSymbol.
 
A ramp shader will color a raster pixel based on a list of values ranges in a ramp.
 
Type colorRampType() const
Returns the color ramp type.
 
QList< QgsColorRampShader::ColorRampItem > colorRampItemList() const
Returns the custom colormap.
 
QDomElement writeXml(QDomDocument &doc, const QgsReadWriteContext &context=QgsReadWriteContext()) const
Writes configuration to a new DOM element.
 
void setClassificationMode(ClassificationMode classificationMode)
Sets classification mode.
 
void setColorRampItemList(const QList< QgsColorRampShader::ColorRampItem > &list)
Sets a custom colormap.
 
void setColorRampType(QgsColorRampShader::Type colorRampType)
Sets the color ramp type.
 
void readXml(const QDomElement &elem, const QgsReadWriteContext &context=QgsReadWriteContext())
Reads configuration from the given DOM element.
 
Manipulates raster or point cloud pixel values so that they enhanceContrast or clip into a specified ...
 
void readXml(const QDomElement &elem)
 
QgsPointCloud3DSymbol()
Constructor for QgsPointCloud3DSymbol.
 
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
Destructor for QgsPointCloud3DSymbol.
 
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()
Constructor for 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()
Constructor for QgsSingleColorPointCloud3DSymbol.
 
void setSingleColor(QColor color)
Sets the color used by the renderer when using SingleColor rendering mode.
 
static QColor decodeColor(const QString &str)
 
static QString encodeColor(const QColor &color)
 
QList< QgsPointCloudCategory > QgsPointCloudCategoryList