21 #ifndef QGSPALLABELING_H
22 #define QGSPALLABELING_H
24 #include "qgis_core.h"
28 #include <QFontDatabase>
108 QgsLabelPosition(
QgsFeatureId id,
double r,
const QVector< QgsPointXY > &corners,
const QgsRectangle &rect,
double w,
double h,
const QString &layer,
const QString &labeltext,
const QFont &labelfont,
bool upside_down,
bool diagram =
false,
bool pinned =
false,
const QString &providerId = QString(),
112 , cornerPoints( corners )
114 , labelGeometry( labelGeometry )
118 , labelText( labeltext )
119 , labelFont( labelfont )
120 , upsideDown( upside_down )
121 , isDiagram( diagram )
123 , providerID( providerId )
124 , isUnplaced( isUnplaced )
177 bool upsideDown =
false;
182 bool isDiagram =
false;
187 bool isPinned =
false;
199 bool isUnplaced =
false;
271 enum Q_DECL_DEPRECATED LinePlacementFlags
308 enum Q_DECL_DEPRECATED DirectionSymbols
320 MultiFollowPlacement,
359 FontLetterSpacing = 28,
360 FontWordSpacing = 29,
364 MultiLineWrapChar = 31,
365 AutoWrapLength = 101,
366 MultiLineHeight = 32,
367 MultiLineAlignment = 33,
368 TextOrientation = 110,
372 DirSymbPlacement = 37,
385 BufferJoinStyle = 44,
386 BufferBlendMode = 45,
390 MaskBufferSize = 105,
391 MaskBufferUnit = 106,
403 ShapeRotationType = 52,
406 ShapeOffsetUnits = 55,
408 ShapeRadiiUnits = 57,
409 ShapeTransparency = 63,
413 ShapeStrokeColor = 59,
414 ShapeStrokeWidth = 60,
415 ShapeStrokeWidthUnits = 61,
421 ShadowOffsetAngle = 67,
422 ShadowOffsetDist = 68,
423 ShadowOffsetUnits = 69,
425 ShadowRadiusUnits = 71,
426 ShadowTransparency = 72,
430 ShadowBlendMode = 75,
440 CurvedCharAngleInOut = 83,
449 RepeatDistanceUnit = 86,
451 PredefinedPositionOrder = 91,
452 LinePlacementOptions = 99,
453 OverrunDistance = 102,
455 PolygonLabelOutside = 109,
456 LineAnchorPercent = 111,
459 ScaleVisibility = 23,
530 bool drawLabels =
true;
545 bool isExpression =
false;
555 Q_DECL_DEPRECATED QColor previewBkgrdColor = Qt::white;
560 bool useSubstitutions =
false;
577 int autoWrapLength = 0;
589 bool useMaxLineLengthForAutoWrap =
true;
600 bool formatNumbers =
false;
614 bool plusSign =
false;
640 bool centroidWhole =
false;
647 bool centroidInside =
false;
655 QVector< PredefinedPointPosition > predefinedPositionOrder
SIP_SKIP;
660 bool fitInPolygonOnly =
false;
691 double repeatDistance = 0;
745 double angleOffset = 0;
748 bool preserveRotation =
true;
754 double maxCurvedCharAngleIn = 25.0;
760 double maxCurvedCharAngleOut = -25.0;
775 bool scaleVisibility =
false;
787 double maximumScale = 0;
799 double minimumScale = 0;
806 bool fontLimitPixelSize =
false;
813 int fontMinPixelSize = 0;
820 int fontMaxPixelSize = 10000;
823 bool displayAll =
false;
832 bool labelPerPart =
false;
837 SIP_PROPERTY( name = limitNumLabels, get = _limitNumLabels, set = _setLimitNumLabels )
838 SIP_PROPERTY( name = maxNumLabels, get = _maxNumLabels, set = _setMaxNumLabels )
839 SIP_PROPERTY( name = minFeatureSize, get = _minFeatureSize, set = _setMinFeatureSize )
840 SIP_PROPERTY( name = obstacle, get = _getIsObstacle, set = _setIsObstacle )
841 SIP_PROPERTY( name = obstacleFactor, get = _getObstacleFactor, set = _setObstacleFactor )
842 SIP_PROPERTY( name = obstacleType, get = _getObstacleType, set = _setObstacleType )
843 SIP_PROPERTY( name = placementFlags, get = _getLinePlacementFlags, set = _setLinePlacementFlags )
844 SIP_PROPERTY( name = mergeLines, get = _getMergeLines, set = _setMergeLines )
845 SIP_PROPERTY( name = addDirectionSymbol, get = _getAddDirectionSymbol, set = _setAddDirectionSymbol )
846 SIP_PROPERTY( name = leftDirectionSymbol, get = _getLeftDirectionSymbol, set = _setLeftDirectionSymbol )
847 SIP_PROPERTY( name = rightDirectionSymbol, get = _getRightDirectionSymbol, set = _setRightDirectionSymbol )
848 SIP_PROPERTY( name = reverseDirectionSymbol, get = _getReverseDirectionSymbol, set = _setReverseDirectionSymbol )
849 SIP_PROPERTY( name = placeDirectionSymbol, get = _getPlaceDirectionSymbol, set = _setPlaceDirectionSymbol )
851 SIP_PROPERTY( name = overrunDistance, get = _getOverrunDistance, set = _setOverrunDistance )
852 SIP_PROPERTY( name = overrunDistanceUnit, get = _getOverrunDistanceUnit, set = _setOverrunDistanceUnit )
853 SIP_PROPERTY( name = overrunDistanceMapUnitScale, get = _getOverrunDistanceMapUnitScale, set = _setOverrunDistanceMapUnitScale )
857 bool _limitNumLabels()
const {
return mThinningSettings.limitNumberOfLabelsEnabled(); }
858 void _setLimitNumLabels(
bool limit ) { mThinningSettings.setLimitNumberLabelsEnabled( limit ); }
859 int _maxNumLabels()
const {
return mThinningSettings.maximumNumberLabels(); }
860 void _setMaxNumLabels(
int max ) { mThinningSettings.setMaximumNumberLabels( max ); }
861 double _minFeatureSize()
const {
return mThinningSettings.minimumFeatureSize(); }
862 void _setMinFeatureSize(
double size ) { mThinningSettings.setMinimumFeatureSize( size ); }
863 bool _getIsObstacle()
const {
return mObstacleSettings.isObstacle(); }
864 void _setIsObstacle(
bool obstacle ) { mObstacleSettings.setIsObstacle( obstacle ); }
865 double _getObstacleFactor()
const {
return mObstacleSettings.factor(); }
866 void _setObstacleFactor(
double factor ) { mObstacleSettings.setFactor( factor ); }
867 ObstacleType _getObstacleType()
const {
return static_cast< ObstacleType
>( mObstacleSettings.type() ); }
869 unsigned int _getLinePlacementFlags()
const {
return static_cast< unsigned int >( mLineSettings.placementFlags() ); }
870 void _setLinePlacementFlags(
unsigned int flags ) { mLineSettings.setPlacementFlags(
static_cast< QgsLabeling::LinePlacementFlags
>( flags ) ); }
871 bool _getMergeLines()
const {
return mLineSettings.mergeLines(); }
872 void _setMergeLines(
bool merge ) { mLineSettings.setMergeLines( merge ); }
873 bool _getAddDirectionSymbol()
const {
return mLineSettings.addDirectionSymbol(); }
874 void _setAddDirectionSymbol(
bool add ) { mLineSettings.setAddDirectionSymbol( add ); }
875 QString _getLeftDirectionSymbol()
const {
return mLineSettings.leftDirectionSymbol(); }
876 void _setLeftDirectionSymbol(
const QString &symbol ) { mLineSettings.setLeftDirectionSymbol( symbol ); }
877 QString _getRightDirectionSymbol()
const {
return mLineSettings.rightDirectionSymbol(); }
878 void _setRightDirectionSymbol(
const QString &symbol ) { mLineSettings.setRightDirectionSymbol( symbol ); }
879 bool _getReverseDirectionSymbol()
const {
return mLineSettings.reverseDirectionSymbol(); }
880 void _setReverseDirectionSymbol(
bool reverse ) { mLineSettings.setReverseDirectionSymbol( reverse ); }
882 DirectionSymbols _getPlaceDirectionSymbol()
const {
return static_cast< DirectionSymbols
>( mLineSettings.directionSymbolPlacement() ); }
885 double _getOverrunDistance()
const {
return mLineSettings.overrunDistance(); }
886 void _setOverrunDistance(
double distance ) { mLineSettings.setOverrunDistance( distance ); }
889 QgsMapUnitScale _getOverrunDistanceMapUnitScale()
const {
return mLineSettings.overrunDistanceMapUnitScale(); }
890 void _setOverrunDistanceMapUnitScale(
const QgsMapUnitScale &scale ) { mLineSettings.setOverrunDistanceMapUnitScale( scale ); }
903 bool geometryGeneratorEnabled =
false;
918 void calculateLabelSize(
const QFontMetricsF *fm,
const QString &text,
double &labelX,
double &labelY,
const QgsFeature *f =
nullptr,
QgsRenderContext *context =
nullptr,
double *rotatedLabelX
SIP_OUT =
nullptr,
double *rotatedLabelY
SIP_OUT =
nullptr,
921 void calculateLabelSize(
const QFontMetricsF *fm,
const QString &text,
double &labelX,
double &labelY,
const QgsFeature *f =
nullptr,
QgsRenderContext *context =
nullptr,
double *rotatedLabelX
SIP_OUT =
nullptr,
double *rotatedLabelY
SIP_OUT =
nullptr );
1094 static QPixmap labelSettingsPreviewPixmap(
const QgsPalLayerSettings &settings, QSize size,
const QString &previewText = QString(),
int padding = 0 );
1106 int mFeaturesToLabel = 0;
1107 int mFeatsSendingToPal = 0;
1108 int mFeatsRegPal = 0;
1122 void readOldDataDefinedPropertyMap(
QgsVectorLayer *layer, QDomElement *parentElem );
1129 enum DataDefinedValueType
1148 bool dataDefinedValEval( DataDefinedValueType valType,
1150 QVariant &exprVal,
QgsExpressionContext &context,
const QVariant &originalValue = QVariant() );
1152 void parseTextStyle( QFont &labelFont,
1177 QMap<Property, QVariant> dataDefinedValues;
1184 QFontDatabase mFontDB;
1188 std::unique_ptr< QgsCallout > mCallout;
1194 QgsLabeling::PolygonPlacementFlags mPolygonPlacementFlags = QgsLabeling::PolygonPlacementFlag::AllowPlacementInsideOfPolygon;
1198 bool mRenderStarted =
false;
1200 static void initPropertyDefinitions();
1235 QList<QgsLabelPosition> labelsAtPosition(
const QgsPointXY &p )
const;
1237 QList<QgsLabelPosition> labelsWithinRect(
const QgsRectangle &r )
const;
1250 std::unique_ptr< QgsLabelSearchTree > mLabelSearchTree;
1269 static bool staticWillUseLayer(
const QgsMapLayer *layer );
1310 static QStringList splitToLines(
const QString &text,
const QString &wrapCharacter,
int autoWrapLength = 0,
bool useMaxLineLengthWhenAutoWrapping =
true );
1320 static QStringList splitToGraphemes(
const QString &text );
1325 const QMap< QgsPalLayerSettings::Property, QVariant > &ddValues );
1329 const QMap< QgsPalLayerSettings::Property, QVariant > &ddValues );
1333 const QMap< QgsPalLayerSettings::Property, QVariant > &ddValues );
1337 const QMap< QgsPalLayerSettings::Property, QVariant > &ddValues );
1341 const QMap< QgsPalLayerSettings::Property, QVariant > &ddValues );
1345 const QMap< QgsPalLayerSettings::Property, QVariant > &ddValues );
1364 #endif // QGSPALLABELING_H