16 #include <QDomDocument> 
   17 #include <QDomElement> 
   54   , mAttrName( attrName )
 
   61   const auto constRanges = 
ranges;
 
   80     if ( range.lowerValue() <= value && range.upperValue() >= value )
 
  109     return range->symbol();
 
  120       if ( matchingRange == &range )
 
  121         return QString::number( i );
 
  151   QVariant value = valueForFeature( feature, context );
 
  154   if ( value.isNull() )
 
  178     if ( !range.symbol() )
 
  181     range.symbol()->startRender( context, fields );
 
  191     if ( !range.symbol() )
 
  194     range.symbol()->stopRender( context );
 
  200   QSet<QString> attributes;
 
  212   QgsRangeList::const_iterator range_it = 
mRanges.constBegin();
 
  213   for ( ; range_it != 
mRanges.constEnd(); ++range_it )
 
  239   if ( rangeIndex < 0 || rangeIndex >= 
mRanges.size() )
 
  241   mRanges[rangeIndex].setSymbol( symbol );
 
  247   if ( rangeIndex < 0 || rangeIndex >= 
mRanges.size() )
 
  249   mRanges[rangeIndex].setLabel( label );
 
  255   if ( rangeIndex < 0 || rangeIndex >= 
mRanges.size() )
 
  259   if ( rangeIndex == 0 )
 
  261   else if ( rangeIndex == 
mRanges.count() )
 
  266   if ( isDefaultLabel )
 
  274   if ( rangeIndex < 0 || rangeIndex >= 
mRanges.size() )
 
  279   if ( rangeIndex == 0 )
 
  281   else if ( rangeIndex == 
mRanges.count() )
 
  286   if ( isDefaultLabel )
 
  294   if ( rangeIndex < 0 || rangeIndex >= 
mRanges.size() )
 
  296   mRanges[rangeIndex].setRenderState( value );
 
  302   QString s = QStringLiteral( 
"GRADUATED: attr %1\n" ).arg( 
mAttrName );
 
  303   for ( 
int i = 0; i < 
mRanges.count(); i++ )
 
  328   QVariantMap newProps = props;
 
  329   newProps[ QStringLiteral( 
"attribute" )] = 
mAttrName;
 
  334   for ( QgsRangeList::const_iterator it = 
mRanges.constBegin(); it != 
mRanges.constEnd(); ++it )
 
  336     it->toSld( doc, element, newProps, first );
 
  345   lst.reserve( 
mRanges.count() );
 
  348     lst.append( range.symbol() );
 
  381   QList<QgsClassificationRange> _classes = method.
classes( minimum, maximum, classes );
 
  388   const QString &attrName,
 
  394   bool useSymmetricMode,
 
  395   double symmetryPoint,
 
  396   const QStringList &listForCboPrettyBreaks,
 
  400   Q_UNUSED( listForCboPrettyBreaks )
 
  407   QString methodId = methodIdFromMode( 
mode );
 
  425     bool useSymmetricMode, 
