1 /***************************************************************************
2 testqgsdiagram.cpp
3 --------------------------------------
4 Date : Sep 7 2012
5 Copyright : (C) 2012 by Matthias Kuhn
6 Email : matthias at opengis dot ch
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15 #include "qgstest.h"
16 #include <QObject>
17 #include <QString>
18 #include <QStringList>
19 #include <QApplication>
20 #include <QFileInfo>
21 #include <QDir>
22 #include <QDesktopServices>
23 #include <QPainter>
24
25 //qgis includes...
26 // #include <qgisapp.h>
27 #include "diagram/qgspiediagram.h"
28 #include "diagram/qgstextdiagram.h"
29 #include "diagram/qgsstackedbardiagram.h"
30 #include "diagram/qgshistogramdiagram.h"
31 #include "qgsdiagramrenderer.h"
32 #include "qgsmaplayer.h"
33 #include "qgsvectordataprovider.h"
34 #include "qgsvectorlayer.h"
35 #include "qgsapplication.h"
36 #include "qgsproviderregistry.h"
37 #include "qgsrenderer.h"
38 #include "qgssinglesymbolrenderer.h"
39 //qgis test includes
40 #include "qgsmultirenderchecker.h"
41 #include "qgspallabeling.h"
42 #include "qgsproject.h"
43 #include "qgsshadoweffect.h"
44
45 /**
46 * \ingroup UnitTests
47 * Unit tests for the diagram renderer
48 */
49 class TestQgsDiagram : public QObject
50 {
51 Q_OBJECT
52
53 public:
54 TestQgsDiagram() = default;
55
56 private:
57 bool mTestHasError = false ;
58 QgsMapSettings *mMapSettings = nullptr;
59 QgsVectorLayer *mPointsLayer = nullptr;
60 QString mTestDataDir;
61 QString mReport;
62
63 bool imageCheck( const QString &testType );
64
65 private slots:
66 // will be called before the first testfunction is executed.
initTestCase()67 void initTestCase()
68 {
69 mTestHasError = false;
70 QgsApplication::init();
71 QgsApplication::initQgis();
72 QgsApplication::showSettings();
73
74 mMapSettings = new QgsMapSettings();
75
76 //create some objects that will be used in all tests...
77
78 //
79 //create a non spatial layer that will be used in all tests...
80 //
81 QString myDataDir( TEST_DATA_DIR ); //defined in CmakeLists.txt
82 mTestDataDir = myDataDir + '/';
83
84 //
85 //create a point layer that will be used in all tests...
86 //
87 QString myPointsFileName = mTestDataDir + "points.shp";
88 QFileInfo myPointFileInfo( myPointsFileName );
89 mPointsLayer = new QgsVectorLayer( myPointFileInfo.filePath(),
90 myPointFileInfo.completeBaseName(), QStringLiteral( "ogr" ) );
91
92 //we don't want to render the points themselves, just the diagrams
93 QgsStringMap symbolProps;
94 symbolProps.insert( QStringLiteral( "color" ), QStringLiteral( "0,0,0,0" ) );
95 symbolProps.insert( QStringLiteral( "outline_style" ), QStringLiteral( "no" ) );
96 QgsMarkerSymbol *symbol = QgsMarkerSymbol::createSimple( symbolProps );
97 QgsSingleSymbolRenderer *symbolRenderer = new QgsSingleSymbolRenderer( symbol );
98 mPointsLayer->setRenderer( symbolRenderer );
99
100 // Create map composition to draw on
101 QgsProject::instance()->addMapLayer( mPointsLayer );
102 mMapSettings->setLayers( QList<QgsMapLayer *>() << mPointsLayer );
103
104 mReport += QLatin1String( "<h1>Diagram Tests</h1>\n" );
105 }
106
107 // will be called after the last testfunction was executed.
cleanupTestCase()108 void cleanupTestCase()
109 {
110 delete mMapSettings;
111 delete mPointsLayer;
112
113 QString myReportFile = QDir::tempPath() + "/qgistest.html";
114 QFile myFile( myReportFile );
115 if ( myFile.open( QIODevice::WriteOnly | QIODevice::Append ) )
116 {
117 QTextStream myQTextStream( &myFile );
118 myQTextStream << mReport;
119 myFile.close();
120 //QDesktopServices::openUrl( "file:///" + myReportFile );
121 }
122 QgsApplication::exitQgis();
123 }
124
125 // will be called before each testfunction is executed
init()126 void init()
127 {
128 mPointsLayer->setDiagramRenderer( nullptr );
129 QgsDiagramLayerSettings dls;
130 mPointsLayer->setDiagramLayerSettings( dls );
131 }
132
133 // will be called after every testfunction.
cleanup()134 void cleanup()
135 {
136
137 }
138
testPieDiagram()139 void testPieDiagram()
140 {
141 QgsDiagramSettings ds;
142 QColor col1 = Qt::red;
143 QColor col2 = Qt::yellow;
144 col1.setAlphaF( 0.5 );
145 col2.setAlphaF( 0.5 );
146 ds.categoryColors = QList<QColor>() << col1 << col2;
147 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Pilots\"" ) << QStringLiteral( "\"Cabin Crew\"" );
148 ds.minimumScale = -1;
149 ds.maximumScale = -1;
150 ds.minimumSize = 0;
151 ds.penColor = Qt::green;
152 ds.penWidth = .5;
153 ds.scaleByArea = true;
154 ds.sizeType = QgsUnitTypes::RenderMillimeters;
155 ds.size = QSizeF( 5, 5 );
156 ds.rotationOffset = 0;
157
158 QgsLinearlyInterpolatedDiagramRenderer *dr = new QgsLinearlyInterpolatedDiagramRenderer();
159 dr->setLowerValue( 0.0 );
160 dr->setLowerSize( QSizeF( 0.0, 0.0 ) );
161 dr->setUpperValue( 10 );
162 dr->setUpperSize( QSizeF( 40, 40 ) );
163 dr->setClassificationField( QStringLiteral( "Staff" ) );
164 dr->setDiagram( new QgsPieDiagram() );
165 dr->setDiagramSettings( ds );
166 mPointsLayer->setDiagramRenderer( dr );
167
168 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
169 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
170 dls.setShowAllDiagrams( true );
171 mPointsLayer->setDiagramLayerSettings( dls );
172
173 QVERIFY( imageCheck( "piediagram" ) );
174 }
175
testPaintEffect()176 void testPaintEffect()
177 {
178 QgsDiagramSettings ds;
179 QColor col1 = Qt::red;
180 QColor col2 = Qt::yellow;
181 col1.setAlphaF( 0.5 );
182 col2.setAlphaF( 0.5 );
183 ds.categoryColors = QList<QColor>() << col1 << col2;
184 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Pilots\"" ) << QStringLiteral( "\"Cabin Crew\"" );
185 ds.minimumScale = -1;
186 ds.maximumScale = -1;
187 ds.minimumSize = 0;
188 ds.penColor = Qt::green;
189 ds.penWidth = .5;
190 ds.scaleByArea = true;
191 ds.sizeType = QgsUnitTypes::RenderMillimeters;
192 ds.size = QSizeF( 5, 5 );
193 ds.rotationOffset = 0;
194 ds.setPaintEffect( new QgsDropShadowEffect() );
195
196 QgsLinearlyInterpolatedDiagramRenderer *dr = new QgsLinearlyInterpolatedDiagramRenderer();
197 dr->setLowerValue( 0.0 );
198 dr->setLowerSize( QSizeF( 0.0, 0.0 ) );
199 dr->setUpperValue( 10 );
200 dr->setUpperSize( QSizeF( 40, 40 ) );
201 dr->setClassificationField( QStringLiteral( "Staff" ) );
202 dr->setDiagram( new QgsPieDiagram() );
203 dr->setDiagramSettings( ds );
204 mPointsLayer->setDiagramRenderer( dr );
205
206 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
207 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
208 dls.setShowAllDiagrams( true );
209 mPointsLayer->setDiagramLayerSettings( dls );
210
211 QVERIFY( imageCheck( "diagram_effects" ) );
212 }
213
testHistogram()214 void testHistogram()
215 {
216 QgsDiagramSettings ds;
217 QColor col1 = Qt::red;
218 QColor col2 = Qt::yellow;
219 col1.setAlphaF( 0.5 );
220 col2.setAlphaF( 0.5 );
221 ds.categoryColors = QList<QColor>() << col1 << col2;
222 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Pilots\"" ) << QStringLiteral( "\"Cabin Crew\"" );
223 ds.minimumScale = -1;
224 ds.maximumScale = -1;
225 ds.minimumSize = 0;
226 ds.penColor = Qt::green;
227 ds.penWidth = .5;
228 ds.scaleByArea = true;
229 ds.sizeType = QgsUnitTypes::RenderMillimeters;
230 ds.size = QSizeF( 5, 5 );
231 ds.rotationOffset = 0;
232
233 QgsLinearlyInterpolatedDiagramRenderer *dr = new QgsLinearlyInterpolatedDiagramRenderer();
234 dr->setLowerValue( 0.0 );
235 dr->setLowerSize( QSizeF( 0.0, 0.0 ) );
236 dr->setUpperValue( 10 );
237 dr->setUpperSize( QSizeF( 40, 40 ) );
238 dr->setClassificationField( QStringLiteral( "Staff" ) );
239 dr->setDiagram( new QgsHistogramDiagram() );
240 dr->setDiagramSettings( ds );
241 mPointsLayer->setDiagramRenderer( dr );
242
243 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
244 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
245 dls.setShowAllDiagrams( true );
246 mPointsLayer->setDiagramLayerSettings( dls );
247
248 QVERIFY( imageCheck( "histogram" ) );
249 }
250
testHistogramSpacing()251 void testHistogramSpacing()
252 {
253 QgsDiagramSettings ds;
254 QColor col1 = Qt::red;
255 QColor col2 = Qt::yellow;
256 col1.setAlphaF( 0.5 );
257 col2.setAlphaF( 0.5 );
258 ds.categoryColors = QList<QColor>() << col1 << col2;
259 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Pilots\"" ) << QStringLiteral( "\"Cabin Crew\"" );
260 ds.minimumScale = -1;
261 ds.maximumScale = -1;
262 ds.minimumSize = 0;
263 ds.penColor = Qt::green;
264 ds.penWidth = .5;
265 ds.scaleByArea = true;
266 ds.sizeType = QgsUnitTypes::RenderMillimeters;
267 ds.size = QSizeF( 5, 5 );
268 ds.rotationOffset = 0;
269 ds.setSpacing( 17 );
270 ds.setSpacingUnit( QgsUnitTypes::RenderPoints );
271
272 QgsLinearlyInterpolatedDiagramRenderer *dr = new QgsLinearlyInterpolatedDiagramRenderer();
273 dr->setLowerValue( 0.0 );
274 dr->setLowerSize( QSizeF( 0.0, 0.0 ) );
275 dr->setUpperValue( 10 );
276 dr->setUpperSize( QSizeF( 40, 40 ) );
277 dr->setClassificationField( QStringLiteral( "Staff" ) );
278 dr->setDiagram( new QgsHistogramDiagram() );
279 dr->setDiagramSettings( ds );
280 mPointsLayer->setDiagramRenderer( dr );
281
282 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
283 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
284 dls.setShowAllDiagrams( true );
285 mPointsLayer->setDiagramLayerSettings( dls );
286
287 QVERIFY( imageCheck( "histogram_spacing" ) );
288 }
289
testHistogramAxis()290 void testHistogramAxis()
291 {
292 QgsDiagramSettings ds;
293 QColor col1 = Qt::red;
294 QColor col2 = Qt::yellow;
295 col1.setAlphaF( 0.5 );
296 col2.setAlphaF( 0.5 );
297 ds.categoryColors = QList<QColor>() << col1 << col2;
298 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Pilots\"" ) << QStringLiteral( "\"Cabin Crew\"" );
299 ds.minimumScale = -1;
300 ds.maximumScale = -1;
301 ds.minimumSize = 0;
302 ds.penColor = Qt::green;
303 ds.penWidth = .5;
304 ds.scaleByArea = true;
305 ds.sizeType = QgsUnitTypes::RenderMillimeters;
306 ds.size = QSizeF( 5, 5 );
307 ds.rotationOffset = 0;
308 ds.setShowAxis( true );
309
310 QgsStringMap props;
311 props.insert( QStringLiteral( "width" ), QStringLiteral( "2" ) );
312 props.insert( QStringLiteral( "color" ), QStringLiteral( "#ff00ff" ) );
313 ds.setAxisLineSymbol( QgsLineSymbol::createSimple( props ) );
314
315 QgsLinearlyInterpolatedDiagramRenderer *dr = new QgsLinearlyInterpolatedDiagramRenderer();
316 dr->setLowerValue( 0.0 );
317 dr->setLowerSize( QSizeF( 0.0, 0.0 ) );
318 dr->setUpperValue( 10 );
319 dr->setUpperSize( QSizeF( 40, 40 ) );
320 dr->setClassificationField( QStringLiteral( "Staff" ) );
321 dr->setDiagram( new QgsHistogramDiagram() );
322 dr->setDiagramSettings( ds );
323 mPointsLayer->setDiagramRenderer( dr );
324
325 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
326 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
327 dls.setShowAllDiagrams( true );
328 mPointsLayer->setDiagramLayerSettings( dls );
329
330 QVERIFY( imageCheck( "histogram_axis_top" ) );
331
332 ds.diagramOrientation = QgsDiagramSettings::Down;
333 dr->setDiagramSettings( ds );
334 QVERIFY( imageCheck( "histogram_axis_bottom" ) );
335
336 ds.diagramOrientation = QgsDiagramSettings::Left;
337 dr->setDiagramSettings( ds );
338 QVERIFY( imageCheck( "histogram_axis_left" ) );
339
340 ds.diagramOrientation = QgsDiagramSettings::Right;
341 dr->setDiagramSettings( ds );
342 QVERIFY( imageCheck( "histogram_axis_right" ) );
343 }
344
testHistogramOrientation()345 void testHistogramOrientation()
346 {
347 QgsDiagramSettings ds;
348 QColor col1 = Qt::red;
349 QColor col2 = Qt::yellow;
350 col1.setAlphaF( 0.5 );
351 col2.setAlphaF( 0.5 );
352 ds.categoryColors = QList<QColor>() << col1 << col2;
353 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Pilots\"" ) << QStringLiteral( "\"Cabin Crew\"" );
354 ds.minimumScale = -1;
355 ds.maximumScale = -1;
356 ds.minimumSize = 0;
357 ds.penColor = Qt::green;
358 ds.penWidth = .5;
359 ds.scaleByArea = true;
360 ds.sizeType = QgsUnitTypes::RenderMillimeters;
361 ds.size = QSizeF( 5, 5 );
362 ds.rotationOffset = 0;
363 ds.diagramOrientation = QgsDiagramSettings::Right;
364
365 QgsLinearlyInterpolatedDiagramRenderer *dr = new QgsLinearlyInterpolatedDiagramRenderer();
366 dr->setLowerValue( 0.0 );
367 dr->setLowerSize( QSizeF( 0.0, 0.0 ) );
368 dr->setUpperValue( 10 );
369 dr->setUpperSize( QSizeF( 40, 40 ) );
370 dr->setClassificationField( QStringLiteral( "Staff" ) );
371 dr->setDiagram( new QgsHistogramDiagram() );
372 dr->setDiagramSettings( ds );
373 mPointsLayer->setDiagramRenderer( dr );
374
375 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
376 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
377 dls.setShowAllDiagrams( true );
378 mPointsLayer->setDiagramLayerSettings( dls );
379
380 QVERIFY( imageCheck( "histogram_right" ) );
381
382 ds.diagramOrientation = QgsDiagramSettings::Left;
383 dr->setDiagramSettings( ds );
384 QVERIFY( imageCheck( "histogram_left" ) );
385
386 ds.diagramOrientation = QgsDiagramSettings::Down;
387 dr->setDiagramSettings( ds );
388 QVERIFY( imageCheck( "histogram_down" ) );
389
390 }
391
testStackedFixSize()392 void testStackedFixSize()
393 {
394 QgsDiagramSettings ds;
395 QColor col1 = Qt::red;
396 QColor col2 = Qt::yellow;
397 col1.setAlphaF( 0.5 );
398 col2.setAlphaF( 0.5 );
399 ds.categoryColors = QList<QColor>() << col1 << col2;
400 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Pilots\"" ) << QStringLiteral( "\"Cabin Crew\"" );
401 ds.minimumScale = -1;
402 ds.maximumScale = -1;
403 ds.minimumSize = 0;
404 ds.penColor = Qt::green;
405 ds.penWidth = .5;
406 ds.scaleByArea = true;
407 ds.sizeType = QgsUnitTypes::RenderMillimeters;
408 ds.size = QSizeF( 15, 15 );
409 ds.rotationOffset = 0;
410 ds.diagramOrientation = QgsDiagramSettings::Up;
411 ds.setSpacing( 3 );
412
413 QgsSingleCategoryDiagramRenderer *dr = new QgsSingleCategoryDiagramRenderer();
414 dr->setDiagram( new QgsStackedBarDiagram() );
415 dr->setDiagramSettings( ds );
416 mPointsLayer->setDiagramRenderer( dr );
417
418 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
419 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
420 dls.setShowAllDiagrams( true );
421 mPointsLayer->setDiagramLayerSettings( dls );
422 QVERIFY( imageCheck( "stacked_up" ) );
423
424 ds.diagramOrientation = QgsDiagramSettings::Right;
425 dr->setDiagramSettings( ds );
426 QVERIFY( imageCheck( "stacked_right" ) );
427
428 ds.diagramOrientation = QgsDiagramSettings::Left;
429 dr->setDiagramSettings( ds );
430 QVERIFY( imageCheck( "stacked_left" ) );
431
432 ds.diagramOrientation = QgsDiagramSettings::Down;
433 dr->setDiagramSettings( ds );
434 QVERIFY( imageCheck( "stacked_down" ) );
435
436 }
437
testStackedVaryingFixSize()438 void testStackedVaryingFixSize()
439 {
440 QgsDiagramSettings ds;
441 QColor col1 = Qt::red;
442 QColor col2 = Qt::yellow;
443 col1.setAlphaF( 0.5 );
444 col2.setAlphaF( 0.5 );
445 ds.categoryColors = QList<QColor>() << col1 << col2;
446 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Pilots\"" ) << QStringLiteral( "\"Cabin Crew\"" );
447 ds.minimumScale = -1;
448 ds.maximumScale = -1;
449 ds.minimumSize = 0;
450 ds.penColor = Qt::green;
451 ds.penWidth = .5;
452 ds.scaleByArea = true;
453 ds.sizeType = QgsUnitTypes::RenderMillimeters;
454 ds.size = QSizeF( 5, 5 );
455 ds.rotationOffset = 0;
456 ds.diagramOrientation = QgsDiagramSettings::Up;
457 ds.setSpacing( 3 );
458
459 QgsLinearlyInterpolatedDiagramRenderer *dr = new QgsLinearlyInterpolatedDiagramRenderer();
460 dr->setLowerValue( 0.0 );
461 dr->setLowerSize( QSizeF( 0.0, 0.0 ) );
462 dr->setUpperValue( 10 );
463 dr->setUpperSize( QSizeF( 40, 40 ) );
464 dr->setClassificationField( QStringLiteral( "Staff" ) );
465 dr->setDiagram( new QgsStackedBarDiagram() );
466 dr->setDiagramSettings( ds );
467 mPointsLayer->setDiagramRenderer( dr );
468
469 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
470 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
471 dls.setShowAllDiagrams( true );
472 mPointsLayer->setDiagramLayerSettings( dls );
473 QVERIFY( imageCheck( "stacked_varying_up" ) );
474
475 ds.diagramOrientation = QgsDiagramSettings::Right;
476 dr->setDiagramSettings( ds );
477 QVERIFY( imageCheck( "stacked_varying_right" ) );
478
479 ds.diagramOrientation = QgsDiagramSettings::Left;
480 dr->setDiagramSettings( ds );
481 QVERIFY( imageCheck( "stacked_varying_left" ) );
482
483 ds.diagramOrientation = QgsDiagramSettings::Down;
484 dr->setDiagramSettings( ds );
485 QVERIFY( imageCheck( "stacked_varying_down" ) );
486
487 }
488
testStackedAxis()489 void testStackedAxis()
490 {
491 QgsDiagramSettings ds;
492 QColor col1 = Qt::red;
493 QColor col2 = Qt::yellow;
494 col1.setAlphaF( 0.5 );
495 col2.setAlphaF( 0.5 );
496 ds.categoryColors = QList<QColor>() << col1 << col2;
497 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Pilots\"" ) << QStringLiteral( "\"Cabin Crew\"" );
498 ds.minimumScale = -1;
499 ds.maximumScale = -1;
500 ds.minimumSize = 0;
501 ds.penColor = Qt::green;
502 ds.penWidth = .5;
503 ds.scaleByArea = true;
504 ds.sizeType = QgsUnitTypes::RenderMillimeters;
505 ds.size = QSizeF( 5, 5 );
506 ds.rotationOffset = 0;
507 ds.setSpacing( 3 );
508 ds.setShowAxis( true );
509
510 QgsStringMap props;
511 props.insert( QStringLiteral( "width" ), QStringLiteral( "2" ) );
512 props.insert( QStringLiteral( "color" ), QStringLiteral( "#ff00ff" ) );
513 ds.setAxisLineSymbol( QgsLineSymbol::createSimple( props ) );
514
515 QgsLinearlyInterpolatedDiagramRenderer *dr = new QgsLinearlyInterpolatedDiagramRenderer();
516 dr->setLowerValue( 0.0 );
517 dr->setLowerSize( QSizeF( 0.0, 0.0 ) );
518 dr->setUpperValue( 10 );
519 dr->setUpperSize( QSizeF( 40, 40 ) );
520 dr->setClassificationField( QStringLiteral( "Staff" ) );
521 dr->setDiagram( new QgsStackedBarDiagram() );
522 dr->setDiagramSettings( ds );
523 mPointsLayer->setDiagramRenderer( dr );
524
525 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
526 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
527 dls.setShowAllDiagrams( true );
528 mPointsLayer->setDiagramLayerSettings( dls );
529
530 QVERIFY( imageCheck( "stacked_axis_up" ) );
531
532 ds.diagramOrientation = QgsDiagramSettings::Down;
533 dr->setDiagramSettings( ds );
534 QVERIFY( imageCheck( "stacked_axis_down" ) );
535
536 ds.diagramOrientation = QgsDiagramSettings::Left;
537 dr->setDiagramSettings( ds );
538 QVERIFY( imageCheck( "stacked_axis_left" ) );
539
540 ds.diagramOrientation = QgsDiagramSettings::Right;
541 dr->setDiagramSettings( ds );
542 QVERIFY( imageCheck( "stacked_axis_right" ) );
543 }
544
testStackedNegative()545 void testStackedNegative()
546 {
547 QgsDiagramSettings ds;
548 QColor col1 = Qt::red;
549 QColor col2 = Qt::yellow;
550 col1.setAlphaF( 0.5 );
551 col2.setAlphaF( 0.5 );
552 ds.categoryColors = QList<QColor>() << col1 << col2;
553 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Pilots\"" ) << QStringLiteral( "-\"Cabin Crew\"" );
554 ds.minimumScale = -1;
555 ds.maximumScale = -1;
556 ds.minimumSize = 0;
557 ds.penColor = Qt::green;
558 ds.penWidth = .5;
559 ds.scaleByArea = true;
560 ds.sizeType = QgsUnitTypes::RenderMillimeters;
561 ds.size = QSizeF( 5, 5 );
562 ds.rotationOffset = 0;
563 ds.setSpacing( 3 );
564 ds.setShowAxis( true );
565
566 QgsStringMap props;
567 props.insert( QStringLiteral( "width" ), QStringLiteral( "2" ) );
568 props.insert( QStringLiteral( "color" ), QStringLiteral( "#ff00ff" ) );
569 ds.setAxisLineSymbol( QgsLineSymbol::createSimple( props ) );
570
571 QgsLinearlyInterpolatedDiagramRenderer *dr = new QgsLinearlyInterpolatedDiagramRenderer();
572 dr->setLowerValue( 0.0 );
573 dr->setLowerSize( QSizeF( 0.0, 0.0 ) );
574 dr->setUpperValue( 10 );
575 dr->setUpperSize( QSizeF( 40, 40 ) );
576 dr->setClassificationField( QStringLiteral( "Staff" ) );
577 dr->setDiagram( new QgsStackedBarDiagram() );
578 dr->setDiagramSettings( ds );
579 mPointsLayer->setDiagramRenderer( dr );
580
581 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
582 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
583 dls.setShowAllDiagrams( true );
584 mPointsLayer->setDiagramLayerSettings( dls );
585
586 QVERIFY( imageCheck( "stacked_negative_up" ) );
587
588 ds.diagramOrientation = QgsDiagramSettings::Down;
589 dr->setDiagramSettings( ds );
590 QVERIFY( imageCheck( "stacked_negative_down" ) );
591
592 ds.diagramOrientation = QgsDiagramSettings::Left;
593 dr->setDiagramSettings( ds );
594 QVERIFY( imageCheck( "stacked_negative_left" ) );
595
596 ds.diagramOrientation = QgsDiagramSettings::Right;
597 dr->setDiagramSettings( ds );
598 QVERIFY( imageCheck( "stacked_negative_right" ) );
599 }
600
testPieDiagramExpression()601 void testPieDiagramExpression()
602 {
603 QgsDiagramSettings ds;
604 QColor col1 = Qt::red;
605 QColor col2 = Qt::yellow;
606 col1.setAlphaF( 0.5 );
607 col2.setAlphaF( 0.5 );
608 ds.categoryColors = QList<QColor>() << col1 << col2;
609 ds.categoryAttributes = QList<QString>() << QStringLiteral( "ln(Pilots + 1)" ) << QStringLiteral( "ln(\"Cabin Crew\" + 1)" );
610 ds.minimumScale = -1;
611 ds.maximumScale = -1;
612 ds.minimumSize = 0;
613 ds.penColor = Qt::green;
614 ds.penWidth = .5;
615 ds.scaleByArea = true;
616 ds.sizeType = QgsUnitTypes::RenderMillimeters;
617 ds.size = QSizeF( 5, 5 );
618 ds.rotationOffset = 0;
619
620 QgsLinearlyInterpolatedDiagramRenderer *dr = new QgsLinearlyInterpolatedDiagramRenderer();
621 dr->setLowerValue( 0.0 );
622 dr->setLowerSize( QSizeF( 0.0, 0.0 ) );
623 dr->setUpperValue( 10 );
624 dr->setUpperSize( QSizeF( 40, 40 ) );
625 dr->setClassificationAttributeIsExpression( true );
626 dr->setClassificationAttributeExpression( QStringLiteral( "ln(Staff + 1)" ) );
627 dr->setDiagram( new QgsPieDiagram() );
628 dr->setDiagramSettings( ds );
629
630 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
631 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
632 dls.setShowAllDiagrams( true );
633 // dls.setRenderer( dr );
634
635 mPointsLayer->setDiagramRenderer( dr );
636 mPointsLayer->setDiagramLayerSettings( dls );
637
638 QVERIFY( imageCheck( "piediagram_expression" ) );
639
640 mPointsLayer->setDiagramRenderer( nullptr );
641 }
642
testPieDiagramDirection()643 void testPieDiagramDirection()
644 {
645 QgsDiagramSettings ds;
646 QColor col1 = Qt::red;
647 QColor col2 = Qt::yellow;
648 col1.setAlphaF( 0.5 );
649 col2.setAlphaF( 0.5 );
650 ds.categoryColors = QList<QColor>() << col1 << col2;
651 ds.categoryAttributes = QList<QString>() << QStringLiteral( "ln(Pilots + 1)" ) << QStringLiteral( "ln(\"Cabin Crew\" + 1)" );
652 ds.minimumScale = -1;
653 ds.maximumScale = -1;
654 ds.minimumSize = 0;
655 ds.penColor = Qt::green;
656 ds.penWidth = .5;
657 ds.scaleByArea = true;
658 ds.sizeType = QgsUnitTypes::RenderMillimeters;
659 ds.size = QSizeF( 15, 15 );
660 ds.rotationOffset = 90;
661 ds.setDirection( QgsDiagramSettings::Clockwise );
662
663 QgsSingleCategoryDiagramRenderer *dr = new QgsSingleCategoryDiagramRenderer();
664 dr->setDiagram( new QgsPieDiagram() );
665 dr->setDiagramSettings( ds );
666
667 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
668 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
669 dls.setShowAllDiagrams( true );
670 // dls.setRenderer( dr );
671
672 mPointsLayer->setDiagramRenderer( dr );
673 mPointsLayer->setDiagramLayerSettings( dls );
674
675 QVERIFY( imageCheck( "piediagram_clockwise" ) );
676
677 mPointsLayer->setDiagramRenderer( nullptr );
678 }
679
testDataDefinedPosition()680 void testDataDefinedPosition()
681 {
682 QgsDiagramSettings ds;
683 QColor col1 = Qt::red;
684 QColor col2 = Qt::yellow;
685 col1.setAlphaF( 0.5 );
686 col2.setAlphaF( 0.5 );
687 ds.categoryColors = QList<QColor>() << col1 << col2;
688 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Pilots\"" ) << QStringLiteral( "\"Cabin Crew\"" );
689 ds.minimumScale = -1;
690 ds.maximumScale = -1;
691 ds.minimumSize = 0;
692 ds.penColor = Qt::green;
693 ds.penWidth = .5;
694 ds.scaleByArea = true;
695 ds.sizeType = QgsUnitTypes::RenderMillimeters;
696 ds.size = QSizeF( 15, 15 );
697 ds.rotationOffset = 0;
698
699 QgsSingleCategoryDiagramRenderer *dr = new QgsSingleCategoryDiagramRenderer();
700 dr->setDiagram( new QgsPieDiagram() );
701 dr->setDiagramSettings( ds );
702 mPointsLayer->setDiagramRenderer( dr );
703
704 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
705 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
706 dls.setShowAllDiagrams( true );
707
708 //Set data defined position
709 dls.dataDefinedProperties().setProperty( QgsDiagramLayerSettings::PositionX, QgsProperty::fromExpression( QStringLiteral( "$x + -5" ), true ) );
710 dls.dataDefinedProperties().setProperty( QgsDiagramLayerSettings::PositionY, QgsProperty::fromExpression( QStringLiteral( "$y + 5" ), true ) );
711
712 mPointsLayer->setDiagramLayerSettings( dls );
713
714 QVERIFY( imageCheck( "piediagram_datadefined_position" ) );
715 }
716
testDataDefinedStroke()717 void testDataDefinedStroke()
718 {
719 QgsDiagramSettings ds;
720 QColor col1 = Qt::red;
721 QColor col2 = Qt::yellow;
722 col1.setAlphaF( 0.5 );
723 col2.setAlphaF( 0.5 );
724 ds.categoryColors = QList<QColor>() << col1 << col2;
725 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Pilots\"" ) << QStringLiteral( "\"Cabin Crew\"" );
726 ds.minimumScale = -1;
727 ds.maximumScale = -1;
728 ds.minimumSize = 0;
729 ds.penColor = Qt::green;
730 ds.penWidth = .5;
731 ds.scaleByArea = true;
732 ds.sizeType = QgsUnitTypes::RenderMillimeters;
733 ds.size = QSizeF( 15, 15 );
734 ds.rotationOffset = 0;
735
736 QgsSingleCategoryDiagramRenderer *dr = new QgsSingleCategoryDiagramRenderer();
737 dr->setDiagram( new QgsPieDiagram() );
738 dr->setDiagramSettings( ds );
739 mPointsLayer->setDiagramRenderer( dr );
740
741 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
742 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
743 dls.setShowAllDiagrams( true );
744
745 //setup data defined stroke
746 dls.dataDefinedProperties().setProperty( QgsDiagramLayerSettings::StrokeColor, QgsProperty::fromExpression( QStringLiteral( "if(\"Pilots\">1,'0,0,0,255','255,0,0,255')" ), true ) );
747 dls.dataDefinedProperties().setProperty( QgsDiagramLayerSettings::StrokeWidth, QgsProperty::fromExpression( QStringLiteral( "\"Staff\" / 2.0" ), true ) );
748
749 mPointsLayer->setDiagramLayerSettings( dls );
750
751 QVERIFY( imageCheck( "piediagram_datadefined_outline" ) );
752 }
753
testDataDefinedStartAngle()754 void testDataDefinedStartAngle()
755 {
756 QgsDiagramSettings ds;
757 QColor col1 = Qt::red;
758 QColor col2 = Qt::yellow;
759 col1.setAlphaF( 0.5 );
760 col2.setAlphaF( 0.5 );
761 ds.categoryColors = QList<QColor>() << col1 << col2;
762 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Pilots\"" ) << QStringLiteral( "\"Cabin Crew\"" );
763 ds.minimumScale = -1;
764 ds.maximumScale = -1;
765 ds.minimumSize = 0;
766 ds.penColor = Qt::green;
767 ds.penWidth = .5;
768 ds.scaleByArea = true;
769 ds.sizeType = QgsUnitTypes::RenderMillimeters;
770 ds.size = QSizeF( 15, 15 );
771 ds.rotationOffset = 0;
772
773 QgsSingleCategoryDiagramRenderer *dr = new QgsSingleCategoryDiagramRenderer();
774 dr->setDiagram( new QgsPieDiagram() );
775 dr->setDiagramSettings( ds );
776 mPointsLayer->setDiagramRenderer( dr );
777
778 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
779 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
780 dls.setShowAllDiagrams( true );
781
782 //setup data defined start angle
783 dls.dataDefinedProperties().setProperty( QgsDiagramLayerSettings::StartAngle, QgsProperty::fromExpression( QStringLiteral( "360.0-\"Importance\"/20.0 * 360.0" ), true ) );
784
785 mPointsLayer->setDiagramLayerSettings( dls );
786
787 QVERIFY( imageCheck( "piediagram_datadefined_startangle" ) );
788 }
789
testDataDefinedDistance()790 void testDataDefinedDistance()
791 {
792 QgsDiagramSettings ds;
793 QColor col1 = Qt::red;
794 QColor col2 = Qt::yellow;
795 col1.setAlphaF( 0.5 );
796 col2.setAlphaF( 0.5 );
797 ds.categoryColors = QList<QColor>() << col1 << col2;
798 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Pilots\"" ) << QStringLiteral( "\"Cabin Crew\"" );
799 ds.minimumScale = -1;
800 ds.maximumScale = -1;
801 ds.minimumSize = 0;
802 ds.penColor = Qt::green;
803 ds.penWidth = .5;
804 ds.scaleByArea = true;
805 ds.sizeType = QgsUnitTypes::RenderMillimeters;
806 ds.size = QSizeF( 15, 15 );
807 ds.rotationOffset = 0;
808
809 QgsSingleCategoryDiagramRenderer *dr = new QgsSingleCategoryDiagramRenderer();
810 dr->setDiagram( new QgsPieDiagram() );
811 dr->setDiagramSettings( ds );
812 mPointsLayer->setDiagramRenderer( dr );
813
814 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
815 dls.setPlacement( QgsDiagramLayerSettings::AroundPoint );
816 dls.setShowAllDiagrams( true );
817
818 //setup data defined distance
819 dls.dataDefinedProperties().setProperty( QgsDiagramLayerSettings::Distance, QgsProperty::fromExpression( QStringLiteral( "\"Staff\"*2" ), true ) );
820
821 mPointsLayer->setDiagramLayerSettings( dls );
822
823 QVERIFY( imageCheck( "piediagram_datadefined_distance" ) );
824 }
825
testDataDefinedShow()826 void testDataDefinedShow()
827 {
828 QgsDiagramSettings ds;
829 QColor col1 = Qt::red;
830 QColor col2 = Qt::yellow;
831 col1.setAlphaF( 0.5 );
832 col2.setAlphaF( 0.5 );
833 ds.categoryColors = QList<QColor>() << col1 << col2;
834 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Pilots\"" ) << QStringLiteral( "\"Cabin Crew\"" );
835 ds.minimumScale = -1;
836 ds.maximumScale = -1;
837 ds.minimumSize = 0;
838 ds.penColor = Qt::green;
839 ds.penWidth = .5;
840 ds.scaleByArea = true;
841 ds.sizeType = QgsUnitTypes::RenderMillimeters;
842 ds.size = QSizeF( 15, 15 );
843 ds.rotationOffset = 0;
844
845 QgsSingleCategoryDiagramRenderer *dr = new QgsSingleCategoryDiagramRenderer();
846 dr->setDiagram( new QgsPieDiagram() );
847 dr->setDiagramSettings( ds );
848 mPointsLayer->setDiagramRenderer( dr );
849
850 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
851 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
852 dls.setShowAllDiagrams( true );
853
854 //setup data defined show
855 dls.dataDefinedProperties().setProperty( QgsDiagramLayerSettings::Show, QgsProperty::fromExpression( QStringLiteral( "\"Pilots\"=1" ), true ) );
856
857 mPointsLayer->setDiagramLayerSettings( dls );
858
859 QVERIFY( imageCheck( "piediagram_datadefined_show" ) );
860 }
861
testDataDefinedPriority()862 void testDataDefinedPriority()
863 {
864 QgsDiagramSettings ds;
865 QColor col1 = Qt::red;
866 QColor col2 = Qt::yellow;
867 col1.setAlphaF( 0.5 );
868 col2.setAlphaF( 0.5 );
869 ds.categoryColors = QList<QColor>() << col1 << col2;
870 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Pilots\"" ) << QStringLiteral( "\"Cabin Crew\"" );
871 ds.minimumScale = -1;
872 ds.maximumScale = -1;
873 ds.minimumSize = 0;
874 ds.penColor = Qt::green;
875 ds.penWidth = .5;
876 ds.scaleByArea = true;
877 ds.sizeType = QgsUnitTypes::RenderMillimeters;
878 ds.size = QSizeF( 50, 50 );
879 ds.rotationOffset = 0;
880
881 QgsSingleCategoryDiagramRenderer *dr = new QgsSingleCategoryDiagramRenderer();
882 dr->setDiagram( new QgsPieDiagram() );
883 dr->setDiagramSettings( ds );
884 mPointsLayer->setDiagramRenderer( dr );
885
886 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
887 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
888 dls.setShowAllDiagrams( false );
889
890 //setup data defined priority
891 dls.dataDefinedProperties().setProperty( QgsDiagramLayerSettings::Priority, QgsProperty::fromExpression( QStringLiteral( "\"importance\"/2" ), true ) );
892
893 mPointsLayer->setDiagramLayerSettings( dls );
894
895 QVERIFY( imageCheck( "piediagram_datadefined_priority" ) );
896 }
897
testDataDefinedZIndex()898 void testDataDefinedZIndex()
899 {
900 QgsDiagramSettings ds;
901 QColor col1 = Qt::red;
902 QColor col2 = Qt::yellow;
903 ds.categoryColors = QList<QColor>() << col1 << col2;
904 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Pilots\"" ) << QStringLiteral( "\"Cabin Crew\"" );
905 ds.minimumScale = -1;
906 ds.maximumScale = -1;
907 ds.minimumSize = 0;
908 ds.penColor = Qt::green;
909 ds.penWidth = .5;
910 ds.scaleByArea = true;
911 ds.sizeType = QgsUnitTypes::RenderMillimeters;
912 ds.size = QSizeF( 50, 50 );
913 ds.rotationOffset = 0;
914
915 QgsSingleCategoryDiagramRenderer *dr = new QgsSingleCategoryDiagramRenderer();
916 dr->setDiagram( new QgsPieDiagram() );
917 dr->setDiagramSettings( ds );
918 mPointsLayer->setDiagramRenderer( dr );
919
920 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
921 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
922 dls.setShowAllDiagrams( true );
923
924 //setup data defined z index
925 dls.dataDefinedProperties().setProperty( QgsDiagramLayerSettings::ZIndex, QgsProperty::fromExpression( QStringLiteral( "\"importance\"/2" ), true ) );
926
927 mPointsLayer->setDiagramLayerSettings( dls );
928
929 QVERIFY( imageCheck( "piediagram_datadefined_zindex" ) );
930 }
931
testDataDefinedAlwaysShow()932 void testDataDefinedAlwaysShow()
933 {
934 QgsDiagramSettings ds;
935 QColor col1 = Qt::red;
936 QColor col2 = Qt::yellow;
937 col1.setAlphaF( 0.5 );
938 col2.setAlphaF( 0.5 );
939 ds.categoryColors = QList<QColor>() << col1 << col2;
940 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Pilots\"" ) << QStringLiteral( "\"Cabin Crew\"" );
941 ds.minimumScale = -1;
942 ds.maximumScale = -1;
943 ds.minimumSize = 0;
944 ds.penColor = Qt::green;
945 ds.penWidth = .5;
946 ds.scaleByArea = true;
947 ds.sizeType = QgsUnitTypes::RenderMillimeters;
948 ds.size = QSizeF( 50, 50 );
949 ds.rotationOffset = 0;
950
951 QgsSingleCategoryDiagramRenderer *dr = new QgsSingleCategoryDiagramRenderer();
952 dr->setDiagram( new QgsPieDiagram() );
953 dr->setDiagramSettings( ds );
954 mPointsLayer->setDiagramRenderer( dr );
955
956 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
957 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
958 dls.setShowAllDiagrams( false );
959
960 //setup data defined priority (required to only show certain diagrams)
961 dls.dataDefinedProperties().setProperty( QgsDiagramLayerSettings::Priority, QgsProperty::fromExpression( QStringLiteral( "\"importance\"/2" ), true ) );
962 //setup data defined "always show"
963 dls.dataDefinedProperties().setProperty( QgsDiagramLayerSettings::AlwaysShow, QgsProperty::fromExpression( QStringLiteral( "\"Staff\">=6" ), true ) );
964
965
966 mPointsLayer->setDiagramLayerSettings( dls );
967
968 QVERIFY( imageCheck( "piediagram_datadefined_alwaysshow" ) );
969 }
970
971
testDataDefinedBackgroundColor()972 void testDataDefinedBackgroundColor()
973 {
974 QgsDiagramSettings ds;
975 QColor col1 = Qt::red;
976 QColor col2 = Qt::yellow;
977 //hide the text so we are just testing the background color
978 col1.setAlphaF( 0 );
979 col2.setAlphaF( 0 );
980 ds.categoryColors = QList<QColor>() << col1 << col2;
981 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Pilots\"" ) << QStringLiteral( "\"Cabin Crew\"" );
982 ds.minimumScale = -1;
983 ds.maximumScale = -1;
984 ds.minimumSize = 0;
985 ds.penColor = Qt::green;
986 ds.penWidth = .5;
987 ds.scaleByArea = true;
988 ds.sizeType = QgsUnitTypes::RenderMillimeters;
989 ds.size = QSizeF( 15, 15 );
990 ds.rotationOffset = 0;
991
992 QgsSingleCategoryDiagramRenderer *dr = new QgsSingleCategoryDiagramRenderer();
993 dr->setDiagram( new QgsTextDiagram() );
994 dr->setDiagramSettings( ds );
995 mPointsLayer->setDiagramRenderer( dr );
996
997 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
998 dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
999 dls.setShowAllDiagrams( true );
1000
1001 //setup data defined stroke
1002 dls.dataDefinedProperties().setProperty( QgsDiagramLayerSettings::BackgroundColor, QgsProperty::fromExpression( QStringLiteral( "if(\"Pilots\">1,'0,0,255,150','255,0,0,150')" ), true ) );
1003
1004 mPointsLayer->setDiagramLayerSettings( dls );
1005
1006 QVERIFY( imageCheck( "textdiagram_datadefined_background" ) );
1007 }
1008
testClipping()1009 void testClipping()
1010 {
1011 const QString filename = QStringLiteral( TEST_DATA_DIR ) + "/lines.shp";
1012 std::unique_ptr< QgsVectorLayer> vl2( new QgsVectorLayer( filename, QStringLiteral( "lines" ), QStringLiteral( "ogr" ) ) );
1013
1014 QgsStringMap props;
1015 props.insert( QStringLiteral( "outline_color" ), QStringLiteral( "#487bb6" ) );
1016 props.insert( QStringLiteral( "outline_width" ), QStringLiteral( "1" ) );
1017 std::unique_ptr< QgsLineSymbol > symbol( QgsLineSymbol::createSimple( props ) );
1018 vl2->setRenderer( new QgsSingleSymbolRenderer( symbol.release() ) );
1019
1020 QgsDiagramSettings ds;
1021 QColor col1 = Qt::red;
1022 QColor col2 = Qt::yellow;
1023 col1.setAlphaF( 0.5 );
1024 col2.setAlphaF( 0.5 );
1025 ds.categoryColors = QList<QColor>() << col1;
1026 ds.categoryAttributes = QList<QString>() << QStringLiteral( "\"Value\"" );
1027 ds.minimumScale = -1;
1028 ds.maximumScale = -1;
1029 ds.minimumSize = 0;
1030 ds.penColor = Qt::green;
1031 ds.penWidth = .5;
1032 ds.scaleByArea = true;
1033 ds.sizeType = QgsUnitTypes::RenderMillimeters;
1034 ds.size = QSizeF( 5, 5 );
1035 ds.rotationOffset = 0;
1036
1037 QgsSingleCategoryDiagramRenderer *dr = new QgsSingleCategoryDiagramRenderer();
1038 dr->setDiagram( new QgsPieDiagram() );
1039 dr->setDiagramSettings( ds );
1040 vl2->setDiagramRenderer( dr );
1041
1042 QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
1043 dls.setPlacement( QgsDiagramLayerSettings::Line );
1044 dls.setShowAllDiagrams( true );
1045 vl2->setDiagramLayerSettings( dls );
1046
1047 mMapSettings->setLayers( QList<QgsMapLayer *>() << vl2.get() );
1048
1049 QgsMapClippingRegion region1( QgsGeometry::fromWkt( "Polygon ((-92 45, -99 36, -94 29, -82 29, -81 45, -92 45))" ) );
1050 region1.setFeatureClip( QgsMapClippingRegion::FeatureClippingType::ClipToIntersection );
1051 mMapSettings->addClippingRegion( region1 );
1052
1053 QgsMapClippingRegion region2( QgsGeometry::fromWkt( "Polygon ((-85 36, -85 46, -107 47, -108 28, -85 28, -85 36))" ) );
1054 region2.setFeatureClip( QgsMapClippingRegion::FeatureClippingType::ClipPainterOnly );
1055 mMapSettings->addClippingRegion( region2 );
1056
1057 const bool res = imageCheck( QStringLiteral( "diagram_clipping" ) );
1058 mMapSettings->setClippingRegions( QList< QgsMapClippingRegion >() );
1059 mMapSettings->setLayers( QList<QgsMapLayer *>() << mPointsLayer );
1060
1061 QVERIFY( res );
1062 }
1063
1064
1065
1066 };
1067
imageCheck(const QString & testType)1068 bool TestQgsDiagram::imageCheck( const QString &testType )
1069 {
1070 //use the QgsRenderChecker test utility class to
1071 //ensure the rendered output matches our control image
1072
1073 QgsRectangle extent( -126, 23, -70, 47 );
1074 mMapSettings->setExtent( extent );
1075 mMapSettings->setFlag( QgsMapSettings::ForceVectorOutput );
1076 mMapSettings->setOutputDpi( 96 );
1077 QgsMultiRenderChecker checker;
1078 checker.setControlPathPrefix( QStringLiteral( "diagrams" ) );
1079 checker.setControlName( "expected_" + testType );
1080 checker.setMapSettings( *mMapSettings );
1081 checker.setColorTolerance( 15 );
1082 bool resultFlag = checker.runTest( testType, 200 );
1083 mReport += checker.report();
1084 return resultFlag;
1085 }
1086
1087 QGSTEST_MAIN( TestQgsDiagram )
1088 #include "testqgsdiagram.moc"
1089