From 2968fb86f6fc453d5643243a1f08064b58ecb39d Mon Sep 17 00:00:00 2001 From: Matthias Kuhn Date: Fri, 29 Nov 2019 17:52:16 +0100 Subject: [PATCH] Add quadrant based label DXF alignment support --- src/core/dxf/qgsdxfexport.cpp | 59 ++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/src/core/dxf/qgsdxfexport.cpp b/src/core/dxf/qgsdxfexport.cpp index 1e2a67bf398..cf9f33703e5 100644 --- a/src/core/dxf/qgsdxfexport.cpp +++ b/src/core/dxf/qgsdxfexport.cpp @@ -1259,6 +1259,63 @@ void QgsDxfExport::writeText( const QString &layer, const QString &text, pal::La VAlign vali = VAlign::Undefined; const QgsPropertyCollection &props = layerSettings.dataDefinedProperties(); + + if ( props.isActive( QgsPalLayerSettings::OffsetQuad ) ) + { + const QVariant exprVal = props.value( QgsPalLayerSettings::OffsetQuad, expressionContext ); + if ( exprVal.isValid() ) + { + int offsetQuad = exprVal.toInt(); + + lblX -= label->dX(); + lblY -= label->dY(); + + switch ( offsetQuad ) + { + case 0: // Above Left + hali = HAlign::HRight; + vali = VAlign::VBottom; + break; + case 1: // Above + hali = HAlign::HCenter; + vali = VAlign::VBottom; + break; + case 2: // Above Right + hali = HAlign::HLeft; + vali = VAlign::VBottom; + break; + case 3: // Left + hali = HAlign::HRight; + vali = VAlign::VMiddle; + break; + case 4: // Over + hali = HAlign::HCenter; + vali = VAlign::VMiddle; + break; + case 5: // Right + hali = HAlign::HLeft; + vali = VAlign::VMiddle; + break; + case 6: // Below Left + hali = HAlign::HRight; + vali = VAlign::VTop; + break; + case 7: // Below + hali = HAlign::HCenter; + vali = VAlign::VTop; + break; + case 8: // Below Right + hali = HAlign::HLeft; + vali = VAlign::VTop; + break; + default: // OverHali + hali = HAlign::HCenter; + vali = VAlign::VTop; + break; + } + } + } + if ( props.isActive( QgsPalLayerSettings::Hali ) ) { hali = HAlign::HLeft; @@ -1393,7 +1450,7 @@ void QgsDxfExport::writeText( const QString &layer, const QString &text, const Q writeGroup( 1, pt ); // Second alignment point writeGroup( 40, size ); writeGroup( 1, text ); - writeGroup( 50, angle ); + writeGroup( 50, fmod( angle, 360 ) ); if ( hali != HAlign::Undefined ) writeGroup( 72, static_cast( hali ) ); writeGroup( 7, QStringLiteral( "STANDARD" ) ); // so far only support for standard font