17 #ifndef QGSSYMBOLLAYERUTILS_H
18 #define QGSSYMBOLLAYERUTILS_H
20 #include "qgis_core.h"
61 static QString encodeColor(
const QColor &color );
62 static QColor decodeColor(
const QString &
str );
64 static QString encodeSldAlpha(
int alpha );
65 static int decodeSldAlpha(
const QString &
str );
67 static QString encodeSldFontStyle( QFont::Style style );
68 static QFont::Style decodeSldFontStyle(
const QString &
str );
70 static QString encodeSldFontWeight(
int weight );
71 static int decodeSldFontWeight(
const QString &
str );
73 static QString encodePenStyle( Qt::PenStyle style );
74 static Qt::PenStyle decodePenStyle(
const QString &
str );
76 static QString encodePenJoinStyle( Qt::PenJoinStyle style );
77 static Qt::PenJoinStyle decodePenJoinStyle(
const QString &
str );
79 static QString encodePenCapStyle( Qt::PenCapStyle style );
80 static Qt::PenCapStyle decodePenCapStyle(
const QString &
str );
82 static QString encodeSldLineJoinStyle( Qt::PenJoinStyle style );
83 static Qt::PenJoinStyle decodeSldLineJoinStyle(
const QString &
str );
85 static QString encodeSldLineCapStyle( Qt::PenCapStyle style );
86 static Qt::PenCapStyle decodeSldLineCapStyle(
const QString &
str );
88 static QString encodeBrushStyle( Qt::BrushStyle style );
89 static Qt::BrushStyle decodeBrushStyle(
const QString &
str );
91 static QString encodeSldBrushStyle( Qt::BrushStyle style );
92 static Qt::BrushStyle decodeSldBrushStyle(
const QString &
str );
111 static QString encodePoint( QPointF point );
118 static QPointF decodePoint(
const QString &
string );
132 static QPointF toPoint(
const QVariant &value,
bool *ok
SIP_OUT =
nullptr );
140 static QString encodeSize( QSizeF size );
148 static QSizeF decodeSize(
const QString &
string );
162 static QSizeF toSize(
const QVariant &value,
bool *ok
SIP_OUT =
nullptr );
164 static QString encodeMapUnitScale(
const QgsMapUnitScale &mapUnitScale );
167 static QString encodeRealVector(
const QVector<qreal> &v );
168 static QVector<qreal> decodeRealVector(
const QString &s );
170 static QString encodeSldRealVector(
const QVector<qreal> &v );
171 static QVector<qreal> decodeSldRealVector(
const QString &s );
198 static double sizeInPixelsFromSldUom(
const QString &uom,
double size );
214 static QPainter::CompositionMode decodeBlendMode(
const QString &s );
241 static QPixmap symbolPreviewPixmap(
const QgsSymbol *symbol, QSize size,
int padding = 0,
QgsRenderContext *customContext =
nullptr,
bool selected =
false,
277 static QIcon colorRampPreviewIcon(
QgsColorRamp *ramp, QSize size,
int padding = 0 );
291 static QPixmap colorRampPreviewPixmap(
QgsColorRamp *ramp, QSize size,
int padding = 0, Qt::Orientation direction = Qt::Horizontal,
292 bool flipDirection =
false,
bool drawTransparentBackground =
true );
294 static void drawStippledBackground( QPainter *painter, QRect rect );
300 static void drawVertexMarker(
double x,
double y, QPainter &p,
Qgis::VertexMarkerType type,
int markerSize );
324 SymbolType *symbolCastToType =
dynamic_cast<SymbolType *
>( tmpSymbol );
326 if ( symbolCastToType )
328 return symbolCastToType;
341 static QDomElement saveSymbol(
const QString &symbolName,
const QgsSymbol *symbol, QDomDocument &doc,
const QgsReadWriteContext &context );
348 static QString symbolProperties(
QgsSymbol *symbol );
353 static bool createSymbolLayerListFromSld( QDomElement &element,
QgsWkbTypes::GeometryType geomType, QList<QgsSymbolLayer *> &layers );
362 static bool convertPolygonSymbolizerToPointMarker( QDomElement &element, QList<QgsSymbolLayer *> &layerList );
363 static bool hasExternalGraphic( QDomElement &element );
364 static bool hasWellKnownMark( QDomElement &element );
366 static bool needFontMarker( QDomElement &element );
367 static bool needSvgMarker( QDomElement &element );
368 static bool needEllipseMarker( QDomElement &element );
369 static bool needMarkerLine( QDomElement &element );
370 static bool needLinePatternFill( QDomElement &element );
371 static bool needPointPatternFill( QDomElement &element );
372 static bool needSvgFill( QDomElement &element );
374 static void fillToSld( QDomDocument &doc, QDomElement &element,
375 Qt::BrushStyle brushStyle,
const QColor &color = QColor() );
376 static bool fillFromSld( QDomElement &element,
377 Qt::BrushStyle &brushStyle, QColor &color );
380 static void lineToSld( QDomDocument &doc, QDomElement &element,
381 Qt::PenStyle penStyle,
const QColor &color,
double width = -1,
382 const Qt::PenJoinStyle *penJoinStyle =
nullptr,
const Qt::PenCapStyle *penCapStyle =
nullptr,
383 const QVector<qreal> *customDashPattern =
nullptr,
double dashOffset = 0.0 )
SIP_SKIP;
384 static
bool lineFromSld( QDomElement &element,
385 Qt::PenStyle &penStyle, QColor &color,
double &width,
386 Qt::PenJoinStyle *penJoinStyle =
nullptr, Qt::PenCapStyle *penCapStyle =
nullptr,
387 QVector<qreal> *customDashPattern =
nullptr,
double *dashOffset =
nullptr );
389 static
void externalGraphicToSld( QDomDocument &doc, QDomElement &element,
390 const QString &path, const QString &mime,
391 const QColor &color,
double size = -1 );
392 static
bool externalGraphicFromSld( QDomElement &element,
393 QString &path, QString &mime,
394 QColor &color,
double &size );
396 static
void wellKnownMarkerToSld( QDomDocument &doc, QDomElement &element,
397 const QString &name, const QColor &color, const QColor &strokeColor, Qt::PenStyle strokeStyle,
398 double strokeWidth = -1,
double size = -1 );
401 static
bool wellKnownMarkerFromSld( QDomElement &element,
402 QString &name, QColor &color, QColor &strokeColor, Qt::PenStyle &strokeStyle,
403 double &strokeWidth,
double &size )
SIP_PYNAME( wellKnownMarkerFromSld2 );
405 static
void externalMarkerToSld( QDomDocument &doc, QDomElement &element,
406 const QString &path, const QString &format,
int *markIndex =
nullptr,
407 const QColor &color = QColor(),
double size = -1 );
408 static
bool externalMarkerFromSld( QDomElement &element,
409 QString &path, QString &format,
int &markIndex,
410 QColor &color,
double &size );
413 static
void labelTextToSld( QDomDocument &doc, QDomElement &element, const QString &label,
414 const QFont &font, const QColor &color = QColor(),
double size = -1 );
417 static QString ogrFeatureStylePen(
double width,
double mmScaleFactor,
double mapUnitsScaleFactor, const QColor &
c,
418 Qt::PenJoinStyle joinStyle = Qt::MiterJoin,
419 Qt::PenCapStyle capStyle = Qt::FlatCap,
421 const QVector<qreal> *dashPattern =
nullptr );
427 static QString ogrFeatureStyleBrush( const QColor &fillColr );
429 static
void createRotationElement( QDomDocument &doc, QDomElement &element, const QString &rotationFunc );
430 static
bool rotationFromSldElement( QDomElement &element, QString &rotationFunc );
432 static
void createOpacityElement( QDomDocument &doc, QDomElement &element, const QString &alphaFunc );
433 static
bool opacityFromSldElement( QDomElement &element, QString &alphaFunc );
435 static
void createDisplacementElement( QDomDocument &doc, QDomElement &element, QPointF offset );
436 static
bool displacementFromSldElement( QDomElement &element, QPointF &offset );
444 static
void createAnchorPointElement( QDomDocument &doc, QDomElement &element, QPointF anchor );
446 static
void createOnlineResourceElement( QDomDocument &doc, QDomElement &element, const QString &path, const QString &format );
447 static
bool onlineResourceFromSldElement( QDomElement &element, QString &path, QString &format );
449 static
void createGeometryElement( QDomDocument &doc, QDomElement &element, const QString &geomFunc );
450 static
bool geometryFromSldElement( QDomElement &element, QString &geomFunc );
458 static
bool createExpressionElement( QDomDocument &doc, QDomElement &element, const QString &function );
459 static
bool createFunctionElement( QDomDocument &doc, QDomElement &element, const QString &function );
460 static
bool functionFromSldElement( QDomElement &element, QString &function );
462 static QDomElement createSvgParameterElement( QDomDocument &doc, const QString &name, const QString &value );
463 static
QgsStringMap getSvgParameterList( QDomElement &element );
465 static QDomElement createVendorOptionElement( QDomDocument &doc, const QString &name, const QString &value );
466 static
QgsStringMap getVendorOptionList( QDomElement &element );
469 static QVariantMap parseProperties( const QDomElement &element );
471 static
void saveProperties( QVariantMap props, QDomDocument &doc, QDomElement &element );
513 static QDomElement saveColorRamp( const QString &name,
QgsColorRamp *ramp, QDomDocument &doc );
521 static QVariant colorRampToVariant( const QString &name,
QgsColorRamp *ramp );
537 static QString colorToName( const QColor &color );
546 static QList< QColor > parseColorList( const QString &colorStr );
555 static QMimeData *colorToMimeData( const QColor &color )
SIP_FACTORY;
565 static QColor colorFromMimeData( const QMimeData *data,
bool &hasAlpha
SIP_OUT );
592 static
bool saveColorsToGpl( QFile &file, const QString &paletteName, const
QgsNamedColorList &colors );
602 static
QgsNamedColorList importColorsFromGpl( QFile &file,
bool &ok, QString &name );
612 static QColor parseColor( const QString &colorStr,
bool strictEval = false );
623 static QColor parseColorWithAlpha( const QString &colorStr,
bool &containsAlpha,
bool strictEval = false );
628 static
void multiplyImageOpacity( QImage *image, qreal opacity );
631 static
void blurImageInPlace( QImage &image, QRect rect,
int radius,
bool alphaOnly );
637 static
void premultiplyColor( QColor &rgb,
int alpha );
654 static
void sortVariantList( QList<QVariant> &list, Qt::SortOrder order );
656 static QPointF pointOnLineWithDistance( QPointF startPoint, QPointF directionPoint,
double distance );
659 static QStringList listSvgFiles();
662 static QStringList listSvgFilesAt( const QString &directory );
670 static QString svgSymbolNameToPath( const QString &name, const
QgsPathResolver &pathResolver );
676 static QString svgSymbolPathToName( const QString &path, const
QgsPathResolver &pathResolver );
679 static QPointF polygonCentroid( const QPolygonF &points );
682 static QPointF polygonPointOnSurface( const QPolygonF &points, const QVector<QPolygonF> *rings =
nullptr );
685 static
bool pointInPolygon( const QPolygonF &points, QPointF point );
692 static
double polylineLength( const QPolygonF &polyline );
706 static QPolygonF polylineSubstring( const QPolygonF &polyline,
double startOffset,
double endOffset );
715 static
bool isSharpCorner( QPointF p1, QPointF p2, QPointF p3 );
724 static
void appendPolyline( QPolygonF &target, const QPolygonF &line );
742 static QString fieldOrExpressionFromExpression(
QgsExpression *expression );
750 static QList<
double> prettyBreaks(
double minimum,
double maximum,
int classes );
757 static
double rescaleUom(
double size,
QgsUnitTypes::RenderUnit unit, const QVariantMap &props );
764 static QPointF rescaleUom( QPointF point,
QgsUnitTypes::RenderUnit unit, const QVariantMap &props )
SIP_PYNAME( rescalePointUom );
771 static QVector<qreal> rescaleUom( const QVector<qreal> &array,
QgsUnitTypes::RenderUnit unit, const QVariantMap &props )
SIP_PYNAME( rescaleArrayUom );
777 static
void applyScaleDependency( QDomDocument &doc, QDomElement &ruleElem, QVariantMap &props );
783 static
void mergeScaleDependencies(
double mScaleMinDenom,
double mScaleMaxDenom, QVariantMap &props );
791 static
void parametricSvgToSld( QDomDocument &doc, QDomElement &graphicElem,
793 const QColor &fillColor,
double size, const QColor &strokeColor,
double strokeWidth );
799 static QString getSvgParametricPath( const QString &basePath, const QColor &fillColor, const QColor &strokeColor,
double strokeWidth );
839 static QgsProperty scaleWholeSymbol(
double scaleFactorX,
double scaleFactorY,
const QgsProperty &property )
843 ( !
qgsDoubleNear( scaleFactorX, 0.0 ) ?
"tostring(" + QString::number( scaleFactorX ) +
"*(" + exprString +
"))" : QStringLiteral(
"'0'" ) ) +
845 ( !
qgsDoubleNear( scaleFactorY, 0.0 ) ?
"tostring(" + QString::number( scaleFactorY ) +
"*(" + exprString +
"))" : QStringLiteral(
"'0'" ) ) );
ScaleMethod
Scale methods.
VertexMarkerType
Editing vertex markers, used for showing vertices during a edit operation.
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.
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