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();
 
 
  135  return QStringLiteral( 
"single-color" );
 
 
  141  result->mSingleColor = mSingleColor;
 
 
  164  mSingleColor = color;
 
 
  170  mat->addParameter( renderingStyle );
 
  171  Qt3DRender::QParameter *pointSizeParameter = 
new Qt3DRender::QParameter( 
"u_pointSize", QVariant::fromValue( 
mPointSize ) );
 
  172  mat->addParameter( pointSizeParameter );
 
  173  Qt3DRender::QParameter *singleColorParameter = 
new Qt3DRender::QParameter( 
"u_singleColor", QVector3D( mSingleColor.redF(), mSingleColor.greenF(), mSingleColor.blueF() ) );
 
  174  mat->addParameter( singleColorParameter );
 
 
  187  result->mRenderingParameter = mRenderingParameter;
 
  188  result->mColorRampShader = mColorRampShader;
 
  189  result->mColorRampShaderMin = mColorRampShaderMin;
 
  190  result->mColorRampShaderMax = mColorRampShaderMax;
 
 
  197  return QStringLiteral( 
"color-ramp" );
 
 
  205  elem.setAttribute( QStringLiteral( 
"rendering-parameter" ), mRenderingParameter );
 
  206  elem.setAttribute( QStringLiteral( 
"color-ramp-shader-min" ), mColorRampShaderMin );
 
  207  elem.setAttribute( QStringLiteral( 
"color-ramp-shader-max" ), mColorRampShaderMax );
 
  208  QDomDocument doc = elem.ownerDocument();
 
  209  const QDomElement elemColorRampShader = mColorRampShader.
writeXml( doc );
 
  210  elem.appendChild( elemColorRampShader );
 
 
  218  mRenderingParameter = elem.attribute( 
"rendering-parameter", QString() );
 
  219  mColorRampShaderMin = elem.attribute( QStringLiteral( 
"color-ramp-shader-min" ), QStringLiteral( 
"0.0" ) ).toDouble();
 
  220  mColorRampShaderMax = elem.attribute( QStringLiteral( 
"color-ramp-shader-max" ), QStringLiteral( 
"1.0" ) ).toDouble();
 
  221  mColorRampShader.
readXml( elem );
 
 
  226  return mRenderingParameter;
 
 
  231  mRenderingParameter = parameter;
 
 
  236  return mColorRampShader;
 
 
  246  mColorRampShaderMin = min;
 
  247  mColorRampShaderMax = max;
 
 
  253  mat->addParameter( renderingStyle );
 
  254  Qt3DRender::QParameter *pointSizeParameter = 
new Qt3DRender::QParameter( 
"u_pointSize", QVariant::fromValue( 
mPointSize ) );
 
  255  mat->addParameter( pointSizeParameter );
 
  257  Qt3DRender::QTexture1D *colorRampTexture = 
nullptr;
 
  260    colorRampTexture = 
new Qt3DRender::QTexture1D( mat );
 
  261    colorRampTexture->addTextureImage( 
new QgsColorRampTexture( mColorRampShader, 1 ) );
 
  262    colorRampTexture->setMinificationFilter( Qt3DRender::QTexture1D::Linear );
 
  263    colorRampTexture->setMagnificationFilter( Qt3DRender::QTexture1D::Linear );
 
  267  Qt3DRender::QParameter *colorRampTextureParameter = 
new Qt3DRender::QParameter( 
"u_colorRampTexture", colorRampTexture );
 
  268  mat->addParameter( colorRampTextureParameter );
 
  269  Qt3DRender::QParameter *colorRampCountParameter = 
new Qt3DRender::QParameter( 
"u_colorRampCount", mColorRampShader.
colorRampItemList().count() );
 
  270  mat->addParameter( colorRampCountParameter );
 
  272  Qt3DRender::QParameter *colorRampTypeParameter = 