double symmetryPoint, 
bool astride )
 
  430   QString methodId = methodIdFromMode( 
mode );
 
  447   for ( QList<QgsClassificationRange>::iterator it = classes.begin(); it != classes.end(); ++it )
 
  464   QDomElement symbolsElem = element.firstChildElement( QStringLiteral( 
"symbols" ) );
 
  465   if ( symbolsElem.isNull() )
 
  468   QDomElement rangesElem = element.firstChildElement( QStringLiteral( 
"ranges" ) );
 
  469   if ( rangesElem.isNull() )
 
  475   QDomElement rangeElem = rangesElem.firstChildElement();
 
  476   while ( !rangeElem.isNull() )
 
  478     if ( rangeElem.tagName() == QLatin1String( 
"range" ) )
 
  480       double lowerValue = rangeElem.attribute( QStringLiteral( 
"lower" ) ).toDouble();
 
  481       double upperValue = rangeElem.attribute( QStringLiteral( 
"upper" ) ).toDouble();
 
  482       QString symbolName = rangeElem.attribute( QStringLiteral( 
"symbol" ) );
 
  483       QString label = rangeElem.attribute( QStringLiteral( 
"label" ) );
 
  484       bool render = rangeElem.attribute( QStringLiteral( 
"render" ), QStringLiteral( 
"true" ) ) != QLatin1String( 
"false" );
 
  485       if ( symbolMap.contains( symbolName ) )
 
  487         QgsSymbol *symbol = symbolMap.take( symbolName );
 
  491     rangeElem = rangeElem.nextSiblingElement();
 
  494   QString attrName = element.attribute( QStringLiteral( 
"attr" ) );
 
  498   QString attrMethod = element.attribute( QStringLiteral( 
"graduatedMethod" ) );
 
  499   if ( !attrMethod.isEmpty() )
 
  512   QDomElement sourceSymbolElem = element.firstChildElement( QStringLiteral( 
"source-symbol" ) );
 
  513   if ( !sourceSymbolElem.isNull() )
 
  516     if ( sourceSymbolMap.contains( QStringLiteral( 
"0" ) ) )
 
  524   QDomElement sourceColorRampElem = element.firstChildElement( QStringLiteral( 
"colorramp" ) );
 
  525   if ( !sourceColorRampElem.isNull() && sourceColorRampElem.attribute( QStringLiteral( 
"name" ) ) == QLatin1String( 
"[source]" ) )
 
  532   QDomElement modeElem = element.firstChildElement( QStringLiteral( 
"mode" ) ); 
 
  533   QDomElement methodElem = element.firstChildElement( QStringLiteral( 
"classificationMethod" ) );
 
  538   if ( !modeElem.isNull() )
 
  540     QString modeString = modeElem.attribute( QStringLiteral( 
"name" ) );
 
  543     if ( modeString == QLatin1String( 
"equal" ) )
 
  544       methodId = QStringLiteral( 
"EqualInterval" );
 
  545     else if ( modeString == QLatin1String( 
"quantile" ) )
 
  546       methodId = QStringLiteral( 
"Quantile" );
 
  547     else if ( modeString == QLatin1String( 
"jenks" ) )
 
  548       methodId = QStringLiteral( 
"Jenks" );
 
  549     else if ( modeString == QLatin1String( 
"stddev" ) )
 
  550       methodId = QStringLiteral( 
"StdDev" );
 
  551     else if ( modeString == QLatin1String( 
"pretty" ) )
 
  552       methodId = QStringLiteral( 
"Pretty" );
 
  557     QDomElement symmetricModeElem = element.firstChildElement( QStringLiteral( 
"symmetricMode" ) );
 
  558     if ( !symmetricModeElem.isNull() )
 
  561       QString symmetricEnabled = symmetricModeElem.attribute( QStringLiteral( 
"enabled" ) );
 
  562       QString symmetricPointString = symmetricModeElem.attribute( QStringLiteral( 
"symmetryPoint" ) );
 
  563       QString astrideEnabled = symmetricModeElem.attribute( QStringLiteral( 
"astride" ) );
 
  564       method->
setSymmetricMode( symmetricEnabled == QLatin1String( 
"true" ), symmetricPointString.toDouble(), astrideEnabled == QLatin1String( 
"true" ) );
 
  566     QDomElement labelFormatElem = element.firstChildElement( QStringLiteral( 
"labelformat" ) );
 
  567     if ( !labelFormatElem.isNull() )
 
  570       QString format = labelFormatElem.attribute( QStringLiteral( 
"format" ), 
"%1" + QStringLiteral( 
" - " ) + 
"%2" );
 
  571       int precision = labelFormatElem.attribute( QStringLiteral( 
"decimalplaces" ), QStringLiteral( 
"4" ) ).toInt();
 
  572       bool trimTrailingZeroes = labelFormatElem.attribute( QStringLiteral( 
"trimtrailingzeroes" ), QStringLiteral( 
"false" ) ) == QLatin1String( 
"true" );
 
  588   QDomElement rotationElem = element.firstChildElement( QStringLiteral( 
"rotation" ) );
 
  589   if ( !rotationElem.isNull() && !rotationElem.attribute( QStringLiteral( 
"field" ) ).isEmpty() )
 
  600   QDomElement sizeScaleElem = element.firstChildElement( QStringLiteral( 
"sizescale" ) );
 
  601   if ( !sizeScaleElem.isNull() && !sizeScaleElem.attribute( QStringLiteral( 
"field" ) ).isEmpty() )
 
  607                               sizeScaleElem.attribute( QStringLiteral( 
"field" ) ) );
 
  613                               sizeScaleElem.attribute( QStringLiteral( 
"field" ) ) );
 
  617   QDomElement ddsLegendSizeElem = element.firstChildElement( QStringLiteral( 
"data-defined-size-legend" ) );
 
  618   if ( !ddsLegendSizeElem.isNull() )
 
  629   rendererElem.setAttribute( QStringLiteral( 
"type" ), QStringLiteral( 
"graduatedSymbol" ) );
 
  630   rendererElem.setAttribute( QStringLiteral( 
"symbollevels" ), ( 
mUsingSymbolLevels ? QStringLiteral( 
"1" ) : QStringLiteral( 
"0" ) ) );
 
  631   rendererElem.setAttribute( QStringLiteral( 
"forceraster" ), ( 
mForceRaster ? QStringLiteral( 
"1" ) : QStringLiteral( 
"0" ) ) );
 
  632   rendererElem.setAttribute( QStringLiteral( 
"attr" ), 
mAttrName );
 
  638   QDomElement rangesElem = doc.createElement( QStringLiteral( 
"ranges" ) );
 
  639   QgsRangeList::const_iterator it = 
