QgsSymbolV2* QgsCategorizedSymbolRendererV2::originalSymbolForFeature( QgsFeature& feature ) { QgsAttributes attrs = feature.attributes(); QVariant value; if ( mAttrNum == -1 ) { Q_ASSERT( mExpression.data() ); value = mExpression->evaluate( &feature ); } else { value = attrs.value( mAttrNum ); } // find the right symbol for the category QgsSymbolV2 *symbol = symbolForValue( value ); if ( symbol == &sSkipRender ) return 0; if ( !symbol ) { // if no symbol found use default one return symbolForValue( QVariant( "" ) ); } return symbol; }
QgsSymbolV2* QgsCategorizedSymbolRendererV2::symbolForFeature( QgsFeature& feature ) { const QgsAttributeMap& attrMap = feature.attributeMap(); QgsAttributeMap::const_iterator ita = attrMap.find( mAttrNum ); if ( ita == attrMap.end() ) { QgsDebugMsg( "attribute '" + mAttrName + "' (index " + QString::number( mAttrNum ) + ") required by renderer not found" ); return NULL; } // find the right symbol for the category QgsSymbolV2* symbol = symbolForValue( *ita ); if ( symbol == NULL ) { // if no symbol found use default one return symbolForValue( QVariant( "" ) ); } if ( mRotationFieldIdx == -1 && mSizeScaleFieldIdx == -1 ) return symbol; // no data-defined rotation/scaling - just return the symbol // find out rotation, size scale double rotation = 0; double sizeScale = 1; if ( mRotationFieldIdx != -1 ) rotation = attrMap[mRotationFieldIdx].toDouble(); if ( mSizeScaleFieldIdx != -1 ) sizeScale = attrMap[mSizeScaleFieldIdx].toDouble(); // take a temporary symbol (or create it if doesn't exist) QgsSymbolV2* tempSymbol = mTempSymbols[ita->toString()]; // modify the temporary symbol and return it if ( tempSymbol->type() == QgsSymbolV2::Marker ) { QgsMarkerSymbolV2* markerSymbol = static_cast<QgsMarkerSymbolV2*>( tempSymbol ); if ( mRotationFieldIdx != -1 ) markerSymbol->setAngle( rotation ); if ( mSizeScaleFieldIdx != -1 ) markerSymbol->setSize( sizeScale * static_cast<QgsMarkerSymbolV2*>( symbol )->size() ); markerSymbol->setScaleMethod( mScaleMethod ); } else if ( tempSymbol->type() == QgsSymbolV2::Line ) { QgsLineSymbolV2* lineSymbol = static_cast<QgsLineSymbolV2*>( tempSymbol ); if ( mSizeScaleFieldIdx != -1 ) lineSymbol->setWidth( sizeScale * static_cast<QgsLineSymbolV2*>( symbol )->width() ); } return tempSymbol; }
QgsSymbolV2* QgsCategorizedSymbolRendererV2::symbolForFeature( QgsFeature& feature ) { const QgsAttributes& attrs = feature.attributes(); QVariant value; if ( mAttrNum == -1 ) { Q_ASSERT( mExpression.data() ); value = mExpression->evaluate( &feature ); } else { value = attrs[mAttrNum]; } // find the right symbol for the category QgsSymbolV2* symbol = symbolForValue( value ); if ( symbol == NULL ) { // if no symbol found use default one return symbolForValue( QVariant( "" ) ); } if ( !mRotation.data() && !mSizeScale.data() ) return symbol; // no data-defined rotation/scaling - just return the symbol // find out rotation, size scale const double rotation = mRotation.data() ? mRotation->evaluate( feature ).toDouble() : 0; const double sizeScale = mSizeScale.data() ? mSizeScale->evaluate( feature ).toDouble() : 1.; // take a temporary symbol (or create it if doesn't exist) QgsSymbolV2* tempSymbol = mTempSymbols[value.toString()]; // modify the temporary symbol and return it if ( tempSymbol->type() == QgsSymbolV2::Marker ) { QgsMarkerSymbolV2* markerSymbol = static_cast<QgsMarkerSymbolV2*>( tempSymbol ); if ( mRotation.data() ) markerSymbol->setAngle( rotation ); markerSymbol->setSize( sizeScale * static_cast<QgsMarkerSymbolV2*>( symbol )->size() ); markerSymbol->setScaleMethod( mScaleMethod ); } else if ( tempSymbol->type() == QgsSymbolV2::Line ) { QgsLineSymbolV2* lineSymbol = static_cast<QgsLineSymbolV2*>( tempSymbol ); lineSymbol->setWidth( sizeScale * static_cast<QgsLineSymbolV2*>( symbol )->width() ); } return tempSymbol; }
QgsSymbolV2* QgsCategorizedSymbolRendererV2::originalSymbolForFeature( QgsFeature& feature, QgsRenderContext &context ) { QVariant value = valueForFeature( feature, context ); // find the right symbol for the category QgsSymbolV2 *symbol = symbolForValue( value ); if ( symbol == skipRender() ) return nullptr; if ( !symbol ) { // if no symbol found use default one return symbolForValue( QVariant( "" ) ); } return symbol; }
QgsSymbol *QgsGraduatedSymbolRenderer::originalSymbolForFeature( QgsFeature &feature, QgsRenderContext &context ) { QVariant value = valueForFeature( feature, context ); // Null values should not be categorized if ( value.isNull() ) return nullptr; // find the right category return symbolForValue( value.toDouble() ); }
QgsSymbolV2* QgsGraduatedSymbolRendererV2::symbolForFeature( QgsFeature& feature ) { const QgsAttributes& attrs = feature.attributes(); if ( mAttrNum < 0 || mAttrNum >= attrs.count() ) { QgsDebugMsg( "attribute required by renderer not found: " + mAttrName + "(index " + QString::number( mAttrNum ) + ")" ); return NULL; } // Null values should not be categorized if ( attrs[mAttrNum].isNull() ) return NULL; // find the right category QgsSymbolV2* symbol = symbolForValue( attrs[mAttrNum].toDouble() ); if ( symbol == NULL ) return NULL; if ( mRotationFieldIdx == -1 && mSizeScaleFieldIdx == -1 ) return symbol; // no data-defined rotation/scaling - just return the symbol // find out rotation, size scale double rotation = 0; double sizeScale = 1; if ( mRotationFieldIdx != -1 ) rotation = attrs[mRotationFieldIdx].toDouble(); if ( mSizeScaleFieldIdx != -1 ) sizeScale = attrs[mSizeScaleFieldIdx].toDouble(); // take a temporary symbol (or create it if doesn't exist) QgsSymbolV2* tempSymbol = mTempSymbols[symbol]; // modify the temporary symbol and return it if ( tempSymbol->type() == QgsSymbolV2::Marker ) { QgsMarkerSymbolV2* markerSymbol = static_cast<QgsMarkerSymbolV2*>( tempSymbol ); if ( mRotationFieldIdx != -1 ) markerSymbol->setAngle( rotation ); if ( mSizeScaleFieldIdx != -1 ) markerSymbol->setSize( sizeScale * static_cast<QgsMarkerSymbolV2*>( symbol )->size() ); markerSymbol->setScaleMethod( mScaleMethod ); } else if ( tempSymbol->type() == QgsSymbolV2::Line ) { QgsLineSymbolV2* lineSymbol = static_cast<QgsLineSymbolV2*>( tempSymbol ); if ( mSizeScaleFieldIdx != -1 ) lineSymbol->setWidth( sizeScale * static_cast<QgsLineSymbolV2*>( symbol )->width() ); } return tempSymbol; }
QgsSymbolV2* QgsGraduatedSymbolRendererV2::symbolForFeature( QgsFeature& feature ) { const QgsAttributes& attrs = feature.attributes(); QVariant value; if ( mAttrNum < 0 || mAttrNum >= attrs.count() ) { value = mExpression->evaluate( &feature ); } else { value = attrs[mAttrNum]; } // Null values should not be categorized if ( value.isNull() ) return NULL; // find the right category QgsSymbolV2* symbol = symbolForValue( value.toDouble() ); if ( symbol == NULL ) return NULL; if ( !mRotation.data() && !mSizeScale.data() ) return symbol; // no data-defined rotation/scaling - just return the symbol // find out rotation, size scale const double rotation = mRotation.data() ? mRotation->evaluate( feature ).toDouble() : 0; const double sizeScale = mSizeScale.data() ? mSizeScale->evaluate( feature ).toDouble() : 1.; // take a temporary symbol (or create it if doesn't exist) QgsSymbolV2* tempSymbol = mTempSymbols[symbol]; // modify the temporary symbol and return it if ( tempSymbol->type() == QgsSymbolV2::Marker ) { QgsMarkerSymbolV2* markerSymbol = static_cast<QgsMarkerSymbolV2*>( tempSymbol ); if ( mRotation.data() ) markerSymbol->setAngle( rotation ); markerSymbol->setSize( sizeScale * static_cast<QgsMarkerSymbolV2*>( symbol )->size() ); markerSymbol->setScaleMethod( mScaleMethod ); } else if ( tempSymbol->type() == QgsSymbolV2::Line ) { QgsLineSymbolV2* lineSymbol = static_cast<QgsLineSymbolV2*>( tempSymbol ); lineSymbol->setWidth( sizeScale * static_cast<QgsLineSymbolV2*>( symbol )->width() ); } return tempSymbol; }
QgsSymbolV2* QgsGraduatedSymbolRendererV2::originalSymbolForFeature( QgsFeature& feature ) { QgsAttributes attrs = feature.attributes(); QVariant value; if ( mAttrNum < 0 || mAttrNum >= attrs.count() ) { value = mExpression->evaluate( &feature ); } else { value = attrs[mAttrNum]; } // Null values should not be categorized if ( value.isNull() ) return NULL; // find the right category return symbolForValue( value.toDouble() ); }