@@ -445,16 +445,17 @@ void QgsVectorLayerRenderer::prepareDiagrams( QgsVectorLayer* layer, QStringList
445445
446446 mDiagrams = true ;
447447
448- QgsDiagramLayerSettings diagSettings = *layer->diagramLayerSettings ();
448+ const QgsDiagramRendererV2* diagRenderer = layer->diagramRenderer ();
449+ const QgsDiagramLayerSettings* diagSettings = layer->diagramLayerSettings ();
449450
450- mContext .labelingEngine ()->addDiagramLayer ( layer, & diagSettings );
451+ mContext .labelingEngine ()->addDiagramLayer ( layer, diagSettings ); // will make internal copy of diagSettings + initialize it
451452
452453 // add attributes needed by the diagram renderer
453- QList<QString> att = layer-> diagramRenderer () ->diagramAttributes ();
454+ QList<QString> att = diagRenderer ->diagramAttributes ();
454455 QList<QString>::const_iterator attIt = att.constBegin ();
455456 for ( ; attIt != att.constEnd (); ++attIt )
456457 {
457- QgsExpression* expression = layer-> diagramRenderer () ->diagram ()->getExpression ( *attIt, &mFields );
458+ QgsExpression* expression = diagRenderer ->diagram ()->getExpression ( *attIt, &mFields );
458459 QStringList columns = expression->referencedColumns ();
459460 QStringList::const_iterator columnsIterator = columns.constBegin ();
460461 for ( ; columnsIterator != columns.constEnd (); ++columnsIterator )
@@ -469,7 +470,7 @@ void QgsVectorLayerRenderer::prepareDiagrams( QgsVectorLayer* layer, QStringList
469470 {
470471 if ( linearlyInterpolatedDiagramRenderer->classificationAttributeIsExpression () )
471472 {
472- QgsExpression* expression = layer-> diagramRenderer () ->diagram ()->getExpression ( linearlyInterpolatedDiagramRenderer->classificationAttributeExpression (), &mFields );
473+ QgsExpression* expression = diagRenderer ->diagram ()->getExpression ( linearlyInterpolatedDiagramRenderer->classificationAttributeExpression (), &mFields );
473474 QStringList columns = expression->referencedColumns ();
474475 QStringList::const_iterator columnsIterator = columns.constBegin ();
475476 for ( ; columnsIterator != columns.constEnd (); ++columnsIterator )
@@ -487,8 +488,8 @@ void QgsVectorLayerRenderer::prepareDiagrams( QgsVectorLayer* layer, QStringList
487488 }
488489
489490 // and the ones needed for data defined diagram positions
490- if ( diagSettings. xPosColumn != -1 )
491- attributeNames << mFields .at ( diagSettings. xPosColumn ).name ();
492- if ( diagSettings. yPosColumn != -1 )
493- attributeNames << mFields .at ( diagSettings. yPosColumn ).name ();
491+ if ( diagSettings-> xPosColumn != -1 )
492+ attributeNames << mFields .at ( diagSettings-> xPosColumn ).name ();
493+ if ( diagSettings-> yPosColumn != -1 )
494+ attributeNames << mFields .at ( diagSettings-> yPosColumn ).name ();
494495}
0 commit comments