mRanges.constBegin();
 
  640   for ( ; it != 
mRanges.constEnd(); ++it )
 
  643     QString symbolName = QString::number( i );
 
  646     QDomElement rangeElem = doc.createElement( QStringLiteral( 
"range" ) );
 
  647     rangeElem.setAttribute( QStringLiteral( 
"lower" ), QString::number( range.
lowerValue(), 
'f', 15 ) );
 
  648     rangeElem.setAttribute( QStringLiteral( 
"upper" ), QString::number( range.
upperValue(), 
'f', 15 ) );
 
  649     rangeElem.setAttribute( QStringLiteral( 
"symbol" ), symbolName );
 
  650     rangeElem.setAttribute( QStringLiteral( 
"label" ), range.
label() );
 
  651     rangeElem.setAttribute( QStringLiteral( 
"render" ), range.
renderState() ? QStringLiteral( 
"true" ) : QStringLiteral( 
"false" ) );
 
  652     rangesElem.appendChild( rangeElem );
 
  656   rendererElem.appendChild( rangesElem );
 
  660   rendererElem.appendChild( symbolsElem );
 
  666     sourceSymbols.insert( QStringLiteral( 
"0" ), 
mSourceSymbol.get() );
 
  668     rendererElem.appendChild( sourceSymbolElem );
 
  675     rendererElem.appendChild( colorRampElem );
 
  680   rendererElem.appendChild( classificationMethodElem );
 
  682   QDomElement rotationElem = doc.createElement( QStringLiteral( 
"rotation" ) );
 
  683   rendererElem.appendChild( rotationElem );
 
  685   QDomElement sizeScaleElem = doc.createElement( QStringLiteral( 
"sizescale" ) );
 
  686   rendererElem.appendChild( sizeScaleElem );
 
  693     QDomElement 
orderBy = doc.createElement( QStringLiteral( 
"orderby" ) );
 
  695     rendererElem.appendChild( 
orderBy );
 
  697   rendererElem.setAttribute( QStringLiteral( 
"enableorderby" ), ( 
mOrderByEnabled ? QStringLiteral( 
"1" ) : QStringLiteral( 
"0" ) ) );
 
  701     QDomElement ddsLegendElem = doc.createElement( QStringLiteral( 
"data-defined-size-legend" ) );
 
  703     rendererElem.appendChild( ddsLegendElem );
 
  727       return QStringLiteral( 
"EqualInterval" );
 
  729       return QStringLiteral( 
"Quantile" );
 
  731       return QStringLiteral( 
"Jenks" );
 
  733       return QStringLiteral( 
"StdDev" );
 
  735       return QStringLiteral( 
"Pretty" );
 
  744   if ( methodId == QLatin1String( 
"EqualInterval" ) )
 
  746   if ( methodId == QLatin1String( 
"Quantile" ) )
 
  748   if ( methodId == QLatin1String( 
"Jenks" ) )
 
  750   if ( methodId == QLatin1String( 
"StdDev" ) )
 
  752   if ( methodId == QLatin1String( 
"Pretty" ) )
 
  771         if ( sSize && sSize != ddSize )
 
  774           return baseLegendSymbolItems();
 
  791       lst += baseLegendSymbolItems();
 
  796   return baseLegendSymbolItems();
 
  801   QVariant value = valueForFeature( feature, context );
 
  804   if ( value.isNull() )
 
  805     return QSet< QString >();
 
  810     return QSet< QString >() << key;
 
  812     return QSet< QString >();
 
  850   double min = std::numeric_limits<double>::max();
 
  851   for ( 
int i = 0; i < 
mRanges.count(); i++ )
 
  858     min = std::min( sz, min );
 
  865   double max = std::numeric_limits<double>::min();
 
  866   for ( 
int i = 0; i < 
mRanges.count(); i++ )
 
  873     max = std::max( sz, max );
 
  880   for ( 
int i = 0; i < 
mRanges.count(); i++ )
 
  882     std::unique_ptr<QgsSymbol> symbol( 
mRanges.at( i ).symbol() ? 
mRanges.at( i ).symbol()->clone() : 
nullptr );
 
  883     const double size = 
