QgsLegendSymbolListV2 QgsSingleSymbolRendererV2::legendSymbolItemsV2() const { QgsLegendSymbolListV2 lst; if ( mSymbol->type() == QgsSymbolV2::Marker ) { const QgsMarkerSymbolV2 * symbol = static_cast<const QgsMarkerSymbolV2 *>( mSymbol.data() ); QgsDataDefined sizeDD = symbol->dataDefinedSize(); if ( sizeDD.isActive() && sizeDD.useExpression() ) { QgsScaleExpression scaleExp( sizeDD.expressionString() ); if ( scaleExp.type() != QgsScaleExpression::Unknown ) { QgsLegendSymbolItemV2 title( nullptr, scaleExp.baseExpression(), QString() ); lst << title; Q_FOREACH ( double v, QgsSymbolLayerV2Utils::prettyBreaks( scaleExp.minValue(), scaleExp.maxValue(), 4 ) ) { QgsLegendSymbolItemV2 si( mSymbol.data(), QString::number( v ), QString() ); QgsMarkerSymbolV2 * s = static_cast<QgsMarkerSymbolV2 *>( si.symbol() ); s->setDataDefinedSize( 0 ); s->setSize( scaleExp.size( v ) ); lst << si; } return lst; } }
void QgsFeatureRendererV2::convertSymbolSizeScale( QgsSymbolV2 * symbol, QgsSymbolV2::ScaleMethod method, const QString & field ) { if ( symbol->type() == QgsSymbolV2::Marker ) { QgsMarkerSymbolV2 * s = static_cast<QgsMarkerSymbolV2 *>( symbol ); if ( QgsSymbolV2::ScaleArea == QgsSymbolV2::ScaleMethod( method ) ) { const QgsDataDefined dd( "coalesce(sqrt(" + QString::number( s->size() ) + " * (" + field + ")),0)" ); s->setDataDefinedSize( dd ); } else { const QgsDataDefined dd( "coalesce(" + QString::number( s->size() ) + " * (" + field + "),0)" ); s->setDataDefinedSize( dd ); } s->setScaleMethod( QgsSymbolV2::ScaleDiameter ); } else if ( symbol->type() == QgsSymbolV2::Line ) { QgsLineSymbolV2 * s = static_cast<QgsLineSymbolV2 *>( symbol ); const QgsDataDefined dd( "coalesce(" + QString::number( s->width() ) + " * (" + field + "),0)" ); s->setDataDefinedWidth( dd ); } }
QgsLegendSymbolListV2 QgsCategorizedSymbolRendererV2::legendSymbolItemsV2() const { QgsLegendSymbolListV2 lst; if ( mSourceSymbol.data() && mSourceSymbol->type() == QgsSymbolV2::Marker ) { // check that all symbols that have the same size expression QgsDataDefined ddSize; foreach ( QgsRendererCategoryV2 category, mCategories ) { const QgsMarkerSymbolV2 * symbol = static_cast<const QgsMarkerSymbolV2 *>( category.symbol() ); if ( !ddSize.hasDefaultValues() && symbol->dataDefinedSize() != ddSize ) { // no common size expression return QgsFeatureRendererV2::legendSymbolItemsV2(); } else { ddSize = symbol->dataDefinedSize(); } } if ( !ddSize.isActive() || !ddSize.useExpression() ) { return QgsFeatureRendererV2::legendSymbolItemsV2(); } QgsScaleExpression exp( ddSize.expressionString() ); if ( exp.type() != QgsScaleExpression::Unknown ) { QgsLegendSymbolItemV2 title( NULL, exp.baseExpression(), "" ); lst << title; foreach ( double v, QgsSymbolLayerV2Utils::prettyBreaks( exp.minValue(), exp.maxValue(), 4 ) ) { QgsLegendSymbolItemV2 si( mSourceSymbol.data(), QString::number( v ), "" ); QgsMarkerSymbolV2 * s = static_cast<QgsMarkerSymbolV2 *>( si.symbol() ); s->setDataDefinedSize( QgsDataDefined() ); s->setSize( exp.size( v ) ); lst << si; } // now list the categorized symbols const QgsLegendSymbolListV2 list2 = QgsFeatureRendererV2::legendSymbolItemsV2() ; foreach ( QgsLegendSymbolItemV2 item, list2 ) lst << item; return lst; }