@@ -82,6 +82,34 @@ QgsTextDiagram::~QgsTextDiagram()
82
82
{
83
83
}
84
84
85
+ QSizeF QgsTextDiagram::diagramSize ( const QgsAttributeMap& attributes, const QgsRenderContext& c, const QgsDiagramSettings& s, const QgsDiagramInterpolationSettings& is )
86
+ {
87
+ QgsAttributeMap::const_iterator attIt = attributes.find ( is.classificationAttribute );
88
+ if ( attIt == attributes.constEnd () )
89
+ {
90
+ return QSizeF (); // zero size if attribute is missing
91
+ }
92
+ double value = attIt.value ().toDouble ();
93
+
94
+ // interpolate size
95
+ double ratio = ( value - is.lowerValue ) / ( is.upperValue - is.lowerValue );
96
+ QSizeF size = QSizeF ( is.upperSize .width () * ratio + is.lowerSize .width () * ( 1 - ratio ),
97
+ is.upperSize .height () * ratio + is.lowerSize .height () * ( 1 - ratio ) );
98
+
99
+ // Scale, if extension is smaller than the specified minimum
100
+ if ( size.width () <= s.minimumSize && size.height () <= s.minimumSize )
101
+ {
102
+ size.scale ( s.minimumSize , s.minimumSize , Qt::KeepAspectRatio );
103
+ }
104
+
105
+ return size;
106
+ }
107
+
108
+ QSizeF QgsTextDiagram::diagramSize ( const QgsAttributeMap& attributes, const QgsRenderContext& c, const QgsDiagramSettings& s )
109
+ {
110
+ return s.size ;
111
+ }
112
+
85
113
void QgsTextDiagram::renderDiagram ( const QgsAttributeMap& att, QgsRenderContext& c, const QgsDiagramSettings& s, const QPointF& position )
86
114
{
87
115
QPainter* p = c.painter ();
@@ -275,6 +303,34 @@ QgsPieDiagram::~QgsPieDiagram()
275
303
{
276
304
}
277
305
306
+ QSizeF QgsPieDiagram::diagramSize ( const QgsAttributeMap& attributes, const QgsRenderContext& c, const QgsDiagramSettings& s, const QgsDiagramInterpolationSettings& is )
307
+ {
308
+ QgsAttributeMap::const_iterator attIt = attributes.find ( is.classificationAttribute );
309
+ if ( attIt == attributes.constEnd () )
310
+ {
311
+ return QSizeF (); // zero size if attribute is missing
312
+ }
313
+ double value = attIt.value ().toDouble ();
314
+
315
+ // interpolate size
316
+ double ratio = ( value - is.lowerValue ) / ( is.upperValue - is.lowerValue );
317
+ QSizeF size = QSizeF ( is.upperSize .width () * ratio + is.lowerSize .width () * ( 1 - ratio ),
318
+ is.upperSize .height () * ratio + is.lowerSize .height () * ( 1 - ratio ) );
319
+
320
+ // Scale, if extension is smaller than the specified minimum
321
+ if ( size.width () <= s.minimumSize && size.height () <= s.minimumSize )
322
+ {
323
+ size.scale ( s.minimumSize , s.minimumSize , Qt::KeepAspectRatio );
324
+ }
325
+
326
+ return size;
327
+ }
328
+
329
+ QSizeF QgsPieDiagram::diagramSize ( const QgsAttributeMap& attributes, const QgsRenderContext& c, const QgsDiagramSettings& s )
330
+ {
331
+ return s.size ;
332
+ }
333
+
278
334
void QgsPieDiagram::renderDiagram ( const QgsAttributeMap& att, QgsRenderContext& c, const QgsDiagramSettings& s, const QPointF& position )
279
335
{
280
336
QPainter* p = c.painter ();
@@ -328,12 +384,81 @@ QgsHistogramDiagram::QgsHistogramDiagram()
328
384
{
329
385
mCategoryBrush .setStyle ( Qt::SolidPattern );
330
386
mPen .setStyle ( Qt::SolidLine );
387
+ mScaleFactor = 0 ;
331
388
}
332
389
333
390
QgsHistogramDiagram::~QgsHistogramDiagram ()
334
391
{
335
392
}
336
393
394
+ QSizeF QgsHistogramDiagram::diagramSize ( const QgsAttributeMap& attributes, const QgsRenderContext& c, const QgsDiagramSettings& s, const QgsDiagramInterpolationSettings& is )
395
+ {
396
+ QgsAttributeMap::const_iterator attIt = attributes.constBegin ();
397
+ if ( attIt == attributes.constEnd () )
398
+ {
399
+ return QSizeF (); // zero size if no attributes
400
+ }
401
+
402
+ double maxValue = attIt.value ().toDouble ();
403
+
404
+ for ( ; attIt != attributes.constEnd (); ++attIt )
405
+ {
406
+ maxValue = qMax ( attIt.value ().toDouble (), maxValue );
407
+ }
408
+
409
+ // Scale, if extension is smaller than the specified minimum
410
+ if ( maxValue < s.minimumSize )
411
+ {
412
+ maxValue = s.minimumSize ;
413
+ }
414
+
415
+ mScaleFactor = ( maxValue - is.lowerValue ) / ( is.upperValue - is.lowerValue );
416
+
417
+ switch ( s.diagramOrientation )
418
+ {
419
+ case QgsDiagramSettings::Up:
420
+ case QgsDiagramSettings::Down:
421
+ return QSizeF ( s.barWidth * attributes.size (), maxValue );
422
+
423
+ case QgsDiagramSettings::Right:
424
+ case QgsDiagramSettings::Left:
425
+ return QSizeF ( maxValue, s.barWidth * attributes.size () );
426
+ }
427
+
428
+ return QSizeF ();
429
+ }
430
+
431
+ QSizeF QgsHistogramDiagram::diagramSize ( const QgsAttributeMap& attributes, const QgsRenderContext& c, const QgsDiagramSettings& s )
432
+ {
433
+ QgsAttributeMap::const_iterator attIt = attributes.constBegin ();
434
+ if ( attIt == attributes.constEnd () )
435
+ {
436
+ return QSizeF (); // zero size if no attributes
437
+ }
438
+
439
+ double maxValue = attIt.value ().toDouble ();
440
+
441
+ for ( ; attIt != attributes.constEnd (); ++attIt )
442
+ {
443
+ maxValue = qMax ( attIt.value ().toDouble (), maxValue );
444
+ }
445
+
446
+ switch ( s.diagramOrientation )
447
+ {
448
+ case QgsDiagramSettings::Up:
449
+ case QgsDiagramSettings::Down:
450
+ mScaleFactor = maxValue / s.size .height ();
451
+ return QSizeF ( s.barWidth * attributes.size (), s.size .height () );
452
+
453
+ case QgsDiagramSettings::Right:
454
+ case QgsDiagramSettings::Left:
455
+ mScaleFactor = maxValue / s.size .width ();
456
+ return QSizeF ( s.size .width (), s.barWidth * attributes.size () );
457
+ }
458
+
459
+ return QSizeF ();
460
+ }
461
+
337
462
void QgsHistogramDiagram::renderDiagram ( const QgsAttributeMap& att, QgsRenderContext& c, const QgsDiagramSettings& s, const QPointF& position )
338
463
{
339
464
QPainter* p = c.painter ();
@@ -365,14 +490,14 @@ void QgsHistogramDiagram::renderDiagram( const QgsAttributeMap& att, QgsRenderCo
365
490
QList< QColor >::const_iterator colIt = s.categoryColors .constBegin ();
366
491
for ( ; valIt != values.constEnd (); ++valIt, ++colIt )
367
492
{
368
- double length = sizePainterUnits ( *valIt, s, c );
493
+ double length = sizePainterUnits ( *valIt * mScaleFactor , s, c );
369
494
370
495
mCategoryBrush .setColor ( *colIt );
371
496
p->setBrush ( mCategoryBrush );
372
497
373
498
switch ( s.diagramOrientation )
374
499
{
375
- case QgsDiagramSettings::Up:
500
+ case QgsDiagramSettings::Up:
376
501
p->drawRect ( baseX + currentOffset, baseY, scaledWidth, 0 - length );
377
502
break ;
378
503
@@ -391,4 +516,4 @@ void QgsHistogramDiagram::renderDiagram( const QgsAttributeMap& att, QgsRenderCo
391
516
392
517
currentOffset += scaledWidth;
393
518
}
394
- }
519
+ }
0 commit comments