mRanges.count() > 1
 
  884                         ? minSize + i * ( maxSize - minSize ) / ( 
mRanges.count() - 1 )
 
  885                         : .5 * ( maxSize + minSize );
 
  889       static_cast< QgsLineSymbol * 
>( symbol.get() )->setWidth( size );
 
  906       QgsSymbol *symbol = range.symbol() ? range.symbol()->
clone() : 
nullptr;
 
  910         colorValue = ( 
mRanges.count() > 1 ? 
static_cast< double >( i ) / ( 
mRanges.count() - 1 ) : 0 );
 
  928     std::unique_ptr<QgsSymbol> symbol( sym->
clone() );
 
  931       symbol->setColor( range.symbol()->color() );
 
  956   int index = key.toInt( &ok );
 
  957   if ( ok && index >= 0 && index < 
mRanges.size() )
 
  958     return mRanges.at( index ).renderState();
 
  966   int index = key.toInt( &ok );
 
  974   int index = key.toInt( &ok );
 
  984   QString label = QStringLiteral( 
"0.0 - 0.0" );
 
  997   QMutableListIterator< QgsRendererRange > it( 
mRanges );
 
  998   while ( it.hasNext() )
 
 1012       if ( isDefaultLabel )
 
 1014       it.setValue( range );
 
 1016       it.insert( newRange );
 
 1066   for ( 
int i = 0; i < 
mRanges.count(); i++ )
 
 1071     else if ( i == 
mRanges.count() - 1 )
 
 1080   double minClassRange = 0.0;
 
 1083     double range = rendererRange.upperValue() - rendererRange.lowerValue();
 
 1086     if ( minClassRange == 0.0 || range < minClassRange )
 
 1087       minClassRange = range;
 
 1089   if ( minClassRange <= 0.0 )
 
 1096   double nextDpMinRange = 0.0000000099;
 
 1097   while ( ndp > 0 && nextDpMinRange < minClassRange )
 
 1100     nextDpMinRange *= 10.0;
 
 1109   if ( from < 0 || from >= 
mRanges.size() || to < 0 || to >= 
mRanges.size() )
 
 1126   if ( order == Qt::AscendingOrder )
 
 1139   std::sort( sortedRanges.begin(), sortedRanges.end(), 
valueLessThan );
 
 1141   QgsRangeList::const_iterator it = sortedRanges.constBegin();
 
 1142   if ( it == sortedRanges.constEnd() )
 
 1145   if ( ( *it ).upperValue() < ( *it ).lowerValue() )
 
 1148   double prevMax = ( *it ).upperValue();
 
 1151   for ( ; it != sortedRanges.constEnd(); ++it )
 
 1153     if ( ( *it ).upperValue() < ( *it ).lowerValue() )
 
 1156     if ( ( *it ).lowerValue() < prevMax )
 
 1159     prevMax = ( *it ).upperValue();
 
 1167   std::sort( sortedRanges.begin(), sortedRanges.end(), 
valueLessThan );
 
 1169   QgsRangeList::const_iterator it = sortedRanges.constBegin();
 
 1170   if ( it == sortedRanges.constEnd() )
 
 1173   double prevMax = ( *it ).upperValue();
 
 1176   for ( ; it != sortedRanges.constEnd(); ++it )
 
 1181     prevMax = ( *it ).upperValue();
 
 1188   return QString::localeAwareCompare( r1.
label(), r2.
label() ) < 0;
 
 1198   if ( order == Qt::AscendingOrder )
 
 1220   QString methodId = methodIdFromMode( 
mode );
 
 1227   mClassificationMethod->setSymmetricMode( useSymmetricMode, mClassificationMethod->symmetryPoint(), mClassificationMethod->symmetryAstride() );
 
 1232   mClassificationMethod->setSymmetricMode( mClassificationMethod->symmetricModeEnabled(), symmetryPoint, mClassificationMethod->symmetryAstride() );
 
 1237   mClassificationMethod->setSymmetricMode( mClassificationMethod->symmetricModeEnabled(), mClassificationMethod->symmetryPoint(), astride );
 
 1242   std::unique_ptr< QgsGraduatedSymbolRenderer > r;
 
 1243   if ( renderer->
type() == QLatin1String( 
"graduatedSymbol" ) )
 
 1247   else if ( renderer->
type() == QLatin1String( 
"categorizedSymbol" ) )
 
 1250     if ( categorizedSymbolRenderer )
 
 1252       r = std::make_unique< QgsGraduatedSymbolRenderer >( QString(), 
QgsRangeList() );
 
 1262       r->setClassAttribute( categorizedSymbolRenderer->
classAttribute() );
 
 1265   else if ( renderer->
type() == QLatin1String( 
"pointDisplacement" ) || renderer->
type() == QLatin1String( 
"pointCluster" ) )
 
 1268     if ( pointDistanceRenderer )
 
 1271   else if ( renderer->
type() == QLatin1String( 
"invertedPolygonRenderer" ) )
 
 1274     if ( invertedPolygonRenderer )
 
 1283     r = std::make_unique< QgsGraduatedSymbolRenderer >( QString(), 
QgsRangeList() );
 
 1288       r->setSourceSymbol( 
symbols.at( 0 )->clone() );
 
 1292   r->setOrderBy( renderer->
orderBy() );
 
 1313       return QStringLiteral( 
"GraduatedColor" );
 
 1315       return QStringLiteral( 
"GraduatedSize" );
 
