|
QGIS API Documentation
master-6164ace
|
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