29 #include <QDomDocument> 30 #include <QDomElement> 143 if ( !
mSymbol.data() || props.value(
"attribute",
"" ).isEmpty() )
146 QString attrName = props[
"attribute" ];
148 QDomElement ruleElem = doc.createElement(
"se:Rule" );
149 element.appendChild( ruleElem );
151 QDomElement nameElem = doc.createElement(
"se:Name" );
152 nameElem.appendChild( doc.createTextNode(
mLabel ) );
153 ruleElem.appendChild( nameElem );
155 QDomElement descrElem = doc.createElement(
"se:Description" );
156 QDomElement titleElem = doc.createElement(
"se:Title" );
158 titleElem.appendChild( doc.createTextNode( !
mLabel.isEmpty() ?
mLabel : descrStr ) );
159 descrElem.appendChild( titleElem );
160 ruleElem.appendChild( descrElem );
163 QString filterFunc = QString(
"%1 > %2 AND %1 <= %3" )
164 .arg( attrName.replace(
"\"",
"\"\"" ) )
168 mSymbol->toSld( doc, ruleElem, props );
177 mFormat(
" %1 - %2 " ),
179 mTrimTrailingZeroes( false ),
182 mReTrailingZeroes(
"[.,]?0*$" ),
183 mReNegativeZero(
"^\\-0(?:[.,]0*)?$" )
207 return !( *
this == other );
217 while ( precision < 0 )
234 QString valueStr = QString::number( value,
'f',
mPrecision );
238 valueStr = valueStr.mid( 1 );
243 QString valueStr = QString::number( value *
mNumberScale,
'f', 0 );
244 if ( valueStr ==
"-0" )
246 if ( valueStr !=
"0" )
258 return legend.replace(
"%1", lowerStr ).replace(
"%2", upperStr );
263 mFormat = element.attribute(
"format",
264 element.attribute(
"prefix",
" " ) +
"%1" +
265 element.attribute(
"separator",
" - " ) +
"%2" +
266 element.attribute(
"suffix",
" " )
268 setPrecision( element.attribute(
"decimalplaces",
"4" ).toInt() );
274 element.setAttribute(
"format",
mFormat );
275 element.setAttribute(
"decimalplaces",
mPrecision );
283 , mAttrName( attrName )
286 , mInvertedColorRamp( false )
302 for ( QgsRangeList::iterator it =
mRanges.begin(); it !=
mRanges.end(); ++it )
304 if ( it->lowerValue() <= value && it->upperValue() >= value )
319 if ( symbol == NULL )
326 const double rotation =
mRotation.data() ?
mRotation->evaluate( feature ).toDouble() : 0;
337 markerSymbol->
setSize( sizeScale * static_cast<QgsMarkerSymbolV2*>( symbol )->size() );
343 lineSymbol->
setWidth( sizeScale * static_cast<QgsLineSymbolV2*>( symbol )->width() );
352 if ( mAttrNum < 0 || mAttrNum >= attrs.count() )
362 if ( value.isNull() )
382 QgsRangeList::iterator it =
mRanges.begin();
383 for ( ; it !=
mRanges.end(); ++it )
388 it->symbol()->startRender( context, &fields );
403 QgsRangeList::iterator it =
mRanges.begin();
404 for ( ; it !=
mRanges.end(); ++it )
409 it->symbol()->stopRender( context );
413 QHash<QgsSymbolV2*, QgsSymbolV2*>::iterator it2 =
mTempSymbols.begin();
416 it2.value()->stopRender( context );
424 QSet<QString> attributes;
439 QgsRangeList::const_iterator range_it =
mRanges.constBegin();
440 for ( ; range_it !=
mRanges.constEnd(); ++range_it )
448 return attributes.toList();
453 if ( rangeIndex < 0 || rangeIndex >=
mRanges.size() )
455 mRanges[rangeIndex].setSymbol( symbol );
461 if ( rangeIndex < 0 || rangeIndex >=
mRanges.size() )
463 mRanges[rangeIndex].setLabel( label );
469 if ( rangeIndex < 0 || rangeIndex >=
mRanges.size() )
480 if ( rangeIndex < 0 || rangeIndex >=
mRanges.size() )
491 if ( rangeIndex < 0 || rangeIndex >=
mRanges.size() )
493 mRanges[rangeIndex].setRenderState( value );
499 QString s = QString(
"GRADUATED: attr %1\n" ).arg(
mAttrName );
500 for (
int i = 0; i <
mRanges.count(); i++ )
529 props[
"angle" ] =
mRotation->expression();
534 for ( QgsRangeList::const_iterator it =
mRanges.constBegin(); it !=
mRanges.constEnd(); ++it )
537 it->toSld( doc, element, catProps );
544 for (
int i = 0; i <
mRanges.count(); i++ )
545 lst.append(
mRanges[i].symbol() );
557 double step = ( maximum - minimum ) / classes;
559 QList<double> breaks;
560 double value = minimum;
561 for (
int i = 0; i < classes; i++ )
564 breaks.append( value );
569 breaks[classes-1] = maximum;
587 QList<double> breaks;
590 if ( !values.count() )
593 int n = values.count();
594 double Xq = n > 0 ? values[0] : 0.0;
596 for (
int i = 1; i < classes; i++ )
600 double q = i / ( double ) classes;
601 double a = q * ( n - 1 );
602 int aa = ( int )( a );
605 Xq = ( 1 - r ) * values[aa] + r * values[aa+1];
610 breaks.append( values[ n-1 ] );
627 QList<double> breaks;
630 breaks.append( maximum );
634 int minimumCount = ( int ) classes / 3;
635 double shrink = 0.75;
636 double highBias = 1.5;
637 double adjustBias = 0.5 + 1.5 * highBias;
638 int divisions = classes;
643 double dx = maximum - minimum;
645 if ( dx == 0 && maximum == 0 )
653 cell = qMax( qAbs( minimum ), qAbs( maximum ) );
654 if ( adjustBias >= 1.5 * h + 0.5 )
656 U = 1 + ( 1.0 / ( 1 + h ) );
660 U = 1 + ( 1.5 / ( 1 + adjustBias ) );
662 small = dx < ( cell * U * qMax( 1, divisions ) * 1e-07 * 3.0 );
669 cell = 9 + cell / 10;
670 cell = cell * shrink;
672 if ( minimumCount > 1 )
674 cell = cell / minimumCount;
682 cell = cell / divisions;
685 if ( cell < 20 * 1e-07 )
690 double base = pow( 10.0, floor( log10( cell ) ) );
692 if (( 2 * base ) - cell < h *( cell - unit ) )
695 if (( 5 * base ) - cell < adjustBias *( cell - unit ) )
698 if (( 10.0 * base ) - cell < h *( cell - unit ) )
705 int start = floor( minimum / unit + 1e-07 );
706 int end = ceil( maximum / unit - 1e-07 );
709 while ( start * unit > minimum + ( 1e-07 * unit ) )
713 while ( end * unit < maximum - ( 1e-07 * unit ) )
717 QgsDebugMsg( QString(
"pretty classes: %1" ).arg( end ) );
721 int k = floor( 0.5 + end - start );
722 if ( k < minimumCount )
724 k = minimumCount - k;
728 start = start - k / 2 + k % 2;
732 start = start - k / 2;
733 end = end + k / 2 + k % 2;
736 double minimumBreak = start * unit;
738 int count = end - start;
740 for (
int i = 1; i < count + 1; i++ )
742 breaks.append( minimumBreak + i * unit );
745 if ( breaks.isEmpty() )
748 if ( breaks.first() < minimum )
752 if ( breaks.last() > maximum )
754 breaks[breaks.count()-1] = maximum;
761 static QList<double>
_calcStdDevBreaks( QList<double> values,
int classes, QList<double> &labels )
772 if ( !values.count() )
773 return QList<double>();
777 int n = values.count();
778 double minimum = values[0];
779 double maximum = values[0];
781 for (
int i = 0; i < n; i++ )
784 minimum = qMin( values[i], minimum );
785 maximum = qMax( values[i], maximum );
787 mean = mean / ( double ) n;
790 for (
int i = 0; i < n; i++ )
792 sd = values[i] - mean;
795 stdDev = sqrt( stdDev / n );
797 QList<double> breaks =
_calcPrettyBreaks(( minimum - mean ) / stdDev, ( maximum - mean ) / stdDev, classes );
798 for (
int i = 0; i < breaks.count(); i++ )
800 labels.append( breaks[i] );
801 breaks[i] = ( breaks[i] * stdDev ) + mean;
808 double minimum,
double maximum,
809 int maximumSize = 1000 )
821 if ( !values.count() )
822 return QList<double>();
826 return QList<double>() << maximum;
829 if ( classes >= values.size() )
834 QVector<double> sample;
837 if ( values.size() > maximumSize )
843 sample.resize( qMax( maximumSize, values.size() / 10 ) );
845 QgsDebugMsg( QString(
"natural breaks (jenks) sample size: %1" ).arg( sample.size() ) );
846 QgsDebugMsg( QString(
"values:%1" ).arg( values.size() ) );
848 sample[ 0 ] = minimum;
849 sample[ 1 ] = maximum;;
850 for (
int i = 2; i < sample.size(); i++ )
854 int j = floor( r / RAND_MAX * ( values.size() - 1 ) );
855 sample[ i ] = values[ j ];
860 sample = values.toVector();
863 int n = sample.size();
868 QVector< QVector<int> > matrixOne( n + 1 );
869 QVector< QVector<double> > matrixTwo( n + 1 );
871 for (
int i = 0; i <= n; i++ )
873 matrixOne[i].resize( classes + 1 );
874 matrixTwo[i].resize( classes + 1 );
877 for (
int i = 1; i <= classes; i++ )
881 matrixTwo[0][i] = 0.0;
882 for (
int j = 2; j <= n; j++ )
888 for (
int l = 2; l <= n; l++ )
896 for (
int m = 1; m <= l; m++ )
900 double val = sample[ i3 - 1 ];
906 v = s2 - ( s1 * s1 ) / (
double ) w;
910 for (
int j = 2; j <= classes; j++ )
912 if ( matrixTwo[l][j] >= v + matrixTwo[i4][j - 1] )
914 matrixOne[l][j] = i4;
915 matrixTwo[l][j] = v + matrixTwo[i4][j - 1];
924 QVector<double> breaks( classes );
925 breaks[classes-1] = sample[n-1];
927 for (
int j = classes, k = n; j >= 2; j-- )
929 int id = matrixOne[k][j] - 1;
930 breaks[j - 2] = sample[id];
931 k = matrixOne[k][j] - 1;
934 return breaks.toList();
962 QList<double> values;
963 QScopedPointer<QgsExpression> expression;
970 if ( expression->hasParserError() || !expression->prepare( vlayer->
pendingFields() ) )
976 if ( expression.isNull() )
979 lst = expression->referencedColumns();
982 .setFlags(( expression && expression->needsGeometry() ) ?
990 QVariant v = expression ? expression->evaluate( f ) : f.
attribute( attrNum );
992 values.append( v.toDouble() );
1010 QList<double> values;
1011 bool valuesLoaded =
false;
1017 if ( attrNum == -1 )
1020 if ( values.isEmpty() )
1024 minimum = values.first();
1025 maximum = values.last();
1026 valuesLoaded =
true;
1034 QgsDebugMsg( QString(
"min %1 // max %2" ).arg( minimum ).arg( maximum ) );
1035 QList<double> breaks;
1036 QList<double> labels;
1041 else if ( mode ==
Pretty )
1048 if ( !valuesLoaded )
1058 else if ( mode ==
Jenks )
1062 else if ( mode ==
StdDev )
1072 double lower, upper = minimum;
1079 for ( QList<double>::iterator it = breaks.begin(); it != breaks.end(); ++it, ++i )
1089 label =
"< " + QString::number( labels[i],
'f', 2 ) +
" Std Dev";
1091 else if ( i == labels.count() - 1 )
1093 label =
">= " + QString::number( labels[i-1],
'f', 2 ) +
" Std Dev";
1097 label = QString::number( labels[i-1],
'f', 2 ) +
" Std Dev" +
" - " + QString::number( labels[i],
'f', 2 ) +
" Std Dev";
1113 QDomElement symbolsElem = element.firstChildElement(
"symbols" );
1114 if ( symbolsElem.isNull() )
1117 QDomElement rangesElem = element.firstChildElement(
"ranges" );
1118 if ( rangesElem.isNull() )
1124 QDomElement rangeElem = rangesElem.firstChildElement();
1125 while ( !rangeElem.isNull() )
1127 if ( rangeElem.tagName() ==
"range" )
1129 double lowerValue = rangeElem.attribute(
"lower" ).toDouble();
1130 double upperValue = rangeElem.attribute(
"upper" ).toDouble();
1131 QString symbolName = rangeElem.attribute(
"symbol" );
1132 QString label = rangeElem.attribute(
"label" );
1133 bool render = rangeElem.attribute(
"render",
"true" ) !=
"false";
1134 if ( symbolMap.contains( symbolName ) )
1136 QgsSymbolV2* symbol = symbolMap.take( symbolName );
1137 ranges.append(
QgsRendererRangeV2( lowerValue, upperValue, symbol, label, render ) );
1140 rangeElem = rangeElem.nextSiblingElement();
1143 QString attrName = element.attribute(
"attr" );
1151 QDomElement sourceSymbolElem = element.firstChildElement(
"source-symbol" );
1152 if ( !sourceSymbolElem.isNull() )
1155 if ( sourceSymbolMap.contains(
"0" ) )
1163 QDomElement sourceColorRampElem = element.firstChildElement(
"colorramp" );
1164 if ( !sourceColorRampElem.isNull() && sourceColorRampElem.attribute(
"name" ) ==
"[source]" )
1167 QDomElement invertedColorRampElem = element.firstChildElement(
"invertedcolorramp" );
1168 if ( !invertedColorRampElem.isNull() )
1173 QDomElement modeElem = element.firstChildElement(
"mode" );
1174 if ( !modeElem.isNull() )
1176 QString modeString = modeElem.attribute(
"name" );
1177 if ( modeString ==
"equal" )
1179 else if ( modeString ==
"quantile" )
1181 else if ( modeString ==
"jenks" )
1183 else if ( modeString ==
"stddev" )
1185 else if ( modeString ==
"pretty" )
1189 QDomElement rotationElem = element.firstChildElement(
"rotation" );
1190 if ( !rotationElem.isNull() )
1193 QDomElement sizeScaleElem = element.firstChildElement(
"sizescale" );
1194 if ( !sizeScaleElem.isNull() )
1198 QDomElement labelFormatElem = element.firstChildElement(
"labelformat" );
1199 if ( ! labelFormatElem.isNull() )
1212 rendererElem.setAttribute(
"type",
"graduatedSymbol" );
1214 rendererElem.setAttribute(
"attr",
mAttrName );
1219 QDomElement rangesElem = doc.createElement(
"ranges" );
1220 QgsRangeList::const_iterator it =
mRanges.constBegin();
1221 for ( ; it !=
mRanges.constEnd(); ++it )
1224 QString symbolName = QString::number( i );
1225 symbols.insert( symbolName, range.
symbol() );
1227 QDomElement rangeElem = doc.createElement(
"range" );
1228 rangeElem.setAttribute(
"lower", QString::number( range.
lowerValue(),
'f' ) );
1229 rangeElem.setAttribute(
"upper", QString::number( range.
upperValue(),
'f' ) );
1230 rangeElem.setAttribute(
"symbol", symbolName );
1231 rangeElem.setAttribute(
"label", range.
label() );
1232 rangeElem.setAttribute(
"render", range.
renderState() ?
"true" :
"false" );
1233 rangesElem.appendChild( rangeElem );
1237 rendererElem.appendChild( rangesElem );
1241 rendererElem.appendChild( symbolsElem );
1249 rendererElem.appendChild( sourceSymbolElem );
1256 rendererElem.appendChild( colorRampElem );
1257 QDomElement invertedElem = doc.createElement(
"invertedcolorramp" );
1259 rendererElem.appendChild( invertedElem );
1265 modeString =
"equal";
1267 modeString =
"quantile";
1269 modeString =
"jenks";
1271 modeString =
"stddev";
1273 modeString =
"pretty";
1274 if ( !modeString.isEmpty() )
1276 QDomElement modeElem = doc.createElement(
"mode" );
1277 modeElem.setAttribute(
"name", modeString );
1278 rendererElem.appendChild( modeElem );
1281 QDomElement rotationElem = doc.createElement(
"rotation" );
1284 rendererElem.appendChild( rotationElem );
1286 QDomElement sizeScaleElem = doc.createElement(
"sizescale" );
1290 rendererElem.appendChild( sizeScaleElem );
1292 QDomElement labelFormatElem = doc.createElement(
"labelformat" );
1294 rendererElem.appendChild( labelFormatElem );
1296 return rendererElem;
1302 int count =
ranges().count();
1303 for (
int i = 0; i < count; i++ )
1307 lst << qMakePair( range.
label(), pix );
1314 Q_UNUSED( scaleDenominator );
1319 if ( rule.isEmpty() || range.
label() == rule )
1321 lst << qMakePair( range.
label(), range.
symbol() );
1364 colorValue = (
mRanges.count() > 1 ? ( double )(
mRanges.count() - i - 1 ) / (
mRanges.count() - 1 ) : 0 );
1366 colorValue = (
mRanges.count() > 1 ? ( double ) i / (
mRanges.count() - 1 ) : 0 );
1415 for ( QgsRangeList::iterator it =
mRanges.begin(); it !=
mRanges.end(); ++it )
1430 int index = key.toInt( &ok );
1431 if ( ok && index >= 0 && index <
mRanges.size() )
1432 return mRanges[ index ].renderState();
1440 int index = key.toInt( &ok );
1449 QString label =
"0.0 - 0.0";
1479 for ( QgsRangeList::iterator it =
mRanges.begin(); it !=
mRanges.end(); ++it )
1491 double minClassRange = 0.0;
1492 for ( QgsRangeList::iterator it =
mRanges.begin(); it !=
mRanges.end(); ++it )
1494 double range = it->upperValue() - it->lowerValue();
1497 if ( minClassRange == 0.0 || range < minClassRange )
1498 minClassRange = range;
1500 if ( minClassRange <= 0.0 )
1507 double nextDpMinRange = 0.0000000099;
1508 while ( ndp > 0 && nextDpMinRange < minClassRange )
1511 nextDpMinRange *= 10.0;
1519 if ( from < 0 || from >=
mRanges.size() || to < 0 || to >=
mRanges.size() )
1537 if ( order == Qt::AscendingOrder )
1549 return QString::localeAwareCompare( r1.
label(), r2.
label() ) < 0;
1559 if ( order == Qt::AscendingOrder )
1571 if ( renderer->
type() ==
"graduatedSymbol" )
1575 if ( renderer->
type() ==
"pointDisplacement" )
1578 if ( pointDisplacementRenderer )
1581 if ( renderer->
type() ==
"invertedPolygonRenderer" )
1584 if ( invertedPolygonRenderer )
1593 if ( symbols.size() > 0 )
1595 r->setSourceSymbol( symbols.at( 0 )->clone() );
QMap< QString, QgsSymbolV2 * > QgsSymbolV2Map
Class for parsing and evaluation of expressions (formerly called "search strings").
QList< QgsRendererRangeV2 > QgsRangeList
Wrapper for iterator of features from vector data provider or vector layer.
static QgsSymbolV2Map loadSymbols(QDomElement &element)
static QList< double > _calcJenksBreaks(QList< double > values, int classes, double minimum, double maximum, int maximumSize=1000)
#define RENDERER_TAG_NAME
virtual void toSld(QDomDocument &doc, QDomElement &element) const override
used from subclasses to create SLD Rule elements following SLD v1.1 specs
void setLowerValue(double lowerValue)
bool hasParserError() const
Returns true if an error occurred when parsing the input expression.
void setInvertedColorRamp(bool inverted)
QStringList referencedColumns() const
Get list of columns referenced by the expression.
void setRotationField(QString fieldOrExpression) override
sets rotation field of renderer (if supported by the renderer)
void setLabelFormat(const QgsRendererRangeV2LabelFormat &labelFormat, bool updateRanges=false)
Set the label format used to generate default classification labels.
bool labelLessThan(const QgsRendererRangeV2 &r1, const QgsRendererRangeV2 &r2)
static QgsGraduatedSymbolRendererV2 * convertFromRenderer(const QgsFeatureRendererV2 *renderer)
creates a QgsGraduatedSymbolRendererV2 from an existing renderer.
static QgsVectorColorRampV2 * loadColorRamp(QDomElement &element)
void updateClasses(QgsVectorLayer *vlayer, Mode mode, int nclasses)
Recalculate classes for a layer.
bool updateRangeLabel(int rangeIndex, QString label)
QList< QgsSymbolV2 * > QgsSymbolV2List
static QList< double > _calcPrettyBreaks(double minimum, double maximum, int classes)
void setLabel(QString label)
static QList< double > _calcStdDevBreaks(QList< double > values, int classes, QList< double > &labels)
virtual QString dump() const override
for debugging
QScopedPointer< QgsVectorColorRampV2 > mSourceColorRamp
QVariant maximumValue(int index)
Returns maximum value for an attribute column or invalid variant in case of error.
QSet< QString > usedAttributes() const
void updateSymbols(QgsSymbolV2 *sym)
Update all the symbols but leave breaks and colors.
int fieldNameIndex(const QString &fieldName) const
Look up field's index from name also looks up case-insensitive if there is no match otherwise...
double rendererScale() const
virtual QgsSymbolV2 * clone() const =0
QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest())
Query the provider for features specified in request.
virtual QgsFeatureRendererV2 * clone() const override
bool updateRangeRenderState(int rangeIndex, bool render)
void setSizeScaleField(QString fieldOrExpression)
QgsFeatureRequest & setSubsetOfAttributes(const QgsAttributeList &attrs)
Set a subset of attributes that will be fetched.
Container of fields for a vector layer.
virtual QgsSymbolV2 * originalSymbolForFeature(QgsFeature &feature) override
Return symbol for feature.
virtual ~QgsGraduatedSymbolRendererV2()
QHash< QgsSymbolV2 *, QgsSymbolV2 * > mTempSymbols
temporary symbols, used for data-defined rotation and scaling
void calculateLabelPrecision(bool updateRanges=true)
Reset the label decimal places to a numberbased on the minimum class interval.
virtual QgsLegendSymbolList legendSymbolItems(double scaleDenominator=-1, QString rule=QString()) override
return a list of item text / symbol
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
void setScaleMethod(QgsSymbolV2::ScaleMethod scaleMethod)
virtual QgsSymbolV2 * symbolForFeature(QgsFeature &feature) override
to be overridden
QVariant minimumValue(int index)
Returns minimum value for an attribute column or invalid variant in case of error.
QMap< QString, QString > QgsStringMap
virtual bool legendSymbolItemChecked(QString key) override
item in symbology was checked
QgsVectorColorRampV2 * sourceColorRamp()
void setWidth(double width)
void setRenderState(bool render)
QList< double > getDataValues(QgsVectorLayer *vlayer)
Evaluates the data expression and returns the list of values from the layer.
QScopedPointer< QgsSymbolV2 > mSymbol
virtual void stopRender(QgsRenderContext &context) override
double upperValue() const
virtual QgsSymbolV2List symbols() override
for symbol levels
QScopedPointer< QgsExpression > mExpression
void setColor(const QColor &color)
virtual QgsFeatureRendererV2 * clone() const =0
static QDomElement saveColorRamp(QString name, QgsVectorColorRampV2 *ramp, QDomDocument &doc)
QgsSymbolV2::ScaleMethod scaleMethod() const
void sortByLabel(Qt::SortOrder order=Qt::AscendingOrder)
static QList< double > _calcQuantileBreaks(QList< double > values, int classes)
QgsInvertedPolygonRenderer is a polygon-only feature renderer used to display features inverted...
void startRender(QgsRenderContext &context, const QgsFields *fields=0)
#define DEFAULT_SCALE_METHOD
virtual QgsVectorColorRampV2 * clone() const =0
void swap(QgsRendererRangeV2 &other)
static bool createFunctionElement(QDomDocument &doc, QDomElement &element, QString function)
static QDomElement saveSymbols(QgsSymbolV2Map &symbols, QString tagName, QDomDocument &doc)
QgsSymbolV2 * sourceSymbol()
QString rotationField() const override
return rotation field name (or empty string if not set or not supported by renderer) ...
QgsSymbolV2 * symbol() const
void setAngle(double angle)
This class wraps a request for features to a vector layer (or directly its vector data provider)...
void setSourceSymbol(QgsSymbolV2 *sym)
bool updateRangeLowerValue(int rangeIndex, double value)
const QgsAttributes & attributes() const
void setSize(double size)
void toSld(QDomDocument &doc, QDomElement &element, QgsStringMap props) const
QgsRendererRangeV2LabelFormat mLabelFormat
QGis::GeometryType geometryType() const
Returns point, line or polygon.
QgsGraduatedSymbolRendererV2(QString attrName=QString(), QgsRangeList ranges=QgsRangeList())
void setUpperValue(double upperValue)
virtual QDomElement save(QDomDocument &doc) override
store renderer info to XML element
bool operator<(const QgsRendererRangeV2 &other) const
QgsSymbolV2 * symbolForValue(double value)
bool labelGreaterThan(const QgsRendererRangeV2 &r1, const QgsRendererRangeV2 &r2)
QList< QPair< QString, QPixmap > > QgsLegendSymbologyList
QgsFeatureRendererV2 * embeddedRenderer() const
bool valueLessThan(const QgsRendererRangeV2 &r1, const QgsRendererRangeV2 &r2)
static QgsGraduatedSymbolRendererV2 * createRenderer(QgsVectorLayer *vlayer, QString attrName, int classes, Mode mode, QgsSymbolV2 *symbol, QgsVectorColorRampV2 *ramp, bool inverted=false, QgsRendererRangeV2LabelFormat legendFormat=QgsRendererRangeV2LabelFormat())
const QgsRendererRangeV2LabelFormat & labelFormat() const
Return the label format used to generate default classification labels.
void sortByValue(Qt::SortOrder order=Qt::AscendingOrder)
A renderer that automatically displaces points with the same position.
virtual bool legendSymbolItemsCheckable() const override
items of symbology items in legend should be checkable
void setUsingSymbolLevels(bool usingSymbolLevels)
static QList< double > _calcEqualIntervalBreaks(double minimum, double maximum, int classes)
int ANALYSIS_EXPORT lower(int n, int i)
lower function
void moveClass(int from, int to)
Moves the category at index position from to index position to.
Contains information about the context of a rendering operation.
const QgsFeatureRendererV2 * embeddedRenderer() const
int mAttrNum
attribute index (derived from attribute name in startRender)
QVariant attribute(const QString &name) const
Lookup attribute value from attribute name.
static QgsSymbolV2 * defaultSymbol(QGis::GeometryType geomType)
return new default symbol for specified geometry type
static QgsExpression * fieldOrExpressionToExpression(const QString &fieldOrExpression)
Return a new valid expression instance for given field or expression string.
double lowerValue() const
const QgsRangeList & ranges() const
QString sizeScaleField() const
static QString encodeScaleMethod(QgsSymbolV2::ScaleMethod scaleMethod)
static QString fieldOrExpressionFromExpression(QgsExpression *expression)
Return a field name if the whole expression is just a name of the field .
bool usingSymbolLevels() const
void setScaleMethodToSymbol(QgsSymbolV2 *symbol, int scaleMethod)
void setSymbol(QgsSymbolV2 *s)
bool updateRangeSymbol(int rangeIndex, QgsSymbolV2 *symbol)
void setSourceColorRamp(QgsVectorColorRampV2 *ramp)
QScopedPointer< QgsSymbolV2 > mSourceSymbol
void setRenderHints(int hints)
static void clearSymbolMap(QgsSymbolV2Map &symbols)
bool updateRangeUpperValue(int rangeIndex, double value)
static QgsSymbolV2::ScaleMethod decodeScaleMethod(QString str)
QScopedPointer< QgsExpression > mRotation
QgsSymbolV2::ScaleMethod mScaleMethod
static QgsFeatureRendererV2 * create(QDomElement &element)
create renderer from XML element
virtual QgsLegendSymbologyList legendSymbologyItems(QSize iconSize) override
return a list of symbology items for the legend
const QgsFields & pendingFields() const
returns field list in the to-be-committed state
virtual QList< QString > usedAttributes() override
QScopedPointer< QgsExpression > mSizeScale
bool nextFeature(QgsFeature &f)
QgsRendererRangeV2 & operator=(QgsRendererRangeV2 range)
Geometry is not required. It may still be returned if e.g. required for a filter condition.
static QPixmap symbolPreviewPixmap(QgsSymbolV2 *symbol, QSize size, QgsRenderContext *customContext=0)
Represents a vector layer which manages a vector based data sets.
int fieldNameIndex(const QString &fieldName) const
Returns the index of a field name or -1 if the field does not exist.
void deleteClass(int idx)
QList< QPair< QString, QgsSymbolV2 * > > QgsLegendSymbolList
virtual void checkLegendSymbolItem(QString key, bool state=true) override
item in symbology was checked
void setScaleMethod(QgsSymbolV2::ScaleMethod scaleMethod)
void updateColorRamp(QgsVectorColorRampV2 *ramp=0, bool inverted=false)
Update the color ramp used.
void addClass(QgsSymbolV2 *symbol)
bool valueGreaterThan(const QgsRendererRangeV2 &r1, const QgsRendererRangeV2 &r2)
virtual void startRender(QgsRenderContext &context, const QgsFields &fields) override