Skip to content

Commit

Permalink
Save geometry generator enabled/disabled state independently
Browse files Browse the repository at this point in the history
  • Loading branch information
m-kuhn committed Mar 10, 2019
1 parent 6d937a1 commit 67e1c33
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 3 deletions.
6 changes: 6 additions & 0 deletions python/core/auto_generated/qgspallabeling.sip.in
Expand Up @@ -390,6 +390,12 @@ Returns the QgsExpression for this label settings. May be ``None`` if isExpressi


double zIndex; double zIndex;


QString geometryGenerator;

QgsWkbTypes::GeometryType geometryGeneratorType;

bool geometryGeneratorEnabled;

void calculateLabelSize( const QFontMetricsF *fm, const QString &text, double &labelX, double &labelY, const QgsFeature *f = 0, QgsRenderContext *context = 0 ); void calculateLabelSize( const QFontMetricsF *fm, const QString &text, double &labelX, double &labelY, const QgsFeature *f = 0, QgsRenderContext *context = 0 );
%Docstring %Docstring
Calculates the space required to render the provided ``text`` in map units. Calculates the space required to render the provided ``text`` in map units.
Expand Down
23 changes: 20 additions & 3 deletions src/core/qgspallabeling.cpp
Expand Up @@ -383,6 +383,8 @@ QgsPalLayerSettings &QgsPalLayerSettings::operator=( const QgsPalLayerSettings &
mDataDefinedProperties = s.mDataDefinedProperties; mDataDefinedProperties = s.mDataDefinedProperties;


geometryGenerator = s.geometryGenerator; geometryGenerator = s.geometryGenerator;
geometryGeneratorEnabled = s.geometryGeneratorEnabled;
geometryGeneratorType = s.geometryGeneratorType;


return *this; return *this;
} }
Expand Down Expand Up @@ -680,7 +682,11 @@ void QgsPalLayerSettings::readFromLayerCustomProperties( QgsVectorLayer *layer )
obstacleType = static_cast< ObstacleType >( layer->customProperty( QStringLiteral( "labeling/obstacleType" ), QVariant( PolygonInterior ) ).toUInt() ); obstacleType = static_cast< ObstacleType >( layer->customProperty( QStringLiteral( "labeling/obstacleType" ), QVariant( PolygonInterior ) ).toUInt() );
zIndex = layer->customProperty( QStringLiteral( "labeling/zIndex" ), QVariant( 0.0 ) ).toDouble(); zIndex = layer->customProperty( QStringLiteral( "labeling/zIndex" ), QVariant( 0.0 ) ).toDouble();


geometryGenerator = layer->customProperty( QStringLiteral( "labeling/zIndex" ), QString( "translate($geometry, 10, 10)" ) ).toString(); geometryGenerator = layer->customProperty( QStringLiteral( "labeling/geometryGenerator" ), QString() ).toString();
geometryGeneratorEnabled = layer->customProperty( QStringLiteral( "labeling/geometryGeneratorEnabled" ) ).toBool();

const QMetaEnum metaEnum( QMetaEnum::fromType<QgsWkbTypes::GeometryType>() );
geometryGeneratorType = static_cast<QgsWkbTypes::GeometryType>( metaEnum.keyToValue( layer->customProperty( QStringLiteral( "labeling/geometryGeneratorType" ) ).toString().toUtf8().constData() ) );


mDataDefinedProperties.clear(); mDataDefinedProperties.clear();
if ( layer->customProperty( QStringLiteral( "labeling/ddProperties" ) ).isValid() ) if ( layer->customProperty( QStringLiteral( "labeling/ddProperties" ) ).isValid() )
Expand Down Expand Up @@ -871,6 +877,13 @@ void QgsPalLayerSettings::readXml( QDomElement &elem, const QgsReadWriteContext
repeatDistanceMapUnitScale = QgsSymbolLayerUtils::decodeMapUnitScale( placementElem.attribute( QStringLiteral( "repeatDistanceMapUnitScale" ) ) ); repeatDistanceMapUnitScale = QgsSymbolLayerUtils::decodeMapUnitScale( placementElem.attribute( QStringLiteral( "repeatDistanceMapUnitScale" ) ) );
} }


geometryGenerator = placementElem.attribute( QStringLiteral( "geometryGenerator" ) );
geometryGeneratorEnabled = placementElem.attribute( QStringLiteral( "labeling/geometryGeneratorEnabled" ) ).toInt();

const QMetaEnum metaEnum( QMetaEnum::fromType<QgsWkbTypes::GeometryType>() );
geometryGeneratorType = static_cast<QgsWkbTypes::GeometryType>( metaEnum.keyToValue( placementElem.attribute( QStringLiteral( "geometryGeneratorType" ) ).toUtf8().constData() ) );


// rendering // rendering
QDomElement renderingElem = elem.firstChildElement( QStringLiteral( "rendering" ) ); QDomElement renderingElem = elem.firstChildElement( QStringLiteral( "rendering" ) );


