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