@@ -52,6 +52,7 @@ class TestQgsLabelingEngine : public QObject
52
52
void testRegisterFeatureUnprojectible ();
53
53
void testRotateHidePartial ();
54
54
void testParallelLabelSmallFeature ();
55
+ void testAdjacentParts ();
55
56
56
57
private:
57
58
QgsVectorLayer *vl = nullptr ;
@@ -805,5 +806,56 @@ void TestQgsLabelingEngine::testParallelLabelSmallFeature()
805
806
// QVERIFY( imageCheck( "label_rotate_hide_partial", img, 20 ) );
806
807
}
807
808
809
+ void TestQgsLabelingEngine::testAdjacentParts ()
810
+ {
811
+ // test combination of map rotation with reprojected layer
812
+ QgsPalLayerSettings settings;
813
+ setDefaultLabelParams ( settings );
814
+
815
+ QgsTextFormat format = settings.format ();
816
+ format.setSize ( 20 );
817
+ format.setColor ( QColor ( 0 , 0 , 0 ) );
818
+ settings.setFormat ( format );
819
+
820
+ settings.fieldName = QStringLiteral ( " 'X'" );
821
+ settings.isExpression = true ;
822
+ settings.placement = QgsPalLayerSettings::OverPoint;
823
+ settings.labelPerPart = true ;
824
+
825
+ std::unique_ptr< QgsVectorLayer> vl2 ( new QgsVectorLayer ( QStringLiteral ( " Polygon?crs=epsg:3946&field=id:integer" ), QStringLiteral ( " vl" ), QStringLiteral ( " memory" ) ) );
826
+ vl2->setRenderer ( new QgsNullSymbolRenderer () );
827
+
828
+ QgsFeature f;
829
+ f.setAttributes ( QgsAttributes () << 1 );
830
+ f.setGeometry( QgsGeometry::fromWkt( QStringLiteral( "MultiPolygon (((1967901.6872910603415221 5162590.11975561361759901, 1967905.31832842249423265 5162591.80023225769400597, 1967907.63076798897236586 5162586.43503414187580347, 1967903.84105980419553816 5162584.57283254805952311, 1967901.6872910603415221 5162590.11975561361759901)),((1967901.64785283687524498 5162598.3270823871716857, 1967904.82891705213114619 5162601.06552503909915686, 1967910.82140435534529388 5162587.99774718284606934, 1967907.63076798897236586 5162586.43503414187580347, 1967905.31832842249423265 5162591.80023225769400597, 1967901.6872910603415221 5162590.11975561361759901, 1967899.27472299290820956 5162596.28855143301188946, 1967901.64785283687524498 5162598.3270823871716857)),((1967904.82891705213114619 5162601.06552503909915686, 1967901.64785283687524498 5162598.3270823871716857, 1967884.28552994946949184 5162626.09785370342433453, 1967895.81538487318903208 5162633.84423183929175138, 1967901.64141261484473944 5162624.63927845563739538, 1967906.47453573765233159 5162616.87410452589392662, 1967913.7844126324634999 5162604.47178338281810284, 1967909.58057221467606723 5162602.89022256527096033, 1967904.82891705213114619 5162601.06552503909915686)))" ) ) );
831
+ QVERIFY ( vl2->dataProvider ()->addFeature ( f ) );
832
+
833
+ vl2->setLabeling ( new QgsVectorLayerSimpleLabeling ( settings ) ); // TODO: this should not be necessary!
834
+ vl2->setLabelsEnabled ( true );
835
+
836
+ // make a fake render context
837
+ QSize size ( 640 , 480 );
838
+ QgsMapSettings mapSettings;
839
+ mapSettings.setDestinationCrs ( vl2->crs () );
840
+
841
+ mapSettings.setOutputSize ( size );
842
+ mapSettings.setExtent ( f.geometry ().boundingBox () );
843
+ mapSettings.setLayers ( QList<QgsMapLayer *>() << vl2.get () );
844
+ mapSettings.setOutputDpi ( 96 );
845
+
846
+ QgsLabelingEngineSettings engineSettings = mapSettings.labelingEngineSettings ();
847
+ engineSettings.setFlag ( QgsLabelingEngineSettings::UsePartialCandidates, false );
848
+ engineSettings.setFlag ( QgsLabelingEngineSettings::DrawLabelRectOnly, true );
849
+ // engineSettings.setFlag( QgsLabelingEngineSettings::DrawCandidates, true );
850
+ mapSettings.setLabelingEngineSettings ( engineSettings );
851
+
852
+ QgsMapRendererSequentialJob job ( mapSettings );
853
+ job.start ();
854
+ job.waitForFinished ();
855
+
856
+ QImage img = job.renderedImage ();
857
+ QVERIFY ( imageCheck ( QStringLiteral ( " label_adjacent_parts" ), img, 20 ) );
858
+ }
859
+
808
860
QGSTEST_MAIN ( TestQgsLabelingEngine )
809
861
#include " testqgslabelingengine.moc"
0 commit comments