Expand All @@ -895,7 +908,6 @@ void QgsPalLayerSettings::readXml( QDomElement &elem, const QgsReadWriteContext
obstacleFactor = renderingElem.attribute( QStringLiteral( "obstacleFactor" ), QStringLiteral( "1" ) ).toDouble(); obstacleFactor = renderingElem.attribute( QStringLiteral( "obstacleFactor" ), QStringLiteral( "1" ) ).toDouble();
obstacleType = static_cast< ObstacleType >( renderingElem.attribute( QStringLiteral( "obstacleType" ), QString::number( PolygonInterior ) ).toUInt() ); obstacleType = static_cast< ObstacleType >( renderingElem.attribute( QStringLiteral( "obstacleType" ), QString::number( PolygonInterior ) ).toUInt() );
zIndex = renderingElem.attribute( QStringLiteral( "zIndex" ), QStringLiteral( "0.0" ) ).toDouble(); zIndex = renderingElem.attribute( QStringLiteral( "zIndex" ), QStringLiteral( "0.0" ) ).toDouble();
geometryGenerator = renderingElem.attribute( QStringLiteral( "geometryGenerator" ), "translate($geometry, 10, 10)" );


QDomElement ddElem = elem.firstChildElement( QStringLiteral( "dd_properties" ) ); QDomElement ddElem = elem.firstChildElement( QStringLiteral( "dd_properties" ) );
if ( !ddElem.isNull() ) if ( !ddElem.isNull() )
Expand Down Expand Up @@ -1005,7 +1017,12 @@ QDomElement QgsPalLayerSettings::writeXml( QDomDocument &doc, const QgsReadWrite
placementElem.setAttribute( QStringLiteral( "repeatDistance" ), repeatDistance ); placementElem.setAttribute( QStringLiteral( "repeatDistance" ), repeatDistance );
placementElem.setAttribute( QStringLiteral( "repeatDistanceUnits" ), QgsUnitTypes::encodeUnit( repeatDistanceUnit ) ); placementElem.setAttribute( QStringLiteral( "repeatDistanceUnits" ), QgsUnitTypes::encodeUnit( repeatDistanceUnit ) );
placementElem.setAttribute( QStringLiteral( "repeatDistanceMapUnitScale" ), QgsSymbolLayerUtils::encodeMapUnitScale( repeatDistanceMapUnitScale ) ); placementElem.setAttribute( QStringLiteral( "repeatDistanceMapUnitScale" ), QgsSymbolLayerUtils::encodeMapUnitScale( repeatDistanceMapUnitScale ) );

placementElem.setAttribute( QStringLiteral( "geometryGenerator" ), geometryGenerator ); placementElem.setAttribute( QStringLiteral( "geometryGenerator" ), geometryGenerator );
placementElem.setAttribute( QStringLiteral( "geometryGeneratorEnabled" ), geometryGeneratorEnabled );
const QMetaEnum metaEnum( QMetaEnum::fromType<QgsWkbTypes::GeometryType>() );
placementElem.setAttribute( QStringLiteral( "geometryGeneratorType" ), metaEnum.valueToKey( geometryGeneratorType ) );



// rendering // rendering
QDomElement renderingElem = doc.createElement( QStringLiteral( "rendering" ) ); QDomElement renderingElem = doc.createElement( QStringLiteral( "rendering" ) );
Expand Down Expand Up @@ -1195,7 +1212,7 @@ void QgsPalLayerSettings::calculateLabelSize( const QFontMetricsF *fm, const QSt
void QgsPalLayerSettings::registerFeature( const QgsFeature &f, QgsRenderContext &context, QgsLabelFeature **labelFeature, QgsGeometry obstacleGeometry ) void QgsPalLayerSettings::registerFeature( const QgsFeature &f, QgsRenderContext &context, QgsLabelFeature **labelFeature, QgsGeometry obstacleGeometry )
{ {
QgsFeature feature = f; QgsFeature feature = f;
if ( !geometryGenerator.isNull() ) if ( geometryGeneratorEnabled )
{ {
QgsExpressionContext expContext = context.expressionContext(); QgsExpressionContext expContext = context.expressionContext();
// TODO: cache and prepare // TODO: cache and prepare
Expand Down
6 changes: 6 additions & 0 deletions src/core/qgspallabeling.h
Expand Up @@ -757,6 +757,12 @@ class CORE_EXPORT QgsPalLayerSettings
//! The geometry generator expression. Null if disabled. //! The geometry generator expression. Null if disabled.
QString geometryGenerator; QString geometryGenerator;


//! The type of the result geometry of the geometry generator.
QgsWkbTypes::GeometryType geometryGeneratorType = QgsWkbTypes::GeometryType::UnknownGeometry;

//! Defines if the geometry generator is enabled or not. If disabled, the standard geometry will be taken.
bool geometryGeneratorEnabled = false;

/** /**
* Calculates the space required to render the provided \a text in map units. * Calculates the space required to render the provided \a text in map units.
* Results will be written to \a labelX and \a labelY. * Results will be written to \a labelX and \a labelY.
Expand Down

0 comments on commit 67e1c33

Please sign in to comment.