void QgsVectorLayerRenderer::drawRendererV2( QgsFeatureIterator& fit ) { QgsFeature fet; while ( fit.nextFeature( fet ) ) { try { if ( !fet.geometry() ) continue; // skip features without geometry if ( mContext.renderingStopped() ) { QgsDebugMsg( QString( "Drawing of vector layer %1 cancelled." ).arg( layerID() ) ); break; } bool sel = mContext.showSelection() && mSelectedFeatureIds.contains( fet.id() ); bool drawMarker = ( mDrawVertexMarkers && mContext.drawEditingInformation() && ( !mVertexMarkerOnlyForSelection || sel ) ); // render feature bool rendered = mRendererV2->renderFeature( fet, mContext, -1, sel, drawMarker ); if ( mCache ) { // Cache this for the use of (e.g.) modifying the feature's uncommitted geometry. mCache->cacheGeometry( fet.id(), *fet.geometry() ); } // labeling - register feature Q_UNUSED( rendered ); if ( rendered && mContext.labelingEngine() ) { if ( mLabeling ) { mContext.labelingEngine()->registerFeature( mLayerID, fet, mContext ); } if ( mDiagrams ) { mContext.labelingEngine()->registerDiagramFeature( mLayerID, fet, mContext ); } } } catch ( const QgsCsException &cse ) { Q_UNUSED( cse ); QgsDebugMsg( QString( "Failed to transform a point while drawing a feature with ID '%1'. Ignoring this feature. %2" ) .arg( fet.id() ).arg( cse.what() ) ); } } stopRendererV2( NULL ); }
void QgsVectorLayerRenderer::drawRendererV2( QgsFeatureIterator& fit ) { QgsExpressionContextScope* symbolScope = QgsExpressionContextUtils::updateSymbolScope( nullptr ); mContext.expressionContext().appendScope( symbolScope ); QgsFeature fet; while ( fit.nextFeature( fet ) ) { try { if ( !fet.constGeometry() ) continue; // skip features without geometry if ( mContext.renderingStopped() ) { QgsDebugMsg( QString( "Drawing of vector layer %1 cancelled." ).arg( layerID() ) ); break; } mContext.expressionContext().setFeature( fet ); bool sel = mContext.showSelection() && mSelectedFeatureIds.contains( fet.id() ); bool drawMarker = ( mDrawVertexMarkers && mContext.drawEditingInformation() && ( !mVertexMarkerOnlyForSelection || sel ) ); if ( mCache ) { // Cache this for the use of (e.g.) modifying the feature's uncommitted geometry. mCache->cacheGeometry( fet.id(), *fet.constGeometry() ); } // render feature bool rendered = mRendererV2->renderFeature( fet, mContext, -1, sel, drawMarker ); // labeling - register feature if ( rendered ) { if ( mContext.labelingEngine() ) { if ( mLabeling ) { mContext.labelingEngine()->registerFeature( mLayerID, fet, mContext ); } if ( mDiagrams ) { mContext.labelingEngine()->registerDiagramFeature( mLayerID, fet, mContext ); } } // new labeling engine if ( mContext.labelingEngineV2() ) { QScopedPointer<QgsGeometry> obstacleGeometry; QgsSymbolV2List symbols = mRendererV2->originalSymbolsForFeature( fet, mContext ); if ( !symbols.isEmpty() && fet.constGeometry()->type() == QGis::Point ) { obstacleGeometry.reset( QgsVectorLayerLabelProvider::getPointObstacleGeometry( fet, mContext, symbols ) ); } if ( !symbols.isEmpty() ) { QgsExpressionContextUtils::updateSymbolScope( symbols.at( 0 ), symbolScope ); } if ( mLabelProvider ) { mLabelProvider->registerFeature( fet, mContext, obstacleGeometry.data() ); } if ( mDiagramProvider ) { mDiagramProvider->registerFeature( fet, mContext, obstacleGeometry.data() ); } } } } catch ( const QgsCsException &cse ) { Q_UNUSED( cse ); QgsDebugMsg( QString( "Failed to transform a point while drawing a feature with ID '%1'. Ignoring this feature. %2" ) .arg( fet.id() ).arg( cse.what() ) ); } } mContext.expressionContext().popScope(); stopRendererV2( nullptr ); }
void QgsComposerLayerItem::setDefaultStyle( double scaleDenominator, const QString& rule ) { // set default style according to number of symbols QgsVectorLayer* vLayer = qobject_cast<QgsVectorLayer*>( QgsMapLayerRegistry::instance()->mapLayer( layerID() ) ); if ( vLayer ) { QgsFeatureRendererV2* renderer = vLayer->rendererV2(); if ( renderer ) { QPair<QString, QgsSymbolV2*> symbolItem = renderer->legendSymbolItems( scaleDenominator, rule ).value( 0 ); if ( renderer->legendSymbolItems( scaleDenominator, rule ).size() > 1 || !symbolItem.first.isEmpty() ) { setStyle( QgsComposerLegendStyle::Subgroup ); } else { // Hide title by default for single symbol setStyle( QgsComposerLegendStyle::Hidden ); } } } }