Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgspointcloudclassifiedrenderer.h 3 : : -------------------- 4 : : begin : October 2020 5 : : copyright : (C) 2020 by Nyall Dawson 6 : : email : nyall dot dawson at gmail dot com 7 : : ***************************************************************************/ 8 : : 9 : : /*************************************************************************** 10 : : * * 11 : : * This program is free software; you can redistribute it and/or modify * 12 : : * it under the terms of the GNU General Public License as published by * 13 : : * the Free Software Foundation; either version 2 of the License, or * 14 : : * (at your option) any later version. * 15 : : * * 16 : : ***************************************************************************/ 17 : : 18 : : #ifndef QGSPOINTCLOUDCLASSIFIEDRENDERER_H 19 : : #define QGSPOINTCLOUDCLASSIFIEDRENDERER_H 20 : : 21 : : #include "qgspointcloudrenderer.h" 22 : : #include "qgis_core.h" 23 : : #include "qgis_sip.h" 24 : : #include "qgscolorrampshader.h" 25 : : 26 : : 27 : : /** 28 : : * \ingroup core 29 : : * \brief Represents an individual category (class) from a QgsPointCloudClassifiedRenderer. 30 : : * \since QGIS 3.18 31 : : */ 32 : 0 : class CORE_EXPORT QgsPointCloudCategory 33 : : { 34 : : public: 35 : : 36 : : /** 37 : : * Constructor for QgsPointCloudCategory. 38 : : */ 39 : : QgsPointCloudCategory() = default; 40 : : 41 : : /** 42 : : * Constructor for a new QgsPointCloudCategory, with the specified \a value and \a color. 43 : : * 44 : : * The \a label argument specifies the label used for this category in legends and the layer tree. 45 : : * 46 : : * The \a render argument indicates whether the category should initially be rendered and appear checked in the layer tree. 47 : : */ 48 : : QgsPointCloudCategory( int value, const QColor &color, const QString &label, bool render = true ); 49 : : 50 : : /** 51 : : * Returns the value corresponding to this category. 52 : : * 53 : : * \see setValue() 54 : : */ 55 : 0 : int value() const { return mValue; } 56 : : 57 : : /** 58 : : * Returns the color which will be used to render this category. 59 : : * \see setColor() 60 : : */ 61 : 0 : QColor color() const { return mColor; } 62 : : 63 : : /** 64 : : * Returns the label for this category, which is used to represent the category within 65 : : * legends and the layer tree. 66 : : * \see setLabel() 67 : : */ 68 : 0 : QString label() const { return mLabel; } 69 : : 70 : : /** 71 : : * Sets the \a value corresponding to this category. 72 : : * 73 : : * \see value() 74 : : */ 75 : : void setValue( int value ) { mValue = value; } 76 : : 77 : : /** 78 : : * Sets the \a color which will be used to render this category. 79 : : * 80 : : * \see color() 81 : : */ 82 : : void setColor( const QColor &color ) { mColor = color; } 83 : : 84 : : /** 85 : : * Sets the \a label for this category, which is used to represent the category within 86 : : * legends and the layer tree. 87 : : * \see label() 88 : : */ 89 : : void setLabel( const QString &label ) { mLabel = label; } 90 : : 91 : : /** 92 : : * Returns TRUE if the category is currently enabled and should be rendered. 93 : : * \see setRenderState() 94 : : */ 95 : 0 : bool renderState() const { return mRender; } 96 : : 97 : : /** 98 : : * Sets whether the category is currently enabled and should be rendered. 99 : : * \see renderState() 100 : : */ 101 : 0 : void setRenderState( bool render ) { mRender = render; } 102 : : 103 : : protected: 104 : : int mValue = 0; 105 : : QColor mColor; 106 : : QString mLabel; 107 : : bool mRender = true; 108 : : }; 109 : : 110 : : typedef QList<QgsPointCloudCategory> QgsPointCloudCategoryList; 111 : : 112 : : 113 : : /** 114 : : * \ingroup core 115 : : * \brief Renders point clouds by a classification attribute. 116 : : * 117 : : * \since QGIS 3.18 118 : : */ 119 : 0 : class CORE_EXPORT QgsPointCloudClassifiedRenderer : public QgsPointCloudRenderer 120 : : { 121 : : public: 122 : : 123 : : /** 124 : : * Constructor for QgsPointCloudClassifiedRenderer. 125 : : */ 126 : : QgsPointCloudClassifiedRenderer(); 127 : : 128 : : QString type() const override; 129 : : QgsPointCloudRenderer *clone() const override; 130 : : void renderBlock( const QgsPointCloudBlock *block, QgsPointCloudRenderContext &context ) override; 131 : : bool willRenderPoint( const QVariantMap &pointAttributes ) override; 132 : : QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) const override; 133 : : QSet< QString > usedAttributes( const QgsPointCloudRenderContext &context ) const override; 134 : : QList<QgsLayerTreeModelLegendNode *> createLegendNodes( QgsLayerTreeLayer *nodeLayer ) override SIP_FACTORY; 135 : : QStringList legendRuleKeys() const override; 136 : : bool legendItemChecked( const QString &key ) override; 137 : : void checkLegendItem( const QString &key, bool state = true ) override; 138 : : 139 : : /** 140 : : * Creates an RGB renderer from an XML \a element. 141 : : */ 142 : : static QgsPointCloudRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY; 143 : : 144 : : /** 145 : : * Returns the default list of categories. 146 : : */ 147 : : static QgsPointCloudCategoryList defaultCategories(); 148 : : 149 : : /** 150 : : * Returns the attribute to use for the renderer. 151 : : * 152 : : * \see setAttribute() 153 : : */ 154 : : QString attribute() const; 155 : : 156 : : /** 157 : : * Sets the \a attribute to use for the renderer. 158 : : * 159 : : * \see attribute() 160 : : */ 161 : : void setAttribute( const QString &attribute ); 162 : : 163 : : /** 164 : : * Returns the classification categories used for rendering. 165 : : * 166 : : * \see setCategories() 167 : : */ 168 : : QgsPointCloudCategoryList categories() const; 169 : : 170 : : /** 171 : : * Sets the classification \a categories used for rendering. 172 : : * 173 : : * \see categories() 174 : : */ 175 : : void setCategories( const QgsPointCloudCategoryList &categories ); 176 : : 177 : : /** 178 : : * Adds a \a category to the renderer. 179 : : * 180 : : * \see categories() 181 : : */ 182 : : void addCategory( const QgsPointCloudCategory &category ); 183 : : 184 : : private: 185 : : 186 : 0 : QString mAttribute = QStringLiteral( "Classification" ); 187 : : 188 : : QgsPointCloudCategoryList mCategories; 189 : : }; 190 : : 191 : : #endif // QGSPOINTCLOUDCLASSIFIEDRENDERER_H