25
25
// qgis includes...
26
26
// #include <qgisapp.h>
27
27
#include < diagram/qgspiediagram.h>
28
+ #include < diagram/qgstextdiagram.h>
28
29
#include < qgsdiagramrenderer.h>
29
30
#include < qgsmaplayer.h>
30
31
#include < qgsvectordataprovider.h>
31
32
#include < qgsvectorlayer.h>
32
33
#include < qgsapplication.h>
33
34
#include < qgsproviderregistry.h>
34
35
#include < qgsrenderer.h>
36
+ #include " qgssinglesymbolrenderer.h"
35
37
// qgis test includes
36
38
#include " qgsmultirenderchecker.h"
37
39
#include " qgspallabeling.h"
@@ -87,6 +89,14 @@ class TestQgsDiagram : public QObject
87
89
mPointsLayer = new QgsVectorLayer ( myPointFileInfo.filePath (),
88
90
myPointFileInfo.completeBaseName (), QStringLiteral ( " ogr" ) );
89
91
92
+ // we don't want to render the points themselves, just the diagrams
93
+ QgsStringMap symbolProps;
94
+ symbolProps.insert ( " color" , " 0,0,0,0" );
95
+ symbolProps.insert ( " outline_style" , " no" );
96
+ QgsMarkerSymbol* symbol = QgsMarkerSymbol::createSimple ( symbolProps );
97
+ QgsSingleSymbolRenderer* symbolRenderer = new QgsSingleSymbolRenderer ( symbol );
98
+ mPointsLayer ->setRenderer ( symbolRenderer );
99
+
90
100
// Create map composition to draw on
91
101
mMapSettings ->setLayers ( QList<QgsMapLayer*>() << mPointsLayer );
92
102
@@ -204,6 +214,118 @@ class TestQgsDiagram : public QObject
204
214
mPointsLayer ->setDiagramRenderer ( 0 );
205
215
}
206
216
217
+ void testDataDefinedPosition ()
218
+ {
219
+ QgsDiagramSettings ds;
220
+ QColor col1 = Qt::red;
221
+ QColor col2 = Qt::yellow;
222
+ col1.setAlphaF ( 0.5 );
223
+ col2.setAlphaF ( 0.5 );
224
+ ds.categoryColors = QList<QColor>() << col1 << col2;
225
+ ds.categoryAttributes = QList<QString>() << " \" Pilots\" " << " \" Cabin Crew\" " ;
226
+ ds.maxScaleDenominator = -1 ;
227
+ ds.minScaleDenominator = -1 ;
228
+ ds.minimumSize = 0 ;
229
+ ds.penColor = Qt::green;
230
+ ds.penWidth = .5 ;
231
+ ds.scaleByArea = true ;
232
+ ds.sizeType = QgsUnitTypes::RenderMillimeters;
233
+ ds.size = QSizeF ( 15 , 15 );
234
+ ds.angleOffset = 0 ;
235
+
236
+ QgsSingleCategoryDiagramRenderer *dr = new QgsSingleCategoryDiagramRenderer ();
237
+ dr->setDiagram ( new QgsPieDiagram () );
238
+ dr->setDiagramSettings ( ds );
239
+ mPointsLayer ->setDiagramRenderer ( dr );
240
+
241
+ QgsDiagramLayerSettings dls = QgsDiagramLayerSettings ();
242
+ dls.setPlacement ( QgsDiagramLayerSettings::OverPoint );
243
+ dls.setShowAllDiagrams ( true );
244
+
245
+ // Set data defined position
246
+ dls.properties ().setProperty ( QgsDiagramLayerSettings::PositionX, new QgsExpressionBasedProperty ( " $x + -5" , true ) );
247
+ dls.properties ().setProperty ( QgsDiagramLayerSettings::PositionY, new QgsExpressionBasedProperty ( " $y + 5" , true ) );
248
+
249
+ mPointsLayer ->setDiagramLayerSettings ( dls );
250
+
251
+ QVERIFY ( imageCheck ( " piediagram_datadefined_position" ) );
252
+ }
253
+
254
+ void testDataDefinedOutline ()
255
+ {
256
+ QgsDiagramSettings ds;
257
+ QColor col1 = Qt::red;
258
+ QColor col2 = Qt::yellow;
259
+ col1.setAlphaF ( 0.5 );
260
+ col2.setAlphaF ( 0.5 );
261
+ ds.categoryColors = QList<QColor>() << col1 << col2;
262
+ ds.categoryAttributes = QList<QString>() << " \" Pilots\" " << " \" Cabin Crew\" " ;
263
+ ds.maxScaleDenominator = -1 ;
264
+ ds.minScaleDenominator = -1 ;
265
+ ds.minimumSize = 0 ;
266
+ ds.penColor = Qt::green;
267
+ ds.penWidth = .5 ;
268
+ ds.scaleByArea = true ;
269
+ ds.sizeType = QgsUnitTypes::RenderMillimeters;
270
+ ds.size = QSizeF ( 15 , 15 );
271
+ ds.angleOffset = 0 ;
272
+
273
+ QgsSingleCategoryDiagramRenderer *dr = new QgsSingleCategoryDiagramRenderer ();
274
+ dr->setDiagram ( new QgsPieDiagram () );
275
+ dr->setDiagramSettings ( ds );
276
+ mPointsLayer ->setDiagramRenderer ( dr );
277
+
278
+ QgsDiagramLayerSettings dls = QgsDiagramLayerSettings ();
279
+ dls.setPlacement ( QgsDiagramLayerSettings::OverPoint );
280
+ dls.setShowAllDiagrams ( true );
281
+
282
+ // setup data defined outline
283
+ dls.properties ().setProperty ( QgsDiagramLayerSettings::OutlineColor, new QgsExpressionBasedProperty ( " if(\" Pilots\" >1,'0,0,0,255','255,0,0,255')" , true ) );
284
+ dls.properties ().setProperty ( QgsDiagramLayerSettings::OutlineWidth, new QgsExpressionBasedProperty ( " \" Staff\" / 2.0" , true ) );
285
+
286
+ mPointsLayer ->setDiagramLayerSettings ( dls );
287
+
288
+ QVERIFY ( imageCheck ( " piediagram_datadefined_outline" ) );
289
+ }
290
+
291
+
292
+ void testDataDefinedBackgroundColor ()
293
+ {
294
+ QgsDiagramSettings ds;
295
+ QColor col1 = Qt::red;
296
+ QColor col2 = Qt::yellow;
297
+ // hide the text so we are just testing the background color
298
+ col1.setAlphaF ( 0 );
299
+ col2.setAlphaF ( 0 );
300
+ ds.categoryColors = QList<QColor>() << col1 << col2;
301
+ ds.categoryAttributes = QList<QString>() << " \" Pilots\" " << " \" Cabin Crew\" " ;
302
+ ds.maxScaleDenominator = -1 ;
303
+ ds.minScaleDenominator = -1 ;
304
+ ds.minimumSize = 0 ;
305
+ ds.penColor = Qt::green;
306
+ ds.penWidth = .5 ;
307
+ ds.scaleByArea = true ;
308
+ ds.sizeType = QgsUnitTypes::RenderMillimeters;
309
+ ds.size = QSizeF ( 15 , 15 );
310
+ ds.angleOffset = 0 ;
311
+
312
+ QgsSingleCategoryDiagramRenderer *dr = new QgsSingleCategoryDiagramRenderer ();
313
+ dr->setDiagram ( new QgsTextDiagram () );
314
+ dr->setDiagramSettings ( ds );
315
+ mPointsLayer ->setDiagramRenderer ( dr );
316
+
317
+ QgsDiagramLayerSettings dls = QgsDiagramLayerSettings ();
318
+ dls.setPlacement ( QgsDiagramLayerSettings::OverPoint );
319
+ dls.setShowAllDiagrams ( true );
320
+
321
+ // setup data defined outline
322
+ dls.properties ().setProperty ( QgsDiagramLayerSettings::BackgroundColor, new QgsExpressionBasedProperty ( " if(\" Pilots\" >1,'0,0,255,150','255,0,0,150')" , true ) );
323
+
324
+ mPointsLayer ->setDiagramLayerSettings ( dls );
325
+
326
+ QVERIFY ( imageCheck ( " textdiagram_datadefined_background" ) );
327
+ }
328
+
207
329
};
208
330
209
331
bool TestQgsDiagram::imageCheck ( const QString& theTestType )
@@ -215,13 +337,14 @@ bool TestQgsDiagram::imageCheck( const QString& theTestType )
215
337
mMapSettings ->setExtent ( extent );
216
338
mMapSettings ->setFlag ( QgsMapSettings::ForceVectorOutput );
217
339
mMapSettings ->setOutputDpi ( 96 );
218
- QgsMultiRenderChecker myChecker;
219
- myChecker.setControlName ( " expected_" + theTestType );
220
- myChecker.setMapSettings ( *mMapSettings );
221
- myChecker.setColorTolerance ( 15 );
222
- bool myResultFlag = myChecker.runTest ( theTestType, 200 );
223
- mReport += myChecker.report ();
224
- return myResultFlag;
340
+ QgsMultiRenderChecker checker;
341
+ checker.setControlPathPrefix ( " diagrams" );
342
+ checker.setControlName ( " expected_" + theTestType );
343
+ checker.setMapSettings ( *mMapSettings );
344
+ checker.setColorTolerance ( 15 );
345
+ bool resultFlag = checker.runTest ( theTestType, 200 );
346
+ mReport += checker.report ();
347
+ return resultFlag;
225
348
}
226
349
227
350
QGSTEST_MAIN ( TestQgsDiagram )
0 commit comments