new Qt3DRender::QParameter( 
"u_colorRampType", 
static_cast<int>( colorRampType ) );
 
  273  mat->addParameter( colorRampTypeParameter );
 
 
  285  return QStringLiteral( 
"rgb" );
 
 
  291  result->mRedAttribute = mRedAttribute;
 
  292  result->mGreenAttribute = mGreenAttribute;
 
  293  result->mBlueAttribute = mBlueAttribute;
 
  295  if ( mRedContrastEnhancement )
 
  299  if ( mGreenContrastEnhancement )
 
  303  if ( mBlueContrastEnhancement )
 
 
  317  elem.setAttribute( QStringLiteral( 
"red" ), mRedAttribute );
 
  318  elem.setAttribute( QStringLiteral( 
"green" ), mGreenAttribute );
 
  319  elem.setAttribute( QStringLiteral( 
"blue" ), mBlueAttribute );
 
  321  QDomDocument doc = elem.ownerDocument();
 
  324  if ( mRedContrastEnhancement )
 
  326    QDomElement redContrastElem = doc.createElement( QStringLiteral( 
"redContrastEnhancement" ) );
 
  327    mRedContrastEnhancement->writeXml( doc, redContrastElem );
 
  328    elem.appendChild( redContrastElem );
 
  330  if ( mGreenContrastEnhancement )
 
  332    QDomElement greenContrastElem = doc.createElement( QStringLiteral( 
"greenContrastEnhancement" ) );
 
  333    mGreenContrastEnhancement->writeXml( doc, greenContrastElem );
 
  334    elem.appendChild( greenContrastElem );
 
  336  if ( mBlueContrastEnhancement )
 
  338    QDomElement blueContrastElem = doc.createElement( QStringLiteral( 
"blueContrastEnhancement" ) );
 
  339    mBlueContrastEnhancement->writeXml( doc, blueContrastElem );
 
  340    elem.appendChild( blueContrastElem );
 
 
  350  setRedAttribute( elem.attribute( QStringLiteral( 
"red" ), QStringLiteral( 
"Red" ) ) );
 
  351  setGreenAttribute( elem.attribute( QStringLiteral( 
"green" ), QStringLiteral( 
"Green" ) ) );
 
  352  setBlueAttribute( elem.attribute( QStringLiteral( 
"blue" ), QStringLiteral( 
"Blue" ) ) );
 
  356  const QDomElement redContrastElem = elem.firstChildElement( QStringLiteral( 
"redContrastEnhancement" ) );
 
  357  if ( !redContrastElem.isNull() )
 
  365  const QDomElement greenContrastElem = elem.firstChildElement( QStringLiteral( 
"greenContrastEnhancement" ) );
 
  366  if ( !greenContrastElem.isNull() )
 
  374  const QDomElement blueContrastElem = elem.firstChildElement( QStringLiteral( 
"blueContrastEnhancement" ) );
 
  375  if ( !blueContrastElem.isNull() )
 
 
  386  mat->addParameter( renderingStyle );
 
  387  Qt3DRender::QParameter *pointSizeParameter = 
new Qt3DRender::QParameter( 
"u_pointSize", QVariant::fromValue( 
mPointSize ) );
 
  388  mat->addParameter( pointSizeParameter );
 
 
  394  return mRedAttribute;
 
 
  404  return mGreenAttribute;
 
 
  414  return mBlueAttribute;
 
 
  424  return mRedContrastEnhancement.get();
 
 
  429  mRedContrastEnhancement.reset( enhancement );
 
 
  434  return mGreenContrastEnhancement.get();
 
 
  439  mGreenContrastEnhancement.reset( enhancement );
 
 
  444  return mBlueContrastEnhancement.get();
 
 
  449  mBlueContrastEnhancement.reset( enhancement );
 
 
  463  result->mRenderingParameter = mRenderingParameter;
 
  464  result->mCategoriesList = mCategoriesList;
 
 
  471  return QStringLiteral( 
"classification" );
 
 
  477  QDomDocument doc = elem.ownerDocument();
 
  481  elem.setAttribute( QStringLiteral( 
"rendering-parameter" ), mRenderingParameter );
 
  484  QDomElement catsElem = doc.createElement( QStringLiteral( 
"categories" ) );
 
  487    QDomElement catElem = doc.createElement( QStringLiteral( 
"category" ) );
 
  488    catElem.setAttribute( QStringLiteral( 
"value" ), QString::number( category.value() ) );
 
  489    catElem.setAttribute( QStringLiteral( 
"pointSize" ), category.pointSize() );
 
  490    catElem.setAttribute( QStringLiteral( 
"label" ), category.label() );
 
  492    catElem.setAttribute( QStringLiteral( 
"render" ), category.renderState() ? 
"true" : 
"false" );
 
  493    catsElem.appendChild( catElem );
 
  495  elem.appendChild( catsElem );
 
 
  503  mRenderingParameter = elem.attribute( 
"rendering-parameter", QString() );
 
  505  const QDomElement catsElem = elem.firstChildElement( QStringLiteral( 
"categories" ) );
 
  506  if ( !catsElem.isNull() )
 
  508    mCategoriesList.clear();
 
  509    QDomElement catElem = catsElem.firstChildElement();
 
  510    while ( !catElem.isNull() )
 
  512      if ( catElem.tagName() == QLatin1String( 
"category" ) )
 
  514        const int value = catElem.attribute( QStringLiteral( 
"value" ) ).toInt();
 
  515        const double size = catElem.attribute( QStringLiteral( 
"pointSize" ), QStringLiteral( 
"0" ) ).toDouble();
 
  516        const QString label = catElem.attribute( QStringLiteral( 
"label" ) );
 
  517        const bool render = catElem.attribute( QStringLiteral( 
"render" ) ) != QLatin1String( 
"false" );
 
  521      catElem = catElem.nextSiblingElement();
 
 
  528  return mRenderingParameter;
 
 
  538  mCategoriesList = categories;
 
 
  546    if ( !category.renderState() )
 
  547      filteredOut.push_back( category );
 
 
  557  QList<QgsColorRampShader::ColorRampItem> colorRampItemList;
 
  560    const QColor color = category.color();
 
  562    colorRampItemList.push_back( item );
 
  565  return colorRampShader;
 
  573  mat->addParameter( renderingStyle );
 
  574  Qt3DRender::QParameter *pointSizeParameter = 
