Skip to content

Commit 1d0d0e0

Browse files
committed
[FEATURE] New API for labeling engine (QgsLabelingEngineV2)
The idea is to make the engine more flexible compared to QgsPalLabeling implementation: - abstract dealing with text labels / diagrams from the engine itself - allow multiple types of labels per layer - support custom label providers (e.g. implemented by plugins) - make the labeling engine independent from map rendering engine - make it easier to auto-test the labeling engine and its components This code has been funded by Tuscany Region (Italy) - SITA (CIG: 63526840AE) and commissioned to Gis3W s.a.s.
1 parent 13fe3a0 commit 1d0d0e0

15 files changed

+1907
-33
lines changed

src/core/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ SET(QGIS_CORE_SRCS
112112
qgslayerdefinition.cpp
113113
qgslabel.cpp
114114
qgslabelattributes.cpp
115+
qgslabelingenginev2.cpp
115116
qgslabelsearchtree.cpp
116117
qgslegacyhelpers.cpp
117118
qgslegendrenderer.cpp
@@ -178,12 +179,14 @@ SET(QGIS_CORE_SRCS
178179
qgsvectorfilewriter.cpp
179180
qgsvectorlayer.cpp
180181
qgsvectorlayercache.cpp
182+
qgsvectorlayerdiagramprovider.cpp
181183
qgsvectorlayereditbuffer.cpp
182184
qgsvectorlayereditpassthrough.cpp
183185
qgsvectorlayereditutils.cpp
184186
qgsvectorlayerfeatureiterator.cpp
185187
qgsvectorlayerimport.cpp
186188
qgsvectorlayerjoinbuffer.cpp
189+
qgsvectorlayerlabelprovider.cpp
187190
qgsvectorlayerrenderer.cpp
188191
qgsvectorlayerundocommand.cpp
189192
qgsvectorsimplifymethod.cpp
@@ -562,6 +565,7 @@ SET(QGIS_CORE_HDRS
562565
qgslayerdefinition.h
563566
qgslabel.h
564567
qgslabelattributes.h
568+
qgslabelingenginev2.h
565569
qgslabelsearchtree.h
566570
qgslegacyhelpers.h
567571
qgslegendrenderer.h
@@ -612,9 +616,11 @@ SET(QGIS_CORE_HDRS
612616
qgsvectordataprovider.h
613617
qgsvectorlayercache.h
614618
qgsvectorfilewriter.h
619+
qgsvectorlayerdiagramprovider.h
615620
qgsvectorlayereditutils.h
616621
qgsvectorlayerfeatureiterator.h
617622
qgsvectorlayerimport.h
623+
qgsvectorlayerlabelprovider.h
618624
qgsvectorlayerrenderer.h
619625
qgsvectorlayerundocommand.h
620626
qgsvectorsimplifymethod.h

src/core/pal/layer.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@
4040
#include <cmath>
4141
#include <vector>
4242

43+
#include "qgslabelingenginev2.h"
44+
#include "qgspalgeometry.h"
45+
4346
namespace pal
4447
{
4548

@@ -261,6 +264,22 @@ namespace pal
261264
return addedFeature; // true if we've added something
262265
}
263266

267+
bool Layer::registerFeature( QgsLabelFeature* label )
268+
{
269+
QgsPalGeometry* g = label->geometry();
270+
if ( !registerFeature( g->strId(), g, label->size().width(), label->size().height() ) )
271+
return false;
272+
273+
pal::Feature* pf = getFeature( g->strId() );
274+
pf->setLabelInfo( g->info() );
275+
pf->setPriority( label->priority() );
276+
pf->setDistLabel( label->distLabel() );
277+
pf->setFixedQuadrant( label->hasFixedQuadrant() );
278+
pf->setIsObstacle( label->isObstacle() );
279+
pf->setObstacleFactor( label->obstacleFactor() );
280+
return true;
281+
}
282+
264283
void Layer::addFeaturePart( FeaturePart* fpart, const QString& labelText )
265284
{
266285
double bmin[2];

src/core/pal/layer.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
#include <QHash>
3838
#include <fstream>
3939

40+
class QgsLabelFeature;
41+
4042
namespace pal
4143
{
4244

@@ -266,6 +268,8 @@ namespace pal
266268
int xQuadOffset = 0, int yQuadOffset = 0, double xOffset = 0.0, double yOffset = 0.0,
267269
bool alwaysShow = false, double repeatDistance = 0 );
268270

271+
bool registerFeature( QgsLabelFeature* label );
272+
269273
/** Return pointer to feature or NULL if doesn't exist */
270274
Feature* getFeature( const QString &geom_id );
271275

0 commit comments

Comments
 (0)