QGIS API Documentation  3.37.0-Master (a5b4d9743e8)
qgssymbollayerutils.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgssymbollayerutils.h
3  ---------------------
4  begin : November 2009
5  copyright : (C) 2009 by Martin Dobias
6  email : wonder dot sk at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
16 
17 #ifndef QGSSYMBOLLAYERUTILS_H
18 #define QGSSYMBOLLAYERUTILS_H
19 
20 #include "qgis_core.h"
21 #include "qgis_sip.h"
22 #include <QMap>
23 #include <QFont>
24 #include <QColor>
25 #include <QPainter>
26 #include "qgis.h"
27 #include "qgsmapunitscale.h"
28 #include "qgscolorramp.h"
29 #include "qgsarrowsymbollayer.h"
30 #include "qgssymbol.h"
31 
32 #include <QFile>
33 
34 #define FONTMARKER_CHR_FIX "~!_#!#_!~"
35 
36 class QgsExpression;
37 class QgsPathResolver;
39 class QgsSymbolLayer;
40 
41 typedef QMap<QString, QString> QgsStringMap;
42 typedef QMap<QString, QgsSymbol * > QgsSymbolMap;
43 typedef QList< QPair< QColor, QString > > QgsNamedColorList SIP_SKIP;
44 
45 class QDomDocument;
46 class QDomElement;
47 class QIcon;
48 class QPixmap;
49 class QPointF;
50 class QSize;
51 class QMimeData;
52 class QgsFeatureRenderer;
53 class QgsSymbolLayerId;
54 
59 class CORE_EXPORT QgsSymbolLayerUtils
60 {
61  public:
62 
63  static QString encodeColor( const QColor &color );
64  static QColor decodeColor( const QString &str );
65 
66  static QString encodeSldAlpha( int alpha );
67  static int decodeSldAlpha( const QString &str );
68 
69  static QString encodeSldFontStyle( QFont::Style style );
70  static QFont::Style decodeSldFontStyle( const QString &str );
71 
72  static QString encodeSldFontWeight( int weight );
73  static int decodeSldFontWeight( const QString &str );
74 
75  static QString encodePenStyle( Qt::PenStyle style );
76  static Qt::PenStyle decodePenStyle( const QString &str );
77 
78  static QString encodePenJoinStyle( Qt::PenJoinStyle style );
79  static Qt::PenJoinStyle decodePenJoinStyle( const QString &str );
80 
81  static QString encodePenCapStyle( Qt::PenCapStyle style );
82  static Qt::PenCapStyle decodePenCapStyle( const QString &str );
83 
84  static QString encodeSldLineJoinStyle( Qt::PenJoinStyle style );
85  static Qt::PenJoinStyle decodeSldLineJoinStyle( const QString &str );
86 
87  static QString encodeSldLineCapStyle( Qt::PenCapStyle style );
88  static Qt::PenCapStyle decodeSldLineCapStyle( const QString &str );
89 
90  static QString encodeBrushStyle( Qt::BrushStyle style );
91  static Qt::BrushStyle decodeBrushStyle( const QString &str );
92 
93  static QString encodeSldBrushStyle( Qt::BrushStyle style );
94  static Qt::BrushStyle decodeSldBrushStyle( const QString &str );
95 
106  static Qgis::SymbolCoordinateReference decodeCoordinateReference( const QString &string, bool *ok SIP_OUT = nullptr );
107 
115  static QString encodeCoordinateReference( Qgis::SymbolCoordinateReference coordinateReference );
116 
121  static QgsArrowSymbolLayer::HeadType decodeArrowHeadType( const QVariant &value, bool *ok SIP_OUT = nullptr );
122 
127  static QgsArrowSymbolLayer::ArrowType decodeArrowType( const QVariant &value, bool *ok SIP_OUT = nullptr );
128 
139  static Qgis::MarkerClipMode decodeMarkerClipMode( const QString &string, bool *ok SIP_OUT = nullptr );
140 
147  static QString encodeMarkerClipMode( Qgis::MarkerClipMode mode );
148 
159  static Qgis::LineClipMode decodeLineClipMode( const QString &string, bool *ok SIP_OUT = nullptr );
160 
167  static QString encodeLineClipMode( Qgis::LineClipMode mode );
168 
174  static QString encodePoint( QPointF point );
175 
181  static QPointF decodePoint( const QString &string );
182 
195  static QPointF toPoint( const QVariant &value, bool *ok SIP_OUT = nullptr );
196 
202  static QString encodeSize( QSizeF size );
203 
209  static QSizeF decodeSize( const QString &string );
210 
223  static QSizeF toSize( const QVariant &value, bool *ok SIP_OUT = nullptr );
224 
225  static QString encodeMapUnitScale( const QgsMapUnitScale &mapUnitScale );
226  static QgsMapUnitScale decodeMapUnitScale( const QString &str );
227 
228  static QString encodeRealVector( const QVector<qreal> &v );
229  static QVector<qreal> decodeRealVector( const QString &s );
230 
231  static QString encodeSldRealVector( const QVector<qreal> &v );
232  static QVector<qreal> decodeSldRealVector( const QString &s );
233 
241  static QString encodeSldUom( Qgis::RenderUnit unit, double *scaleFactor );
242 
250  static Qgis::RenderUnit decodeSldUom( const QString &str, double *scaleFactor = nullptr );
251 
258  static double sizeInPixelsFromSldUom( const QString &uom, double size );
259 
265  static QString encodeScaleMethod( Qgis::ScaleMethod scaleMethod );
266 
272  static Qgis::ScaleMethod decodeScaleMethod( const QString &str );
273 
274  static QPainter::CompositionMode decodeBlendMode( const QString &s );
275 
285  static QIcon symbolPreviewIcon( const QgsSymbol *symbol, QSize size, int padding = 0, QgsLegendPatchShape *shape = nullptr, const QgsScreenProperties &screen = QgsScreenProperties() );
286 
299  static QPixmap symbolPreviewPixmap( const QgsSymbol *symbol, QSize size, int padding = 0, QgsRenderContext *customContext = nullptr, bool selected = false,
300  const QgsExpressionContext *expressionContext = nullptr,
301  const QgsLegendPatchShape *shape = nullptr,
302  const QgsScreenProperties &screen = QgsScreenProperties() );
303 
314  static QPicture symbolLayerPreviewPicture( const QgsSymbolLayer *layer, Qgis::RenderUnit units, QSize size, const QgsMapUnitScale &scale = QgsMapUnitScale(), Qgis::SymbolType parentSymbolType = Qgis::SymbolType::Hybrid );
315 
328  static QIcon symbolLayerPreviewIcon( const QgsSymbolLayer *layer, Qgis::RenderUnit u, QSize size, const QgsMapUnitScale &scale = QgsMapUnitScale(), Qgis::SymbolType parentSymbolType = Qgis::SymbolType::Hybrid, QgsMapLayer *mapLayer = nullptr, const QgsScreenProperties &screen = QgsScreenProperties() );
329 
337  static QIcon colorRampPreviewIcon( QgsColorRamp *ramp, QSize size, int padding = 0 );
338 
351  static QPixmap colorRampPreviewPixmap( QgsColorRamp *ramp, QSize size, int padding = 0, Qt::Orientation direction = Qt::Horizontal,
352  bool flipDirection = false, bool drawTransparentBackground = true );
353 
354  static void drawStippledBackground( QPainter *painter, QRect rect );
355 
360  static void drawVertexMarker( double x, double y, QPainter &p, Qgis::VertexMarkerType type, int markerSize );
361 
363  static double estimateMaxSymbolBleed( QgsSymbol *symbol, const QgsRenderContext &context );
364 
371  static QgsSymbol *loadSymbol( const QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY;
372 
381  template <class SymbolType> static SymbolType *loadSymbol( const QDomElement &element, const QgsReadWriteContext &context ) SIP_SKIP
382  {
383  QgsSymbol *tmpSymbol = QgsSymbolLayerUtils::loadSymbol( element, context );
384  SymbolType *symbolCastToType = dynamic_cast<SymbolType *>( tmpSymbol );
385 
386  if ( symbolCastToType )
387  {
388  return symbolCastToType;
389  }
390  else
391  {
392  //could not cast
393  delete tmpSymbol;
394  return nullptr;
395  }
396  }
397 
399  static QgsSymbolLayer *loadSymbolLayer( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY;
401  static QDomElement saveSymbol( const QString &symbolName, const QgsSymbol *symbol, QDomDocument &doc, const QgsReadWriteContext &context );
402 
407  static QString symbolProperties( QgsSymbol *symbol );
408 
412  static bool createSymbolLayerListFromSld( QDomElement &element, Qgis::GeometryType geomType, QList<QgsSymbolLayer *> &layers );
413 
414  static QgsSymbolLayer *createFillLayerFromSld( QDomElement &element ) SIP_FACTORY;
415  static QgsSymbolLayer *createLineLayerFromSld( QDomElement &element ) SIP_FACTORY;
416  static QgsSymbolLayer *createMarkerLayerFromSld( QDomElement &element ) SIP_FACTORY;
417 
421  static bool convertPolygonSymbolizerToPointMarker( QDomElement &element, QList<QgsSymbolLayer *> &layerList );
422 
427  static bool hasExternalGraphic( QDomElement &element );
428 
434  static bool hasExternalGraphicV2( QDomElement &element, const QString format = QString() );
435 
436  static bool hasWellKnownMark( QDomElement &element );
437 
438  static bool needFontMarker( QDomElement &element );
439  static bool needSvgMarker( QDomElement &element );
440  static bool needEllipseMarker( QDomElement &element );
441  static bool needMarkerLine( QDomElement &element );
442  static bool needLinePatternFill( QDomElement &element );
443  static bool needPointPatternFill( QDomElement &element );
444  static bool needSvgFill( QDomElement &element );
445 
451  static bool needRasterImageFill( QDomElement &element );
452 
453  static void fillToSld( QDomDocument &doc, QDomElement &element,
454  Qt::BrushStyle brushStyle, const QColor &color = QColor() );
455  static bool fillFromSld( QDomElement &element,
456  Qt::BrushStyle &brushStyle, QColor &color );
457 
459  static void lineToSld( QDomDocument &doc, QDomElement &element,
460  Qt::PenStyle penStyle, const QColor &color, double width = -1,
461  const Qt::PenJoinStyle *penJoinStyle = nullptr, const Qt::PenCapStyle *penCapStyle = nullptr,
462  const QVector<qreal> *customDashPattern = nullptr, double dashOffset = 0.0 ) SIP_SKIP;
463  static bool lineFromSld( QDomElement &element,
464  Qt::PenStyle &penStyle, QColor &color, double &width,
465  Qt::PenJoinStyle *penJoinStyle = nullptr, Qt::PenCapStyle *penCapStyle = nullptr,
466  QVector<qreal> *customDashPattern = nullptr, double *dashOffset = nullptr );
467 
468  static void externalGraphicToSld( QDomDocument &doc, QDomElement &element,
469  const QString &path, const QString &mime,
470  const QColor &color, double size = -1 );
471  static bool externalGraphicFromSld( QDomElement &element,
472  QString &path, QString &mime,
473  QColor &color, double &size );
474 
475  static void wellKnownMarkerToSld( QDomDocument &doc, QDomElement &element,
476  const QString &name, const QColor &color, const QColor &strokeColor, Qt::PenStyle strokeStyle,
477  double strokeWidth = -1, double size = -1 );
478 
480  static bool wellKnownMarkerFromSld( QDomElement &element,
481  QString &name, QColor &color, QColor &strokeColor, Qt::PenStyle &strokeStyle,
482  double &strokeWidth, double &size ) SIP_PYNAME( wellKnownMarkerFromSld2 );
483 
484  static void externalMarkerToSld( QDomDocument &doc, QDomElement &element,
485  const QString &path, const QString &format, int *markIndex = nullptr,
486  const QColor &color = QColor(), double size = -1 );
487  static bool externalMarkerFromSld( QDomElement &element,
488  QString &path, QString &format, int &markIndex,
489  QColor &color, double &size );
490 
491 
492  static void labelTextToSld( QDomDocument &doc, QDomElement &element, const QString &label,
493  const QFont &font, const QColor &color = QColor(), double size = -1 );
494 
496  static QString ogrFeatureStylePen( double width, double mmScaleFactor, double mapUnitsScaleFactor, const QColor &c,
497  Qt::PenJoinStyle joinStyle = Qt::MiterJoin,
498  Qt::PenCapStyle capStyle = Qt::FlatCap,
499  double offset = 0.0,
500  const QVector<qreal> *dashPattern = nullptr );
501 
506  static QString ogrFeatureStyleBrush( const QColor &fillColr );
507 
508  static void createRotationElement( QDomDocument &doc, QDomElement &element, const QString &rotationFunc );
509  static bool rotationFromSldElement( QDomElement &element, QString &rotationFunc );
510 
511  static void createOpacityElement( QDomDocument &doc, QDomElement &element, const QString &alphaFunc );
512  static bool opacityFromSldElement( QDomElement &element, QString &alphaFunc );
513 
514  static void createDisplacementElement( QDomDocument &doc, QDomElement &element, QPointF offset );
515  static bool displacementFromSldElement( QDomElement &element, QPointF &offset );
516 
523  static void createAnchorPointElement( QDomDocument &doc, QDomElement &element, QPointF anchor );
524 
525  static void createOnlineResourceElement( QDomDocument &doc, QDomElement &element, const QString &path, const QString &format );
526  static bool onlineResourceFromSldElement( QDomElement &element, QString &path, QString &format );
527 
528  static void createGeometryElement( QDomDocument &doc, QDomElement &element, const QString &geomFunc );
529  static bool geometryFromSldElement( QDomElement &element, QString &geomFunc );
530 
537  static bool createExpressionElement( QDomDocument &doc, QDomElement &element, const QString &function );
538  static bool createFunctionElement( QDomDocument &doc, QDomElement &element, const QString &function );
539  static bool functionFromSldElement( QDomElement &element, QString &function );
540 
541  static QDomElement createSvgParameterElement( QDomDocument &doc, const QString &name, const QString &value );
542  static QgsStringMap getSvgParameterList( QDomElement &element );
543 
544  static QDomElement createVendorOptionElement( QDomDocument &doc, const QString &name, const QString &value );
545  static QgsStringMap getVendorOptionList( QDomElement &element );
546 
548  static QVariantMap parseProperties( const QDomElement &element );
550  static void saveProperties( QVariantMap props, QDomDocument &doc, QDomElement &element );
551 
553  static QgsSymbolMap loadSymbols( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY;
555  static QDomElement saveSymbols( QgsSymbolMap &symbols, const QString &tagName, QDomDocument &doc, const QgsReadWriteContext &context );
556 
557  static void clearSymbolMap( QgsSymbolMap &symbols );
558 
565  static QMimeData *symbolToMimeData( const QgsSymbol *symbol ) SIP_FACTORY;
566 
572  static QgsSymbol *symbolFromMimeData( const QMimeData *data ) SIP_FACTORY;
573 
580  static QgsColorRamp *loadColorRamp( QDomElement &element ) SIP_FACTORY;
581 
590  static QDomElement saveColorRamp( const QString &name, QgsColorRamp *ramp, QDomDocument &doc );
591 
598  static QVariant colorRampToVariant( const QString &name, QgsColorRamp *ramp );
599 
606  static QgsColorRamp *loadColorRamp( const QVariant &value ) SIP_FACTORY;
607 
613  static QString colorToName( const QColor &color );
614 
621  static QList< QColor > parseColorList( const QString &colorStr );
622 
629  static QMimeData *colorToMimeData( const QColor &color ) SIP_FACTORY;
630 
638  static QColor colorFromMimeData( const QMimeData *data, bool &hasAlpha SIP_OUT );
639 
645  static QgsNamedColorList colorListFromMimeData( const QMimeData *data );
646 
653  static QMimeData *colorListToMimeData( const QgsNamedColorList &colorList, bool allFormats = true ) SIP_FACTORY;
654 
663  static bool saveColorsToGpl( QFile &file, const QString &paletteName, const QgsNamedColorList &colors );
664 
673  static QgsNamedColorList importColorsFromGpl( QFile &file, bool &ok, QString &name );
674 
682  static QColor parseColor( const QString &colorStr, bool strictEval = false );
683 
692  static QColor parseColorWithAlpha( const QString &colorStr, bool &containsAlpha, bool strictEval = false );
693 
697  static void multiplyImageOpacity( QImage *image, qreal opacity );
698 
700  static void blurImageInPlace( QImage &image, QRect rect, int radius, bool alphaOnly );
701 
705  static void premultiplyColor( QColor &rgb, int alpha );
706 
719  static bool condenseFillAndOutline( QgsFillSymbolLayer *fill, QgsLineSymbolLayer *outline );
720 
722  static void sortVariantList( QList<QVariant> &list, Qt::SortOrder order );
724  static QPointF pointOnLineWithDistance( QPointF startPoint, QPointF directionPoint, double distance );
725 
727  static QStringList listSvgFiles();
728 
730  static QStringList listSvgFilesAt( const QString &directory );
731 
738  static QString svgSymbolNameToPath( const QString &name, const QgsPathResolver &pathResolver );
739 
744  static QString svgSymbolPathToName( const QString &path, const QgsPathResolver &pathResolver );
745 
747  static QPointF polygonCentroid( const QPolygonF &points );
748 
750  static QPointF polygonPointOnSurface( const QPolygonF &points, const QVector<QPolygonF> *rings = nullptr );
751 
753  static bool pointInPolygon( const QPolygonF &points, QPointF point );
754 
760  static double polylineLength( const QPolygonF &polyline );
761 
774  static QPolygonF polylineSubstring( const QPolygonF &polyline, double startOffset, double endOffset );
775 
783  static bool isSharpCorner( QPointF p1, QPointF p2, QPointF p3 );
784 
792  static void appendPolyline( QPolygonF &target, const QPolygonF &line );
793 
800  static QgsExpression *fieldOrExpressionToExpression( const QString &fieldOrExpression ) SIP_FACTORY;
801 
808  static QString fieldOrExpressionFromExpression( QgsExpression *expression );
809 
815  static QList<double> prettyBreaks( double minimum, double maximum, int classes );
816 
821  static double rescaleUom( double size, Qgis::RenderUnit unit, const QVariantMap &props );
822 
827  static QPointF rescaleUom( QPointF point, Qgis::RenderUnit unit, const QVariantMap &props ) SIP_PYNAME( rescalePointUom );
828 
833  static QVector<qreal> rescaleUom( const QVector<qreal> &array, Qgis::RenderUnit unit, const QVariantMap &props ) SIP_PYNAME( rescaleArrayUom );
834 
838  static void applyScaleDependency( QDomDocument &doc, QDomElement &ruleElem, QVariantMap &props );
839 
843  static void mergeScaleDependencies( double mScaleMinDenom, double mScaleMaxDenom, QVariantMap &props );
844 
850  static void parametricSvgToSld( QDomDocument &doc, QDomElement &graphicElem,
851  const QString &path,
852  const QColor &fillColor, double size, const QColor &strokeColor, double strokeWidth );
853 
857  static QString getSvgParametricPath( const QString &basePath, const QColor &fillColor, const QColor &strokeColor, double strokeWidth );
858 
864  Q_DECL_DEPRECATED static QSet<const QgsSymbolLayer *> toSymbolLayerPointers( const QgsFeatureRenderer *renderer, const QSet<QgsSymbolLayerId> &symbolLayerIds );
865 
873  static double rendererFrameRate( const QgsFeatureRenderer *renderer );
874 
889  static QgsSymbol *restrictedSizeSymbol( const QgsSymbol *s, double minSize, double maxSize, QgsRenderContext *context, double &width, double &height, bool *ok = nullptr );
890 
895  static QgsStringMap evaluatePropertiesMap( const QMap<QString, QgsProperty> &propertiesMap, const QgsExpressionContext &context );
896 
906  static QSize tileSize( int width, int height, double &angleRad SIP_INOUT );
907 
912  static void clearSymbolLayerIds( QgsSymbol *symbol );
913 
918  static void clearSymbolLayerIds( QgsSymbolLayer *symbolLayer );
919 
924  static void resetSymbolLayerIds( QgsSymbol *symbol );
925 
930  static void resetSymbolLayerIds( QgsSymbolLayer *symbolLayer );
931 
933 #ifndef SIP_RUN
934  static QgsProperty rotateWholeSymbol( double additionalRotation, const QgsProperty &property )
935  {
936  const QString exprString = property.asExpression();
937  return QgsProperty::fromExpression( QString::number( additionalRotation ) + " + (" + exprString + ')' );
938  }
939 
940  static QgsProperty scaleWholeSymbol( double scaleFactor, const QgsProperty &property )
941  {
942  const QString exprString = property.asExpression();
943  return QgsProperty::fromExpression( QString::number( scaleFactor ) + "*(" + exprString + ')' );
944  }
945 
946  static QgsProperty scaleWholeSymbol( double scaleFactorX, double scaleFactorY, const QgsProperty &property )
947  {
948  const QString exprString = property.asExpression();
950  ( !qgsDoubleNear( scaleFactorX, 0.0 ) ? "tostring(" + QString::number( scaleFactorX ) + "*(" + exprString + "))" : QStringLiteral( "'0'" ) ) +
951  "|| ',' || " +
952  ( !qgsDoubleNear( scaleFactorY, 0.0 ) ? "tostring(" + QString::number( scaleFactorY ) + "*(" + exprString + "))" : QStringLiteral( "'0'" ) ) );
953  }
954 #endif
956 
957 };
958 
959 class QPolygonF;
960 
962 QList<QPolygonF> offsetLine( QPolygonF polyline, double dist, Qgis::GeometryType geometryType ) SIP_SKIP;
963 
964 #endif
The Qgis class provides global constants for use throughout the application.
Definition: qgis.h:54
MarkerClipMode
Marker clipping modes.
Definition: qgis.h:2613
LineClipMode
Line clipping modes.
Definition: qgis.h:2627
ScaleMethod
Scale methods.
Definition: qgis.h:415
GeometryType
The geometry types are used to group Qgis::WkbType in a coarse way.
Definition: qgis.h:255
RenderUnit
Rendering size units.
Definition: qgis.h:4221
VertexMarkerType
Editing vertex markers, used for showing vertices during a edit operation.
Definition: qgis.h:1401
SymbolType
Symbol types.
Definition: qgis.h:401
@ Hybrid
Hybrid symbol.
SymbolCoordinateReference
Symbol coordinate reference modes.
Definition: qgis.h:2571
HeadType
Possible head types.
ArrowType
Possible arrow types.
Abstract base class for color ramps.
Definition: qgscolorramp.h:29
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Class for parsing and evaluation of expressions (formerly called "search strings").
Represents a patch shape for use in map legends.
Base class for all map layer types.
Definition: qgsmaplayer.h:75
Struct for storing maximum and minimum scales for measurements in map units.
Resolves relative paths into absolute paths and vice versa.
A store for object properties.
Definition: qgsproperty.h:228
QString asExpression() const
Returns an expression string representing the state of the property, or an empty string if the proper...
static QgsProperty fromExpression(const QString &expression, bool isActive=true)
Returns a new ExpressionBasedProperty created from the specified expression.
The class is used as a container of context for various read/write operations on other objects.
Contains information about the context of a rendering operation.
Stores properties relating to a screen.
We may need stable references to symbol layers, when pointers to symbol layers is not usable (when a ...
static SymbolType * loadSymbol(const QDomElement &element, const QgsReadWriteContext &context)
Attempts to load a symbol from a DOM element and cast it to a particular symbol type.
static QgsSymbol * loadSymbol(const QDomElement &element, const QgsReadWriteContext &context)
Attempts to load a symbol from a DOM element.
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:94
QList< QPair< QColor, QString > > QgsNamedColorList
List of colors paired with a friendly display name identifying the color.
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c
#define str(x)
Definition: qgis.cpp:38
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
Definition: qgis.h:5172
QMap< QString, QString > QgsStringMap
Definition: qgis.h:5702
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_PYNAME(name)
Definition: qgis_sip.h:81
#define SIP_OUT
Definition: qgis_sip.h:58
#define SIP_FACTORY
Definition: qgis_sip.h:76
#define SIP_INOUT
Definition: qgis_sip.h:71
QMap< QString, QgsSymbol * > QgsSymbolMap
Definition: qgsrenderer.h:45
QMap< QString, QgsSymbol * > QgsSymbolMap
QList< QPolygonF > offsetLine(QPolygonF polyline, double dist, Qgis::GeometryType geometryType)
calculate geometry shifted by a specified distance
QMap< QString, QString > QgsStringMap