QGIS API Documentation  master-6164ace
src/core/symbology-ng/qgssymbollayerv2utils.h
Go to the documentation of this file.
00001 /***************************************************************************
00002     qgssymbollayerv2utils.h
00003     ---------------------
00004     begin                : November 2009
00005     copyright            : (C) 2009 by Martin Dobias
00006     email                : wonder dot sk at gmail dot com
00007  ***************************************************************************
00008  *                                                                         *
00009  *   This program is free software; you can redistribute it and/or modify  *
00010  *   it under the terms of the GNU General Public License as published by  *
00011  *   the Free Software Foundation; either version 2 of the License, or     *
00012  *   (at your option) any later version.                                   *
00013  *                                                                         *
00014  ***************************************************************************/
00015 
00016 
00017 #ifndef QGSSYMBOLLAYERV2UTILS_H
00018 #define QGSSYMBOLLAYERV2UTILS_H
00019 
00020 #include <QMap>
00021 #include <Qt>
00022 #include <QtCore>
00023 #include <QFont>
00024 #include <QColor>
00025 #include "qgssymbolv2.h"
00026 #include "qgis.h"
00027 
00028 class QgsSymbolLayerV2;
00029 class QgsVectorColorRampV2;
00030 
00031 typedef QMap<QString, QString> QgsStringMap;
00032 typedef QMap<QString, QgsSymbolV2* > QgsSymbolV2Map;
00033 
00034 class QDomDocument;
00035 class QDomElement;
00036 class QIcon;
00037 class QPixmap;
00038 class QPointF;
00039 class QSize;
00040 
00041 class CORE_EXPORT QgsSymbolLayerV2Utils
00042 {
00043   public:
00044 
00045     static QString encodeColor( QColor color );
00046     static QColor decodeColor( QString str );
00047 
00048     static QString encodeSldAlpha( int alpha );
00049     static int decodeSldAlpha( QString str );
00050 
00051     static QString encodeSldFontStyle( QFont::Style style );
00052     static QFont::Style decodeSldFontStyle( QString str );
00053 
00054     static QString encodeSldFontWeight( int weight );
00055     static int decodeSldFontWeight( QString str );
00056 
00057     static QString encodePenStyle( Qt::PenStyle style );
00058     static Qt::PenStyle decodePenStyle( QString str );
00059 
00060     static QString encodePenJoinStyle( Qt::PenJoinStyle style );
00061     static Qt::PenJoinStyle decodePenJoinStyle( QString str );
00062 
00063     static QString encodePenCapStyle( Qt::PenCapStyle style );
00064     static Qt::PenCapStyle decodePenCapStyle( QString str );
00065 
00066     static QString encodeSldLineJoinStyle( Qt::PenJoinStyle style );
00067     static Qt::PenJoinStyle decodeSldLineJoinStyle( QString str );
00068 
00069     static QString encodeSldLineCapStyle( Qt::PenCapStyle style );
00070     static Qt::PenCapStyle decodeSldLineCapStyle( QString str );
00071 
00072     static QString encodeBrushStyle( Qt::BrushStyle style );
00073     static Qt::BrushStyle decodeBrushStyle( QString str );
00074 
00075     static QString encodeSldBrushStyle( Qt::BrushStyle style );
00076     static Qt::BrushStyle decodeSldBrushStyle( QString str );
00077 
00078     static QString encodePoint( QPointF point );
00079     static QPointF decodePoint( QString str );
00080 
00081     static QString encodeRealVector( const QVector<qreal>& v );
00082     static QVector<qreal> decodeRealVector( const QString& s );
00083 
00084     static QString encodeSldRealVector( const QVector<qreal>& v );
00085     static QVector<qreal> decodeSldRealVector( const QString& s );
00086 
00087     static QString encodeOutputUnit( QgsSymbolV2::OutputUnit unit );
00088     static QgsSymbolV2::OutputUnit decodeOutputUnit( QString str );
00089 
00090     static QString encodeSldUom( QgsSymbolV2::OutputUnit unit, double *scaleFactor );
00091     static QgsSymbolV2::OutputUnit decodeSldUom( QString str, double *scaleFactor );
00092 
00093     static QString encodeScaleMethod( QgsSymbolV2::ScaleMethod scaleMethod );
00094     static QgsSymbolV2::ScaleMethod decodeScaleMethod( QString str );
00095 
00096     static QIcon symbolPreviewIcon( QgsSymbolV2* symbol, QSize size );
00097     static QIcon symbolLayerPreviewIcon( QgsSymbolLayerV2* layer, QgsSymbolV2::OutputUnit u, QSize size );
00098     static QIcon colorRampPreviewIcon( QgsVectorColorRampV2* ramp, QSize size );
00099 
00100     static void drawStippledBackround( QPainter* painter, QRect rect );
00101 
00102     static QPixmap symbolPreviewPixmap( QgsSymbolV2* symbol, QSize size );
00103     static QPixmap colorRampPreviewPixmap( QgsVectorColorRampV2* ramp, QSize size );
00104 
00105     static QgsSymbolV2* loadSymbol( QDomElement& element );
00106     static QgsSymbolLayerV2* loadSymbolLayer( QDomElement& element );
00107     static QDomElement saveSymbol( QString symbolName, QgsSymbolV2* symbol, QDomDocument& doc );
00108 
00109     static bool createSymbolLayerV2ListFromSld( QDomElement& element, QGis::GeometryType geomType, QgsSymbolLayerV2List &layers );
00110 
00111     static QgsSymbolLayerV2* createFillLayerFromSld( QDomElement &element );
00112     static QgsSymbolLayerV2* createLineLayerFromSld( QDomElement &element );
00113     static QgsSymbolLayerV2* createMarkerLayerFromSld( QDomElement &element );
00114 
00115     static bool convertPolygonSymbolizerToPointMarker( QDomElement &element, QgsSymbolLayerV2List &layerList );
00116     static bool hasExternalGraphic( QDomElement &element );
00117     static bool hasWellKnownMark( QDomElement &element );
00118 
00119     static bool needFontMarker( QDomElement &element );
00120     static bool needSvgMarker( QDomElement &element );
00121     static bool needEllipseMarker( QDomElement &element );
00122     static bool needMarkerLine( QDomElement &element );
00123     static bool needLinePatternFill( QDomElement &element );
00124     static bool needPointPatternFill( QDomElement &element );
00125     static bool needSvgFill( QDomElement &element );
00126 
00127     static void fillToSld( QDomDocument &doc, QDomElement &element,
00128                            Qt::BrushStyle brushStyle, QColor color = QColor() );
00129     static bool fillFromSld( QDomElement &element,
00130                              Qt::BrushStyle &brushStyle, QColor &color );
00131 
00133     static void lineToSld( QDomDocument &doc, QDomElement &element,
00134                            Qt::PenStyle penStyle, QColor color, double width = -1,
00135                            const Qt::PenJoinStyle *penJoinStyle = 0, const Qt::PenCapStyle *penCapStyle = 0,
00136                            const QVector<qreal> *customDashPattern = 0, double dashOffset = 0.0 );
00137     static bool lineFromSld( QDomElement &element,
00138                              Qt::PenStyle &penStyle, QColor &color, double &width,
00139                              Qt::PenJoinStyle *penJoinStyle = 0, Qt::PenCapStyle *penCapStyle = 0,
00140                              QVector<qreal> *customDashPattern = 0, double *dashOffset = 0 );
00141 
00142     static void externalGraphicToSld( QDomDocument &doc, QDomElement &element,
00143                                       QString path, QString mime,
00144                                       QColor color, double size = -1 );
00145     static bool externalGraphicFromSld( QDomElement &element,
00146                                         QString &path, QString &mime,
00147                                         QColor &color, double &size );
00148 
00149     static void wellKnownMarkerToSld( QDomDocument &doc, QDomElement &element,
00150                                       QString name, QColor color, QColor borderColor = QColor(),
00151                                       double borderWidth = -1, double size = -1 );
00152     static bool wellKnownMarkerFromSld( QDomElement &element,
00153                                         QString &name, QColor &color, QColor &borderColor,
00154                                         double &borderWidth, double &size );
00155 
00156     static void externalMarkerToSld( QDomDocument &doc, QDomElement &element,
00157                                      QString path, QString format, int *markIndex = 0,
00158                                      QColor color = QColor(), double size = -1 );
00159     static bool externalMarkerFromSld( QDomElement &element,
00160                                        QString &path, QString &format, int &markIndex,
00161                                        QColor &color, double &size );
00162 
00163 
00164     static void labelTextToSld( QDomDocument &doc, QDomElement &element, QString label,
00165                                 QFont font, QColor color = QColor(), double size = -1 );
00166 
00168     static QString ogrFeatureStylePen( double width, double mmScaleFactor, double mapUnitsScaleFactor, const QColor& c,
00169                                        Qt::PenJoinStyle joinStyle = Qt::MiterJoin,
00170                                        Qt::PenCapStyle capStyle = Qt::FlatCap,
00171                                        double offset = 0.0,
00172                                        const QVector<qreal>* dashPattern = 0 );
00175     static QString ogrFeatureStyleBrush( const QColor& fillColr );
00176 
00177     static void createRotationElement( QDomDocument &doc, QDomElement &element, QString rotationFunc );
00178     static bool rotationFromSldElement( QDomElement &element, QString &rotationFunc );
00179 
00180     static void createOpacityElement( QDomDocument &doc, QDomElement &element, QString alphaFunc );
00181     static bool opacityFromSldElement( QDomElement &element, QString &alphaFunc );
00182 
00183     static void createDisplacementElement( QDomDocument &doc, QDomElement &element, QPointF offset );
00184     static bool displacementFromSldElement( QDomElement &element, QPointF &offset );
00185 
00186     static void createOnlineResourceElement( QDomDocument &doc, QDomElement &element, QString path, QString format );
00187     static bool onlineResourceFromSldElement( QDomElement &element, QString &path, QString &format );
00188 
00189     static void createGeometryElement( QDomDocument &doc, QDomElement &element, QString geomFunc );
00190     static bool geometryFromSldElement( QDomElement &element, QString &geomFunc );
00191 
00192     static bool createFunctionElement( QDomDocument &doc, QDomElement &element, QString function );
00193     static bool functionFromSldElement( QDomElement &element, QString &function );
00194 
00195     static QDomElement createSvgParameterElement( QDomDocument &doc, QString name, QString value );
00196     static QgsStringMap getSvgParameterList( QDomElement &element );
00197 
00198     static QDomElement createVendorOptionElement( QDomDocument &doc, QString name, QString value );
00199     static QgsStringMap getVendorOptionList( QDomElement &element );
00200 
00201     static QgsStringMap parseProperties( QDomElement& element );
00202     static void saveProperties( QgsStringMap props, QDomDocument& doc, QDomElement& element );
00203 
00204     static QgsSymbolV2Map loadSymbols( QDomElement& element );
00205     static QDomElement saveSymbols( QgsSymbolV2Map& symbols, QString tagName, QDomDocument& doc );
00206 
00207     static void clearSymbolMap( QgsSymbolV2Map& symbols );
00208 
00209     static QgsVectorColorRampV2* loadColorRamp( QDomElement& element );
00210     static QDomElement saveColorRamp( QString name, QgsVectorColorRampV2* ramp, QDomDocument& doc );
00211 
00213     static QColor parseColor( QString colorStr );
00214 
00216     static double lineWidthScaleFactor( const QgsRenderContext& c, QgsSymbolV2::OutputUnit u );
00218     static double pixelSizeScaleFactor( const QgsRenderContext& c, QgsSymbolV2::OutputUnit u );
00220     static QgsRenderContext createRenderContext( QPainter* p );
00221 
00223     static void multiplyImageOpacity( QImage* image, qreal alpha );
00224 
00228     static void blurImageInPlace( QImage& image, const QRect& rect, int radius, bool alphaOnly );
00229 
00231     static void sortVariantList( QList<QVariant>& list, Qt::SortOrder order );
00233     static QPointF pointOnLineWithDistance( const QPointF& startPoint, const QPointF& directionPoint, double distance );
00234 
00236     static QStringList listSvgFiles();
00237 
00239     static QStringList listSvgFilesAt( QString directory );
00240 
00242     static QString symbolNameToPath( QString name );
00243 
00245     static QString symbolPathToName( QString path );
00246 };
00247 
00248 class QPolygonF;
00249 
00251 QPolygonF offsetLine( QPolygonF polyline, double dist );
00252 
00253 
00254 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines