17 #ifndef QGSSYMBOLLAYERUTILS_H
18 #define QGSSYMBOLLAYERUTILS_H
20 #include "qgis_core.h"
69 static QString encodeColor(
const QColor &color );
70 static QColor decodeColor(
const QString &
str );
72 static QString encodeSldAlpha(
int alpha );
73 static int decodeSldAlpha(
const QString &
str );
75 static QString encodeSldFontStyle( QFont::Style style );
76 static QFont::Style decodeSldFontStyle(
const QString &
str );
78 static QString encodeSldFontWeight(
int weight );
79 static int decodeSldFontWeight(
const QString &
str );
81 static QString encodePenStyle( Qt::PenStyle style );
82 static Qt::PenStyle decodePenStyle(
const QString &
str );
84 static QString encodePenJoinStyle( Qt::PenJoinStyle style );
85 static Qt::PenJoinStyle decodePenJoinStyle(
const QString &
str );
87 static QString encodePenCapStyle( Qt::PenCapStyle style );
88 static Qt::PenCapStyle decodePenCapStyle(
const QString &
str );
90 static QString encodeSldLineJoinStyle( Qt::PenJoinStyle style );
91 static Qt::PenJoinStyle decodeSldLineJoinStyle(
const QString &
str );
93 static QString encodeSldLineCapStyle( Qt::PenCapStyle style );
94 static Qt::PenCapStyle decodeSldLineCapStyle(
const QString &
str );
96 static QString encodeBrushStyle( Qt::BrushStyle style );
97 static Qt::BrushStyle decodeBrushStyle(
const QString &
str );
99 static QString encodeSldBrushStyle( Qt::BrushStyle style );
100 static Qt::BrushStyle decodeSldBrushStyle(
const QString &
str );
119 static QString encodePoint( QPointF point );
126 static QPointF decodePoint(
const QString &
string );
140 static QPointF toPoint(
const QVariant &value,
bool *ok
SIP_OUT =
nullptr );
148 static QString encodeSize( QSizeF size );
156 static QSizeF decodeSize(
const QString &
string );
170 static QSizeF toSize(
const QVariant &value,
bool *ok
SIP_OUT =
nullptr );
172 static QString encodeMapUnitScale(
const QgsMapUnitScale &mapUnitScale );
175 static QString encodeRealVector(
const QVector<qreal> &v );
176 static QVector<qreal> decodeRealVector(
const QString &s );
178 static QString encodeSldRealVector(
const QVector<qreal> &v );
179 static QVector<qreal> decodeSldRealVector(
const QString &s );
206 static double sizeInPixelsFromSldUom(
const QString &uom,
double size );
222 static QPainter::CompositionMode decodeBlendMode(
const QString &s );
249 static QPixmap symbolPreviewPixmap(
const QgsSymbol *symbol, QSize size,
int padding = 0,
QgsRenderContext *customContext =
nullptr,
bool selected =
false,
283 static QIcon colorRampPreviewIcon(
QgsColorRamp *ramp, QSize size,
int padding = 0 );
297 static QPixmap colorRampPreviewPixmap(
QgsColorRamp *ramp, QSize size,
int padding = 0, Qt::Orientation direction = Qt::Horizontal,
298 bool flipDirection =
false,
bool drawTransparentBackground =
true );
300 static void drawStippledBackground( QPainter *painter, QRect rect );
330 SymbolType *symbolCastToType =
dynamic_cast<SymbolType *
>( tmpSymbol );
332 if ( symbolCastToType )
334 return symbolCastToType;
347 static QDomElement saveSymbol(
const QString &symbolName,
const QgsSymbol *symbol, QDomDocument &doc,
const QgsReadWriteContext &context );
354 static QString symbolProperties(
QgsSymbol *symbol );
359 static bool createSymbolLayerListFromSld( QDomElement &element,
QgsWkbTypes::GeometryType geomType, QList<QgsSymbolLayer *> &layers );
368 static bool convertPolygonSymbolizerToPointMarker( QDomElement &element, QList<QgsSymbolLayer *> &layerList );
369 static bool hasExternalGraphic( QDomElement &element );
370 static bool hasWellKnownMark( QDomElement &element );
372 static bool needFontMarker( QDomElement &element );
373 static bool needSvgMarker( QDomElement &element );
374 static bool needEllipseMarker( QDomElement &element );
375 static bool needMarkerLine( QDomElement &element );
376 static bool needLinePatternFill( QDomElement &element );
377 static bool needPointPatternFill( QDomElement &element );
378 static bool needSvgFill( QDomElement &element );
380 static void fillToSld( QDomDocument &doc, QDomElement &element,
381 Qt::BrushStyle brushStyle,
const QColor &color = QColor() );
382 static bool fillFromSld( QDomElement &element,
383 Qt::BrushStyle &brushStyle, QColor &color );
386 static void lineToSld( QDomDocument &doc, QDomElement &element,
387 Qt::PenStyle penStyle,
const QColor &color,
double width = -1,
388 const Qt::PenJoinStyle *penJoinStyle =
nullptr,
const Qt::PenCapStyle *penCapStyle =
nullptr,
389 const QVector<qreal> *customDashPattern =
nullptr,
double dashOffset = 0.0 )
SIP_SKIP;
390 static
bool lineFromSld( QDomElement &element,
391 Qt::PenStyle &penStyle, QColor &color,
double &width,
392 Qt::PenJoinStyle *penJoinStyle =
nullptr, Qt::PenCapStyle *penCapStyle =
nullptr,
393 QVector<qreal> *customDashPattern =
nullptr,
double *dashOffset =
nullptr );
395 static
void externalGraphicToSld( QDomDocument &doc, QDomElement &element,
396 const QString &path, const QString &mime,
397 const QColor &color,
double size = -1 );
398 static
bool externalGraphicFromSld( QDomElement &element,
399 QString &path, QString &mime,
400 QColor &color,
double &size );
402 static
void wellKnownMarkerToSld( QDomDocument &doc, QDomElement &element,
403 const QString &name, const QColor &color, const QColor &strokeColor, Qt::PenStyle strokeStyle,
404 double strokeWidth = -1,
double size = -1 );
407 static
bool wellKnownMarkerFromSld( QDomElement &element,
408 QString &name, QColor &color, QColor &strokeColor, Qt::PenStyle &strokeStyle,
409 double &strokeWidth,
double &size )
SIP_PYNAME( wellKnownMarkerFromSld2 );
411 static
void externalMarkerToSld( QDomDocument &doc, QDomElement &element,
412 const QString &path, const QString &format,
int *markIndex =
nullptr,
413 const QColor &color = QColor(),
double size = -1 );
414 static
bool externalMarkerFromSld( QDomElement &element,
415 QString &path, QString &format,
int &markIndex,
416 QColor &color,
double &size );
419 static
void labelTextToSld( QDomDocument &doc, QDomElement &element, const QString &label,
420 const QFont &font, const QColor &color = QColor(),
double size = -1 );
423 static QString ogrFeatureStylePen(
double width,
double mmScaleFactor,
double mapUnitsScaleFactor, const QColor &
c,
424 Qt::PenJoinStyle joinStyle = Qt::MiterJoin,
425 Qt::PenCapStyle capStyle = Qt::FlatCap,
427 const QVector<qreal> *dashPattern =
nullptr );
433 static QString ogrFeatureStyleBrush( const QColor &fillColr );
435 static
void createRotationElement( QDomDocument &doc, QDomElement &element, const QString &rotationFunc );
436 static
bool rotationFromSldElement( QDomElement &element, QString &rotationFunc );
438 static
void createOpacityElement( QDomDocument &doc, QDomElement &element, const QString &alphaFunc );
439 static
bool opacityFromSldElement( QDomElement &element, QString &alphaFunc );
441 static
void createDisplacementElement( QDomDocument &doc, QDomElement &element, QPointF offset );
442 static
bool displacementFromSldElement( QDomElement &element, QPointF &offset );
450 static
void createAnchorPointElement( QDomDocument &doc, QDomElement &element, QPointF anchor );
452 static
void createOnlineResourceElement( QDomDocument &doc, QDomElement &element, const QString &path, const QString &format );
453 static
bool onlineResourceFromSldElement( QDomElement &element, QString &path, QString &format );
455 static
void createGeometryElement( QDomDocument &doc, QDomElement &element, const QString &geomFunc );
456 static
bool geometryFromSldElement( QDomElement &element, QString &geomFunc );
464 static
bool createExpressionElement( QDomDocument &doc, QDomElement &element, const QString &function );
465 static
bool createFunctionElement( QDomDocument &doc, QDomElement &element, const QString &function );
466 static
bool functionFromSldElement( QDomElement &element, QString &function );
468 static QDomElement createSvgParameterElement( QDomDocument &doc, const QString &name, const QString &value );
469 static
QgsStringMap getSvgParameterList( QDomElement &element );
471 static QDomElement createVendorOptionElement( QDomDocument &doc, const QString &name, const QString &value );
472 static
QgsStringMap getVendorOptionList( QDomElement &element );
475 static QVariantMap parseProperties( const QDomElement &element );
477 static
void saveProperties( QVariantMap props, QDomDocument &doc, QDomElement &element );
519 static QDomElement saveColorRamp( const QString &name,
QgsColorRamp *ramp, QDomDocument &doc );
527 static QVariant colorRampToVariant( const QString &name,
QgsColorRamp *ramp );
543 static QString colorToName( const QColor &color );
552 static QList< QColor > parseColorList( const QString &colorStr );
561 static QMimeData *colorToMimeData( const QColor &color )
SIP_FACTORY;
571 static QColor colorFromMimeData( const QMimeData *data,
bool &hasAlpha
SIP_OUT );
598 static
bool saveColorsToGpl( QFile &file, const QString &paletteName, const
QgsNamedColorList &colors );
608 static
QgsNamedColorList importColorsFromGpl( QFile &file,
bool &ok, QString &name );
618 static QColor parseColor( const QString &colorStr,
bool strictEval = false );
629 static QColor parseColorWithAlpha( const QString &colorStr,
bool &containsAlpha,
bool strictEval = false );
634 static
void multiplyImageOpacity( QImage *image, qreal opacity );
637 static
void blurImageInPlace( QImage &image, QRect rect,
int radius,
bool alphaOnly );
643 static
void premultiplyColor( QColor &rgb,
int alpha );
660 static
void sortVariantList( QList<QVariant> &list, Qt::SortOrder order );
662 static QPointF pointOnLineWithDistance( QPointF startPoint, QPointF directionPoint,
double distance );
665 static QStringList listSvgFiles();
668 static QStringList listSvgFilesAt( const QString &directory );
676 static QString svgSymbolNameToPath( const QString &name, const
QgsPathResolver &pathResolver );
682 static QString svgSymbolPathToName( const QString &path, const
QgsPathResolver &pathResolver );
685 static QPointF polygonCentroid( const QPolygonF &points );
688 static QPointF polygonPointOnSurface( const QPolygonF &points, const QVector<QPolygonF> *rings =
nullptr );
691 static
bool pointInPolygon( const QPolygonF &points, QPointF point );
698 static
double polylineLength( const QPolygonF &polyline );
712 static QPolygonF polylineSubstring( const QPolygonF &polyline,
double startOffset,
double endOffset );
721 static
bool isSharpCorner( QPointF p1, QPointF p2, QPointF p3 );
730 static
void appendPolyline( QPolygonF &target, const QPolygonF &line );
748 static QString fieldOrExpressionFromExpression(
QgsExpression *expression );
756 static QList<
double> prettyBreaks(
double minimum,
double maximum,
int classes );
763 static
double rescaleUom(
double size,
QgsUnitTypes::RenderUnit unit, const QVariantMap &props );
770 static QPointF rescaleUom( QPointF point,
QgsUnitTypes::RenderUnit unit, const QVariantMap &props )
SIP_PYNAME( rescalePointUom );
777 static QVector<qreal> rescaleUom( const QVector<qreal> &array,
QgsUnitTypes::RenderUnit unit, const QVariantMap &props )
SIP_PYNAME( rescaleArrayUom );
783 static
void applyScaleDependency( QDomDocument &doc, QDomElement &ruleElem, QVariantMap &props );
789 static
void mergeScaleDependencies(
double mScaleMinDenom,
double mScaleMaxDenom, QVariantMap &props );
797 static
void parametricSvgToSld( QDomDocument &doc, QDomElement &graphicElem,
799 const QColor &fillColor,
double size, const QColor &strokeColor,
double strokeWidth );
805 static QString getSvgParametricPath( const QString &basePath, const QColor &fillColor, const QColor &strokeColor,
double strokeWidth );
845 static QgsProperty scaleWholeSymbol(
double scaleFactorX,
double scaleFactorY,
const QgsProperty &property )
849 ( !
qgsDoubleNear( scaleFactorX, 0.0 ) ?
"tostring(" + QString::number( scaleFactorX ) +
"*(" + exprString +
"))" : QStringLiteral(
"'0'" ) ) +
851 ( !
qgsDoubleNear( scaleFactorY, 0.0 ) ?
"tostring(" + QString::number( scaleFactorY ) +
"*(" + exprString +
"))" : QStringLiteral(
"'0'" ) ) );
ScaleMethod
Scale methods.
HeadType
Possible head types.
ArrowType
Possible arrow types.
Abstract base class for color ramps.
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.
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.
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.
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.
VertexMarkerType
Editing vertex markers.
Abstract base class for all rendered symbols.
Helper functions for various unit types.
RenderUnit
Rendering size units.
GeometryType
The geometry types are used to group QgsWkbTypes::Type in a coarse way.
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
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
QMap< QString, QString > QgsStringMap
QMap< QString, QgsSymbol * > QgsSymbolMap
QList< QPolygonF > offsetLine(QPolygonF polyline, double dist, QgsWkbTypes::GeometryType geometryType)
calculate geometry shifted by a specified distance
QMap< QString, QgsSymbol * > QgsSymbolMap
QMap< QString, QString > QgsStringMap