static QgsClassificationMethodRegistry * classificationMethodRegistry()
Returns the application's classification methods registry, used in graduated renderer.
QgsSymbol * sourceSymbol()
Returns the renderer's source symbol, which is the base symbol used for the each categories' symbol b...
QString classAttribute() const
Returns the class attribute for the renderer, which is the field name or expression string from the l...
QgsColorRamp * sourceColorRamp()
Returns the source color ramp, from which each categories' color is derived.
QgsClassificationCustom is a dummy implementation of QgsClassification which does not compute any bre...
static const QString METHOD_ID
QgsClassificationEqualInterval is an implementation of QgsClassificationMethod for equal intervals.
QgsClassificationMethod * method(const QString &id)
Returns a new instance of the method for the given id.
QgsClassificationMethod is an abstract class for implementations of classification methods.
static void makeBreaksSymmetric(QList< double > &breaks, double symmetryPoint, bool astride)
Remove the breaks that are above the existing opposite sign classes to keep colors symmetrically bala...
QList< QgsClassificationRange > classes(const QgsVectorLayer *layer, const QString &expression, int nclasses)
This will calculate the classes for a given layer to define the classes.
void setLabelTrimTrailingZeroes(bool trimTrailingZeroes)
Defines if the trailing 0 are trimmed in the label.
void setSymmetricMode(bool enabled, double symmetryPoint=0, bool symmetryAstride=false)
Defines if the symmetric mode is enables and configures its parameters.
ClassPosition
Defines the class position.
@ LowerBound
The class is at the lower bound.
@ UpperBound
The class is at the upper bound.
@ Inner
The class is not at a bound.
static QList< double > rangesToBreaks(const QList< QgsClassificationRange > &classes)
Transforms a list of classes to a list of breaks.
void setLabelFormat(const QString &format)
Defines the format of the labels for the classes, using %1 and %2 for the bounds.
static QgsClassificationMethod * create(const QDomElement &element, const QgsReadWriteContext &context)
Reads the DOM element and return a new classification method from it.
void setLabelPrecision(int labelPrecision)
Defines the precision for the formatting of the labels.
Abstract base class for color ramps.
virtual QgsColorRamp * clone() const =0
Creates a clone of the color ramp.
Object that keeps configuration of appearance of marker symbol's data-defined size in legend.
static QgsDataDefinedSizeLegend * readXml(const QDomElement &elem, const QgsReadWriteContext &context) SIP_FACTORY
Creates instance from given element and returns it (caller takes ownership). Returns nullptr on error...
void updateFromSymbolAndProperty(const QgsMarkerSymbol *symbol, const QgsProperty &ddSize)
Updates the list of classes, source symbol and title label from given symbol and property.
QgsLegendSymbolList legendSymbolList() const
Generates legend symbol items according to the configuration.
static QList< QgsExpressionContextScope * > globalProjectLayerScopes(const QgsMapLayer *layer)
Creates a list of three scopes: global, layer's project and layer.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
void appendScopes(const QList< QgsExpressionContextScope * > &scopes)
Appends a list of scopes to the end of the context.
Class for parsing and evaluation of expressions (formerly called "search strings").
bool prepare(const QgsExpressionContext *context)
Gets the expression ready for evaluation - find out column indexes.
bool hasParserError() const
Returns true if an error occurred when parsing the input expression.
QSet< QString > referencedColumns() const
Gets list of columns referenced by the expression.
bool needsGeometry() const
Returns true if the expression uses feature geometry for some computation.
virtual QgsFeatureRenderer * clone() const =0
Create a deep copy of this renderer.
virtual void stopRender(QgsRenderContext &context)
Must be called when a render cycle has finished, to allow the renderer to clean up.
QgsPaintEffect * mPaintEffect
void copyRendererData(QgsFeatureRenderer *destRenderer) const
Clones generic renderer data to another renderer.
bool orderByEnabled() const
Returns whether custom ordering will be applied before features are processed by this renderer.
static void convertSymbolRotation(QgsSymbol *symbol, const QString &field)
QgsFeatureRequest::OrderBy mOrderBy
virtual void startRender(QgsRenderContext &context, const QgsFields &fields)
Must be called when a new render cycle is started.
static void convertSymbolSizeScale(QgsSymbol *symbol, Qgis::ScaleMethod method, const QString &field)
QgsFeatureRequest::OrderBy orderBy() const
Gets the order in which features shall be processed by this renderer.
void CORE_EXPORT save(QDomElement &elem) const
Serialize to XML.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Container of fields for a vector layer.
int lookupField(const QString &fieldName) const
Looks up field's index from the field name.
GraduatedMethod mGraduatedMethod
QgsLegendSymbolList legendSymbolItems() const override
Returns a list of symbology items for the legend.
QgsSymbol * sourceSymbol()
Returns the renderer's source symbol, which is the base symbol used for the each classes' symbol befo...
QDomElement save(QDomDocument &doc, const QgsReadWriteContext &context) override
store renderer info to XML element
~QgsGraduatedSymbolRenderer() override
void updateSymbols(QgsSymbol *sym)
Update all the symbols but leave breaks and colors.
const QgsRendererRange * rangeForValue(double value) const
Returns the renderer range matching the provided value, or nullptr if no range matches the value.
QgsColorRamp * sourceColorRamp()
Returns the source color ramp, from which each classes' color is derived.
bool updateRangeSymbol(int rangeIndex, QgsSymbol *symbol)
void addBreak(double breakValue, bool updateSymbols=true)
Add a breakpoint by splitting existing classes so that the specified value becomes a break between tw...
Q_DECL_DEPRECATED void setAstride(bool astride)
Set if we want a central class astride the pivot value.
GraduatedMethod graduatedMethod() const
Returns the method used for graduation (either size or color)
void setClassificationMethod(QgsClassificationMethod *method)
Defines the classification method This will take ownership of the method.
static Q_DECL_DEPRECATED QList< double > calcEqualIntervalBreaks(double minimum, double maximum, int classes, bool useSymmetricMode, double symmetryPoint, bool astride)
Compute the equal interval classification.
QgsGraduatedSymbolRenderer * clone() const override
Create a deep copy of this renderer.
std::unique_ptr< QgsDataDefinedSizeLegend > mDataDefinedSizeLegend
static Q_DECL_DEPRECATED void makeBreaksSymmetric(QList< double > &breaks, double symmetryPoint, bool astride)
Remove the breaks that are above the existing opposite sign classes to keep colors symmetrically bala...
void startRender(QgsRenderContext &context, const QgsFields &fields) override
Must be called when a new render cycle is started.
double maxSymbolSize() const
Returns the max symbol size when graduated by size.
Q_DECL_DEPRECATED bool useSymmetricMode() const
Returns if we want to classify symmetric around a given value.
bool updateRangeLabel(int rangeIndex, const QString &label)
void addClass(QgsSymbol *symbol)
QgsClassificationMethod * classificationMethod() const
Returns the classification method.
QgsSymbol * originalSymbolForFeature(const QgsFeature &feature, QgsRenderContext &context) const override
Returns symbol for feature.
void sortByValue(Qt::SortOrder order=Qt::AscendingOrder)
void toSld(QDomDocument &doc, QDomElement &element, const QVariantMap &props=QVariantMap()) const override
used from subclasses to create SLD Rule elements following SLD v1.1 specs
static QString graduatedMethodStr(GraduatedMethod method)
void checkLegendSymbolItem(const QString &key, bool state=true) override
item in symbology was checked
std::unique_ptr< QgsSymbol > mSourceSymbol
void setLegendSymbolItem(const QString &key, QgsSymbol *symbol) override
Sets the symbol to be used for a legend symbol item.
static QgsFeatureRenderer * create(QDomElement &element, const QgsReadWriteContext &context)
create renderer from XML element
Q_DECL_DEPRECATED void setMode(Mode mode)
QSet< QString > legendKeysForFeature(const QgsFeature &feature, QgsRenderContext &context) const override
Returns legend keys matching a specified feature.
bool rangesOverlap() const
Tests whether classes assigned to the renderer have ranges which overlap.
std::shared_ptr< QgsClassificationMethod > mClassificationMethod
Q_DECL_DEPRECATED bool astride() const
Returns if we want to have a central class astride the pivot value.
Q_DECL_DEPRECATED void setLabelFormat(const QgsRendererRangeLabelFormat &labelFormat, bool updateRanges=false)
Set the label format used to generate default classification labels.
Q_DECL_DEPRECATED void updateClasses(QgsVectorLayer *vlayer, Mode mode, int nclasses, bool useSymmetricMode=false, double symmetryPoint=0.0, bool astride=false)
Recalculate classes for a layer.
QString dump() const override
Returns debug information about this renderer.
bool updateRangeUpperValue(int rangeIndex, double value)
QString legendKeyForValue(double value) const
Returns the matching legend key for a value.
void setSourceColorRamp(QgsColorRamp *ramp)
Sets the source color ramp.
void setSourceSymbol(QgsSymbol *sym)
Sets the source symbol for the renderer, which is the base symbol used for the each classes' symbol b...
bool legendSymbolItemChecked(const QString &key) override
items of symbology items in legend is checked
bool updateRangeLowerValue(int rangeIndex, double value)
void stopRender(QgsRenderContext &context) override
Must be called when a render cycle has finished, to allow the renderer to clean up.
static QgsGraduatedSymbolRenderer * convertFromRenderer(const QgsFeatureRenderer *renderer)
creates a QgsGraduatedSymbolRenderer from an existing renderer.
bool legendSymbolItemsCheckable() const override
items of symbology items in legend should be checkable
void moveClass(int from, int to)
Moves the category at index position from to index position to.
void sortByLabel(Qt::SortOrder order=Qt::AscendingOrder)
QSet< QString > usedAttributes(const QgsRenderContext &context) const override
Returns a list of attributes required by this renderer.
void updateRangeLabels()
Updates the labels of the ranges.
const QgsRangeList & ranges() const
bool updateRangeRenderState(int rangeIndex, bool render)
QgsSymbol * symbolForFeature(const QgsFeature &feature, QgsRenderContext &context) const override
To be overridden.
std::unique_ptr< QgsColorRamp > mSourceColorRamp
QgsSymbolList symbols(QgsRenderContext &context) const override
Returns list of symbols used by the renderer.
bool accept(QgsStyleEntityVisitorInterface *visitor) const override
Accepts the specified symbology visitor, causing it to visit all symbols associated with the renderer...
QgsDataDefinedSizeLegend * dataDefinedSizeLegend() const
Returns configuration of appearance of legend when using data-defined size for marker symbols.
void updateColorRamp(QgsColorRamp *ramp=nullptr)
Update the color ramp used.
Q_DECL_DEPRECATED Mode mode() const
void deleteClass(int idx)
QgsGraduatedSymbolRenderer(const QString &attrName=QString(), const QgsRangeList &ranges=QgsRangeList())
void setGraduatedMethod(GraduatedMethod method)
set the method used for graduation (either size or color)
double minSymbolSize() const
Returns the min symbol size when graduated by size.
bool filterNeedsGeometry() const override
Returns true if this renderer requires the geometry to apply the filter.
int mAttrNum
attribute index (derived from attribute name in startRender)
Q_DECL_DEPRECATED void setSymmetryPoint(double symmetryPoint)
Set the pivot point.
std::unique_ptr< QgsExpression > mExpression
void setSymbolSizes(double minSize, double maxSize)
set varying symbol size for classes
void calculateLabelPrecision(bool updateRanges=true)
Reset the label decimal places to a numberbased on the minimum class interval.
void setDataDefinedSizeLegend(QgsDataDefinedSizeLegend *settings)
Configures appearance of legend when renderer is configured to use data-defined size for marker symbo...
Q_DECL_DEPRECATED QgsRendererRangeLabelFormat labelFormat() const
Returns the label format used to generate default classification labels.
static Q_DECL_DEPRECATED QgsGraduatedSymbolRenderer * createRenderer(QgsVectorLayer *vlayer, const QString &attrName, int classes, Mode mode, QgsSymbol *symbol, QgsColorRamp *ramp, const QgsRendererRangeLabelFormat &legendFormat=QgsRendererRangeLabelFormat(), bool useSymmetricMode=false, double symmetryPoint=0.0, const QStringList &listForCboPrettyBreaks=QStringList(), bool astride=false)
Creates a new graduated renderer.
Q_DECL_DEPRECATED double symmetryPoint() const
Returns the pivot value for symmetric classification.
Q_DECL_DEPRECATED void setUseSymmetricMode(bool useSymmetricMode)
Set if we want to classify symmetric around a given value.
QgsSymbol * symbolForValue(double value) const
Gets the symbol which is used to represent value.
bool rangesHaveGaps() const
Tests whether classes assigned to the renderer have gaps between the ranges.
QgsInvertedPolygonRenderer is a polygon-only feature renderer used to display features inverted,...
The class stores information about one class/rule of a vector layer renderer in a unified way that ca...
Constrained random color ramp, which returns random colors based on preset parameters.
A line symbol type, for rendering LineString and MultiLineString geometries.
double width() const
Returns the estimated width for the whole symbol, which is the maximum width of all marker symbol lay...
A marker symbol type, for rendering Point and MultiPoint geometries.
double size() const
Returns the estimated size for the whole symbol, which is the maximum size of all marker symbol layer...
QgsProperty dataDefinedSize() const
Returns data defined size for whole symbol (including all symbol layers).
const QgsFeatureRenderer * embeddedRenderer() const override
Returns the current embedded renderer (subrenderer) for this feature renderer.
static bool isDefaultStack(QgsPaintEffect *effect)
Tests whether a paint effect matches the default effects stack.
virtual bool saveProperties(QDomDocument &doc, QDomElement &element) const
Saves the current state of the effect to a DOM element.
An abstract base class for distance based point renderers (e.g., clusterer and displacement renderers...
const QgsFeatureRenderer * embeddedRenderer() const override
Returns the current embedded renderer (subrenderer) for this feature renderer.
A store for object properties.
bool isActive() const
Returns whether the property is currently active.
Totally random color ramp.
The class is used as a container of context for various read/write operations on other objects.
Contains information about the context of a rendering operation.
double rendererScale() const
Returns the renderer map scale.
QgsExpressionContext & expressionContext()
Gets the expression context.
void setUpperValue(double upperValue)
void setSymbol(QgsSymbol *s)
QgsSymbol * symbol() const
void setLabel(const QString &label)
double upperValue() const
void setLowerValue(double lowerValue)
double lowerValue() const
A color ramp entity for QgsStyle databases.
An interface for classes which can visit style entity (e.g.
virtual bool visit(const QgsStyleEntityVisitorInterface::StyleLeaf &entity)
Called when the visitor will visit a style entity.
A symbol entity for QgsStyle databases.
static QgsColorRamp * loadColorRamp(QDomElement &element)
Creates a color ramp from the settings encoded in an XML element.
static Qgis::ScaleMethod decodeScaleMethod(const QString &str)
Decodes a symbol scale method from a string.
static QDomElement saveColorRamp(const QString &name, QgsColorRamp *ramp, QDomDocument &doc)
Encodes a color ramp's settings to an XML element.
static void clearSymbolMap(QgsSymbolMap &symbols)
static QgsSymbolMap loadSymbols(QDomElement &element, const QgsReadWriteContext &context)
Reads a collection of symbols from XML and returns them in a map. Caller is responsible for deleting ...
static QDomElement saveSymbols(QgsSymbolMap &symbols, const QString &tagName, QDomDocument &doc, const QgsReadWriteContext &context)
Writes a collection of symbols to XML with specified tagName for the top-level element.
Abstract base class for all rendered symbols.
static QgsSymbol * defaultSymbol(QgsWkbTypes::GeometryType geomType)
Returns a new default symbol for the specified geometry type.
QSet< QString > usedAttributes(const QgsRenderContext &context) const
Returns a list of attributes required to render this feature.
void setColor(const QColor &color)
Sets the color for the symbol.
virtual QgsSymbol * clone() const =0
Returns a deep copy of this symbol.
Represents a vector layer which manages a vector based data sets.
Q_INVOKABLE QgsWkbTypes::GeometryType geometryType() const
Returns point, line or polygon.
int ANALYSIS_EXPORT lower(int n, int i)
Lower function.
#define Q_NOWARN_DEPRECATED_POP
#define Q_NOWARN_DEPRECATED_PUSH
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
bool valueLessThan(const QgsRendererRange &r1, const QgsRendererRange &r2)
bool labelGreaterThan(const QgsRendererRange &r1, const QgsRendererRange &r2)
bool labelLessThan(const QgsRendererRange &r1, const QgsRendererRange &r2)
bool valueGreaterThan(const QgsRendererRange &r1, const QgsRendererRange &r2)
QList< QgsLegendSymbolItem > QgsLegendSymbolList
#define RENDERER_TAG_NAME
QMap< QString, QgsSymbol * > QgsSymbolMap
QList< QgsSymbol * > QgsSymbolList
QList< QgsRendererRange > QgsRangeList
Contains information relating to the style entity currently being visited.