QgsVectorLayerRenderer::QgsVectorLayerRenderer( QgsVectorLayer *layer, QgsRenderContext &context ) : QgsMapLayerRenderer( layer->id() ) , mContext( context ) , mInterruptionChecker( qgis::make_unique< QgsVectorLayerRendererInterruptionChecker >( context ) ) , mLayer( layer ) , mFields( layer->fields() ) , mLabeling( false ) , mDiagrams( false ) { mSource = new QgsVectorLayerFeatureSource( layer ); mRenderer = layer->renderer() ? layer->renderer()->clone() : nullptr; mSelectedFeatureIds = layer->selectedFeatureIds(); mDrawVertexMarkers = nullptr != layer->editBuffer(); mGeometryType = layer->geometryType(); mFeatureBlendMode = layer->featureBlendMode(); mSimplifyMethod = layer->simplifyMethod(); mSimplifyGeometry = layer->simplifyDrawingCanbeApplied( mContext, QgsVectorSimplifyMethod::GeometrySimplification ); QgsSettings settings; mVertexMarkerOnlyForSelection = settings.value( QStringLiteral( "qgis/digitizing/marker_only_for_selected" ), true ).toBool(); QString markerTypeString = settings.value( QStringLiteral( "qgis/digitizing/marker_style" ), "Cross" ).toString(); if ( markerTypeString == QLatin1String( "Cross" ) ) { mVertexMarkerStyle = QgsSymbolLayerUtils::Cross; } else if ( markerTypeString == QLatin1String( "SemiTransparentCircle" ) ) { mVertexMarkerStyle = QgsSymbolLayerUtils::SemiTransparentCircle; } else { mVertexMarkerStyle = QgsSymbolLayerUtils::NoMarker; } mVertexMarkerSize = settings.value( QStringLiteral( "qgis/digitizing/marker_size_mm" ), 2.0 ).toDouble(); if ( !mRenderer ) return; QgsDebugMsgLevel( "rendering v2:\n " + mRenderer->dump(), 2 ); if ( mDrawVertexMarkers ) { // set editing vertex markers style mRenderer->setVertexMarkerAppearance( mVertexMarkerStyle, mVertexMarkerSize ); } mContext.expressionContext() << QgsExpressionContextUtils::layerScope( layer ); mAttrNames = mRenderer->usedAttributes( context ); //register label and diagram layer to the labeling engine prepareLabeling( layer, mAttrNames ); prepareDiagrams( layer, mAttrNames ); }
QgsVectorLayerRenderer::QgsVectorLayerRenderer( QgsVectorLayer* layer, QgsRenderContext& context ) : QgsMapLayerRenderer( layer->id() ) , mContext( context ) , mLayer( layer ) , mFields( layer->fields() ) , mRendererV2( nullptr ) , mCache( nullptr ) , mLabeling( false ) , mDiagrams( false ) , mLabelProvider( nullptr ) , mDiagramProvider( nullptr ) , mLayerTransparency( 0 ) { mSource = new QgsVectorLayerFeatureSource( layer ); mRendererV2 = layer->rendererV2() ? layer->rendererV2()->clone() : nullptr; mSelectedFeatureIds = layer->selectedFeaturesIds(); mDrawVertexMarkers = nullptr != layer->editBuffer(); mGeometryType = layer->geometryType(); mLayerTransparency = layer->layerTransparency(); mFeatureBlendMode = layer->featureBlendMode(); mSimplifyMethod = layer->simplifyMethod(); mSimplifyGeometry = layer->simplifyDrawingCanbeApplied( mContext, QgsVectorSimplifyMethod::GeometrySimplification ); QSettings settings; mVertexMarkerOnlyForSelection = settings.value( "/qgis/digitizing/marker_only_for_selected", false ).toBool(); QString markerTypeString = settings.value( "/qgis/digitizing/marker_style", "Cross" ).toString(); if ( markerTypeString == "Cross" ) { mVertexMarkerStyle = QgsVectorLayer::Cross; } else if ( markerTypeString == "SemiTransparentCircle" ) { mVertexMarkerStyle = QgsVectorLayer::SemiTransparentCircle; } else { mVertexMarkerStyle = QgsVectorLayer::NoMarker; } mVertexMarkerSize = settings.value( "/qgis/digitizing/marker_size", 3 ).toInt(); if ( !mRendererV2 ) return; QgsDebugMsg( "rendering v2:\n " + mRendererV2->dump() ); if ( mDrawVertexMarkers ) { // set editing vertex markers style mRendererV2->setVertexMarkerAppearance( mVertexMarkerStyle, mVertexMarkerSize ); } mContext.expressionContext() << QgsExpressionContextUtils::layerScope( layer ); mAttrNames = mRendererV2->usedAttributes(); //register label and diagram layer to the labeling engine prepareLabeling( layer, mAttrNames ); prepareDiagrams( layer, mAttrNames ); }