new Qt3DRender::QParameter( 
"u_pointSize", QVariant::fromValue( 
mPointSize ) );
 
  575  mat->addParameter( pointSizeParameter );
 
  577  Qt3DRender::QTexture1D *colorRampTexture = 
nullptr;
 
  580    colorRampTexture = 
new Qt3DRender::QTexture1D( mat );
 
  581    colorRampTexture->addTextureImage( 
new QgsColorRampTexture( mColorRampShader, 1 ) );
 
  582    colorRampTexture->setMinificationFilter( Qt3DRender::QTexture1D::Linear );
 
  583    colorRampTexture->setMagnificationFilter( Qt3DRender::QTexture1D::Linear );
 
  587  Qt3DRender::QParameter *colorRampTextureParameter = 
new Qt3DRender::QParameter( 
"u_colorRampTexture", colorRampTexture );
 
  588  mat->addParameter( colorRampTextureParameter );
 
  589  Qt3DRender::QParameter *colorRampCountParameter = 
new Qt3DRender::QParameter( 
"u_colorRampCount", mColorRampShader.
colorRampItemList().count() );
 
  590  mat->addParameter( colorRampCountParameter );
 
  592  Qt3DRender::QParameter *colorRampTypeParameter = 
new Qt3DRender::QParameter( 
"u_colorRampType", 
static_cast<int>( colorRampType ) );
 
  593  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.
 
Abstract base class for 3D symbols that are used by VectorLayer3DRenderer objects.
 
virtual void copyBaseSettings(QgsAbstract3DSymbol *destination) const
Copies base class settings from this object to a destination object.
 
3D symbol that draws point cloud geometries as 3D objects using classification of the dataset.
 
void readXml(const QDomElement &elem, const QgsReadWriteContext &context) override
 
void writeXml(QDomElement &elem, const QgsReadWriteContext &context) const override
 
QgsAbstract3DSymbol * clone() const override SIP_FACTORY
 
void fillMaterial(QgsMaterial *material) override SIP_SKIP
Used to fill material object with necessary QParameters (and consequently opengl uniforms)
 
QString attribute() const
Returns the attribute used to select the color of the point cloud.
 
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()
 
3D symbol that draws point cloud geometries as 3D objects using color ramp shader.
 
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.
 
void fillMaterial(QgsMaterial *material) override SIP_SKIP
Used to fill material object with necessary QParameters (and consequently opengl uniforms)
 
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.
 
Handles contrast enhancement and clipping.
 
void readXml(const QDomElement &elem)
 
Base class for all materials used within QGIS 3D views.
 
3D symbol that draws point cloud geometries as 3D objects.
 
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.
 
A container for the context for various read/write operations on objects.
 
3D symbol that draws point cloud geometries as 3D objects using RGB colors in the dataset.
 
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.
 
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 fillMaterial(QgsMaterial *material) override SIP_SKIP
Used to fill material object with necessary QParameters (and consequently opengl uniforms)
 
void setRedAttribute(const QString &attribute)
Sets the attribute to use for the red channel.
 
3D symbol that draws point cloud geometries as 3D objects using one color.
 
QString symbolType() const override
Returns a unique string identifier of the symbol type.
 
QgsAbstract3DSymbol * clone() const override SIP_FACTORY
 
void fillMaterial(QgsMaterial *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