mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-15 00:04:00 -04:00
Add tests
This commit is contained in:
parent
ec99bd6240
commit
b68a9c3b81
@ -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: 4.2 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.4 KiB |
Loading…
x
Reference in New Issue
Block a user