Add tests

This commit is contained in:
nirvn 2019-07-30 16:38:26 +07:00 committed by Mathieu Pellerin
parent ec99bd6240
commit b68a9c3b81
3 changed files with 128 additions and 0 deletions

View File

@ -138,6 +138,8 @@ class TestQgsCallout: public QObject
void calloutNoDrawToAllParts();
void calloutDrawToAllParts();
void calloutDataDefinedDrawToAllParts();
void calloutPointOnExterior();
void calloutDataDefinedAnchorPoint();
void manhattan();
void manhattanRotated();
void manhattanNoDrawToAllParts();
@ -1255,6 +1257,132 @@ void TestQgsCallout::calloutDataDefinedDrawToAllParts()
QVERIFY( imageCheck( "callout_data_defined_draw_to_all_parts_simple", img, 20 ) );
}
void TestQgsCallout::calloutPointOnExterior()
{
std::unique_ptr< QgsVectorLayer> vl2( new QgsVectorLayer( QStringLiteral( "Polygon?crs=epsg:3946&field=id:integer&field=labelx:integer&field=labely:integer" ), QStringLiteral( "vl" ), QStringLiteral( "memory" ) ) );
QgsFillSymbol *fill = static_cast< QgsFillSymbol * >( QgsSymbol::defaultSymbol( QgsWkbTypes::PolygonGeometry ) );
fill->setColor( QColor( 255, 0, 0 ) );
vl2->setRenderer( new QgsSingleSymbolRenderer( fill ) );
QgsFeature f;
f.setAttributes( QgsAttributes() << 1 << 189950 << 5000000 );
f.setGeometry( QgsGeometry::fromWkt( QStringLiteral( "Polygon ((190000 4999900, 190100 5000100, 190100 5000100, 190000 5000100, 190000 4999900 ))" ) ) );
QVERIFY( vl2->dataProvider()->addFeature( f ) );
QSize size( 640, 480 );
QgsMapSettings mapSettings;
mapSettings.setOutputSize( size );
mapSettings.setDestinationCrs( vl2->crs() );
mapSettings.setExtent( QgsRectangle( 189900, 4999800, 190200, 5000200 ) );
mapSettings.setLayers( QList<QgsMapLayer *>() << vl2.get() );
mapSettings.setOutputDpi( 96 );
QgsMapRendererSequentialJob job( mapSettings );
job.start();
job.waitForFinished();
QImage img = job.renderedImage();
QPainter p( &img );
QgsRenderContext context = QgsRenderContext::fromMapSettings( mapSettings );
context.setPainter( &p );
QgsPalLayerSettings settings;
settings.fieldName = QStringLiteral( "'X'" );
settings.isExpression = true;
settings.dataDefinedProperties().setProperty( QgsPalLayerSettings::PositionX, QgsProperty::fromField( QStringLiteral( "labelx" ) ) );
settings.dataDefinedProperties().setProperty( QgsPalLayerSettings::PositionY, QgsProperty::fromField( QStringLiteral( "labely" ) ) );
QgsTextFormat format;
format.setFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ).family() );
format.setSize( 12 );
format.setNamedStyle( QStringLiteral( "Bold" ) );
format.setColor( QColor( 200, 0, 200 ) );
settings.setFormat( format );
QgsSimpleLineCallout *callout = new QgsSimpleLineCallout();
callout->setEnabled( true );
callout->lineSymbol()->setWidth( 1 );
callout->setAnchorPoint( QgsCallout::PointOnExterior );
settings.setCallout( callout );
vl2->setLabeling( new QgsVectorLayerSimpleLabeling( settings ) ); // TODO: this should not be necessary!
vl2->setLabelsEnabled( true );
QgsLabelingEngine engine;
engine.setMapSettings( mapSettings );
engine.addProvider( new QgsVectorLayerLabelProvider( vl2.get(), QString(), true, &settings ) );
//engine.setFlags( QgsLabelingEngine::RenderOutlineLabels | QgsLabelingEngine::DrawLabelRectOnly );
engine.run( context );
p.end();
QVERIFY( imageCheck( "callout_point_on_exterior", img, 20 ) );
}
void TestQgsCallout::calloutDataDefinedAnchorPoint()
{
std::unique_ptr< QgsVectorLayer> vl2( new QgsVectorLayer( QStringLiteral( "Polygon?crs=epsg:3946&field=id:integer&field=labelx:integer&field=labely:integer" ), QStringLiteral( "vl" ), QStringLiteral( "memory" ) ) );
QgsFillSymbol *fill = static_cast< QgsFillSymbol * >( QgsSymbol::defaultSymbol( QgsWkbTypes::PolygonGeometry ) );
fill->setColor( QColor( 255, 0, 0 ) );
vl2->setRenderer( new QgsSingleSymbolRenderer( fill ) );
QgsFeature f;
f.setAttributes( QgsAttributes() << 1 << 189950 << 5000000 );
f.setGeometry( QgsGeometry::fromWkt( QStringLiteral( "Polygon ((190000 4999900, 190100 5000100, 190100 5000100, 190000 5000100, 190000 4999900 ))" ) ) );
QVERIFY( vl2->dataProvider()->addFeature( f ) );
QSize size( 640, 480 );
QgsMapSettings mapSettings;
mapSettings.setOutputSize( size );
mapSettings.setDestinationCrs( vl2->crs() );
mapSettings.setExtent( QgsRectangle( 189900, 4999800, 190200, 5000200 ) );
mapSettings.setLayers( QList<QgsMapLayer *>() << vl2.get() );
mapSettings.setOutputDpi( 96 );
QgsMapRendererSequentialJob job( mapSettings );
job.start();
job.waitForFinished();
QImage img = job.renderedImage();
QPainter p( &img );
QgsRenderContext context = QgsRenderContext::fromMapSettings( mapSettings );
context.setPainter( &p );
QgsPalLayerSettings settings;
settings.fieldName = QStringLiteral( "'X'" );
settings.isExpression = true;
settings.dataDefinedProperties().setProperty( QgsPalLayerSettings::PositionX, QgsProperty::fromField( QStringLiteral( "labelx" ) ) );
settings.dataDefinedProperties().setProperty( QgsPalLayerSettings::PositionY, QgsProperty::fromField( QStringLiteral( "labely" ) ) );
QgsTextFormat format;
format.setFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ).family() );
format.setSize( 12 );
format.setNamedStyle( QStringLiteral( "Bold" ) );
format.setColor( QColor( 200, 0, 200 ) );
settings.setFormat( format );
QgsSimpleLineCallout *callout = new QgsSimpleLineCallout();
callout->setEnabled( true );
callout->lineSymbol()->setWidth( 1 );
callout->dataDefinedProperties().setProperty( QgsCallout::AnchorPointPosition, QgsProperty::fromExpression( QStringLiteral( "'centroid'" ) ) );
settings.setCallout( callout );
vl2->setLabeling( new QgsVectorLayerSimpleLabeling( settings ) ); // TODO: this should not be necessary!
vl2->setLabelsEnabled( true );
QgsLabelingEngine engine;
engine.setMapSettings( mapSettings );
engine.addProvider( new QgsVectorLayerLabelProvider( vl2.get(), QString(), true, &settings ) );
//engine.setFlags( QgsLabelingEngine::RenderOutlineLabels | QgsLabelingEngine::DrawLabelRectOnly );
engine.run( context );
p.end();
QVERIFY( imageCheck( "callout_data_defined_anchor_point", img, 20 ) );
}
void TestQgsCallout::manhattan()
{
QSize size( 640, 480 );

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB