void TestQgsSvgCache::changeImage() { bool inCache; QgsSvgCache cache; // no minimum time between checks cache.mFileModifiedCheckTimeout = 0; //copy an image to the temp folder QString tempImagePath = QDir::tempPath() + "/svg_cache.svg"; QString originalImage = TEST_DATA_DIR + QStringLiteral( "/test_symbol_svg.svg" ); if ( QFileInfo::exists( tempImagePath ) ) QFile::remove( tempImagePath ); QFile::copy( originalImage, tempImagePath ); //render it through the cache QImage img = cache.svgAsImage( tempImagePath, 200, QColor( 0, 0, 0 ), QColor( 0, 0, 0 ), 1.0, 1.0, inCache ); QVERIFY( imageCheck( "svgcache_changed_before", img, 30 ) ); // wait a second so that modified time is different QElapsedTimer t; t.start(); while ( !t.hasExpired( 1000 ) ) {} //replace the image in the temp folder QString newImage = TEST_DATA_DIR + QStringLiteral( "/test_symbol_svg2.svg" ); QFile::remove( tempImagePath ); QFile::copy( newImage, tempImagePath ); //re-render it img = cache.svgAsImage( tempImagePath, 200, QColor( 0, 0, 0 ), QColor( 0, 0, 0 ), 1.0, 1.0, inCache ); QVERIFY( imageCheck( "svgcache_changed_after", img, 30 ) ); // repeat, with minimum time between checks QgsSvgCache cache2; QFile::remove( tempImagePath ); QFile::copy( originalImage, tempImagePath ); img = cache2.svgAsImage( tempImagePath, 200, QColor( 0, 0, 0 ), QColor( 0, 0, 0 ), 1.0, 1.0, inCache ); QVERIFY( imageCheck( "svgcache_changed_before", img, 30 ) ); // wait a second so that modified time is different t.restart(); while ( !t.hasExpired( 1000 ) ) {} //replace the image in the temp folder QFile::remove( tempImagePath ); QFile::copy( newImage, tempImagePath ); //re-render it - not enough time has elapsed between checks, so file modification time will NOT be rechecked and // existing cached image should be used img = cache2.svgAsImage( tempImagePath, 200, QColor( 0, 0, 0 ), QColor( 0, 0, 0 ), 1.0, 1.0, inCache ); QVERIFY( imageCheck( "svgcache_changed_before", img, 30 ) ); }
void testPieDiagramExpression() { QgsDiagramSettings ds; QColor col1 = Qt::red; QColor col2 = Qt::yellow; col1.setAlphaF( 0.5 ); col2.setAlphaF( 0.5 ); ds.categoryColors = QList<QColor>() << col1 << col2; ds.categoryAttributes = QList<QString>() << "ln(Pilots + 1)" << "ln(\"Cabin Crew\" + 1)"; ds.maxScaleDenominator = -1; ds.minScaleDenominator = -1; ds.minimumSize = 0; ds.penColor = Qt::green; ds.penWidth = .5; ds.scaleByArea = true; ds.sizeType = QgsUnitTypes::RenderMillimeters; ds.size = QSizeF( 5, 5 ); ds.angleOffset = 0; QgsLinearlyInterpolatedDiagramRenderer *dr = new QgsLinearlyInterpolatedDiagramRenderer(); dr->setLowerValue( 0.0 ); dr->setLowerSize( QSizeF( 0.0, 0.0 ) ); dr->setUpperValue( 10 ); dr->setUpperSize( QSizeF( 40, 40 ) ); dr->setClassificationAttributeIsExpression( true ); dr->setClassificationAttributeExpression( "ln(Staff + 1)" ); dr->setDiagram( new QgsPieDiagram() ); dr->setDiagramSettings( ds ); QgsDiagramLayerSettings dls = QgsDiagramLayerSettings(); dls.setPlacement( QgsDiagramLayerSettings::OverPoint ); dls.setShowAllDiagrams( true ); // dls.setRenderer( dr ); mPointsLayer->setDiagramRenderer( dr ); mPointsLayer->setDiagramLayerSettings( dls ); QVERIFY( imageCheck( "piediagram_expression" ) ); mPointsLayer->setDiagramRenderer( 0 ); }
void testPieDiagram() { QgsDiagramSettings ds; QColor col1 = Qt::red; QColor col2 = Qt::yellow; col1.setAlphaF( 0.5 ); col2.setAlphaF( 0.5 ); ds.categoryColors = QList<QColor>() << col1 << col2; ds.categoryAttributes = QList<QString>() << "\"Pilots\"" << "\"Cabin Crew\""; ds.maxScaleDenominator = -1; ds.minScaleDenominator = -1; ds.minimumSize = 0; ds.penColor = Qt::green; ds.penWidth = .5; ds.scaleByArea = true; ds.sizeType = QgsDiagramSettings::MM; ds.size = QSizeF( 5, 5 ); ds.angleOffset = 0; QgsLinearlyInterpolatedDiagramRenderer *dr = new QgsLinearlyInterpolatedDiagramRenderer(); dr->setLowerValue( 0.0 ); dr->setLowerSize( QSizeF( 0.0, 0.0 ) ); dr->setUpperValue( 10 ); dr->setUpperSize( QSizeF( 40, 40 ) ); dr->setClassificationAttribute( 5 ); // Staff dr->setDiagram( new QgsPieDiagram() ); dr->setDiagramSettings( ds ); mPointsLayer->setDiagramRenderer( dr ); QgsDiagramLayerSettings dls = QgsDiagramLayerSettings(); dls.placement = QgsDiagramLayerSettings::OverPoint; dls.showAll = true; mPointsLayer->setDiagramLayerSettings( dls ); QVERIFY( imageCheck( "piediagram" ) ); }