QGIS API Documentation  2.8.2-Wien
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
qgsmarkersymbollayerv2.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsmarkersymbollayerv2.h
3  ---------------------
4  begin : November 2009
5  copyright : (C) 2009 by Martin Dobias
6  email : wonder dot sk at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
16 #ifndef QGSMARKERSYMBOLLAYERV2_H
17 #define QGSMARKERSYMBOLLAYERV2_H
18 
19 #include "qgssymbollayerv2.h"
20 #include "qgsvectorlayer.h"
21 
22 #define DEFAULT_SIMPLEMARKER_NAME "circle"
23 #define DEFAULT_SIMPLEMARKER_COLOR QColor(255,0,0)
24 #define DEFAULT_SIMPLEMARKER_BORDERCOLOR QColor(0,0,0)
25 #define DEFAULT_SIMPLEMARKER_SIZE DEFAULT_POINT_SIZE
26 #define DEFAULT_SIMPLEMARKER_ANGLE 0
27 
28 #include <QPen>
29 #include <QBrush>
30 #include <QPicture>
31 #include <QPolygonF>
32 #include <QFont>
33 
35 {
36  public:
38  QColor color = DEFAULT_SIMPLEMARKER_COLOR,
39  QColor borderColor = DEFAULT_SIMPLEMARKER_BORDERCOLOR,
43 
44  // static stuff
45 
46  static QgsSymbolLayerV2* create( const QgsStringMap& properties = QgsStringMap() );
47  static QgsSymbolLayerV2* createFromSld( QDomElement &element );
48 
49  // implemented from base classes
50 
51  QString layerType() const override;
52 
53  void startRender( QgsSymbolV2RenderContext& context ) override;
54 
55  void stopRender( QgsSymbolV2RenderContext& context ) override;
56 
57  void renderPoint( const QPointF& point, QgsSymbolV2RenderContext& context ) override;
58 
59  QgsStringMap properties() const override;
60 
61  QgsSymbolLayerV2* clone() const override;
62 
63  void writeSldMarker( QDomDocument &doc, QDomElement &element, QgsStringMap props ) const override;
64 
65  QString ogrFeatureStyle( double mmScaleFactor, double mapUnitScaleFactor ) const override;
66 
67  QString name() const { return mName; }
68  void setName( QString name ) { mName = name; }
69 
70  QColor borderColor() const { return mBorderColor; }
71  void setBorderColor( QColor color ) { mBorderColor = color; }
72 
73  Qt::PenStyle outlineStyle() const { return mOutlineStyle; }
74  void setOutlineStyle( Qt::PenStyle outlineStyle ) { mOutlineStyle = outlineStyle; }
75 
78  QColor outlineColor() const override { return borderColor(); }
81  void setOutlineColor( const QColor& color ) override { setBorderColor( color ); }
82 
85  QColor fillColor() const override { return color(); }
88  void setFillColor( const QColor& color ) override { setColor( color ); }
89 
90  double outlineWidth() const { return mOutlineWidth; }
91  void setOutlineWidth( double w ) { mOutlineWidth = w; }
92 
93  void setOutlineWidthUnit( QgsSymbolV2::OutputUnit u ) { mOutlineWidthUnit = u; }
94  QgsSymbolV2::OutputUnit outlineWidthUnit() const { return mOutlineWidthUnit; }
95 
96  void setOutlineWidthMapUnitScale( const QgsMapUnitScale& scale ) { mOutlineWidthMapUnitScale = scale; }
97  const QgsMapUnitScale& outlineWidthMapUnitScale() const { return mOutlineWidthMapUnitScale; }
98 
99  bool writeDxf( QgsDxfExport& e, double mmMapUnitScaleFactor, const QString& layerName, const QgsSymbolV2RenderContext* context, const QgsFeature* f, const QPointF& shift = QPointF( 0.0, 0.0 ) ) const override;
100 
101  void setOutputUnit( QgsSymbolV2::OutputUnit unit ) override;
102  QgsSymbolV2::OutputUnit outputUnit() const override;
103 
104  void setMapUnitScale( const QgsMapUnitScale& scale ) override;
105  QgsMapUnitScale mapUnitScale() const override;
106 
107  protected:
108  void drawMarker( QPainter* p, QgsSymbolV2RenderContext& context );
109 
110  bool prepareShape( QString name = QString() );
111  bool preparePath( QString name = QString() );
112 
115  bool prepareCache( QgsSymbolV2RenderContext& context );
116 
117  QColor mBorderColor;
118  Qt::PenStyle mOutlineStyle;
122  QPen mPen;
123  QBrush mBrush;
124  QPolygonF mPolygon;
125  QPainterPath mPath;
126  QString mName;
127  QImage mCache;
128  QPen mSelPen;
129  QBrush mSelBrush;
130  QImage mSelCache;
132 
133  //Maximum width/height of cache image
134  static const int mMaximumCacheWidth = 3000;
135 
136  static const QString EXPR_SIZE;
137 
138  private:
139  QgsExpression *mAngleExpression;
140  QgsExpression *mNameExpression;
141 };
142 
144 
145 #define DEFAULT_SVGMARKER_NAME "/crosses/Star1.svg"
146 #define DEFAULT_SVGMARKER_SIZE 2*DEFAULT_POINT_SIZE
147 #define DEFAULT_SVGMARKER_ANGLE 0
148 
150 {
151  public:
153  double size = DEFAULT_SVGMARKER_SIZE,
156 
157  // static stuff
158 
159  static QgsSymbolLayerV2* create( const QgsStringMap& properties = QgsStringMap() );
160  static QgsSymbolLayerV2* createFromSld( QDomElement &element );
161 
162  // implemented from base classes
163 
164  QString layerType() const override;
165 
166  void startRender( QgsSymbolV2RenderContext& context ) override;
167 
168  void stopRender( QgsSymbolV2RenderContext& context ) override;
169 
170  void renderPoint( const QPointF& point, QgsSymbolV2RenderContext& context ) override;
171 
172  QgsStringMap properties() const override;
173 
174  QgsSymbolLayerV2* clone() const override;
175 
176  void writeSldMarker( QDomDocument &doc, QDomElement &element, QgsStringMap props ) const override;
177 
178  QString path() const { return mPath; }
179  void setPath( QString path );
180 
181  QColor fillColor() const override { return mFillColor; }
182  void setFillColor( const QColor& c ) override { mFillColor = c; }
183 
184  QColor outlineColor() const override { return mOutlineColor; }
185  void setOutlineColor( const QColor& c ) override { mOutlineColor = c; }
186 
187  double outlineWidth() const { return mOutlineWidth; }
188  void setOutlineWidth( double w ) { mOutlineWidth = w; }
189 
190  void setOutlineWidthUnit( QgsSymbolV2::OutputUnit unit ) { mOutlineWidthUnit = unit; }
191  QgsSymbolV2::OutputUnit outlineWidthUnit() const { return mOutlineWidthUnit; }
192 
193  void setOutlineWidthMapUnitScale( const QgsMapUnitScale& scale ) { mOutlineWidthMapUnitScale = scale; }
194  const QgsMapUnitScale& outlineWidthMapUnitScale() const { return mOutlineWidthMapUnitScale; }
195 
196  void setOutputUnit( QgsSymbolV2::OutputUnit unit ) override;
197  QgsSymbolV2::OutputUnit outputUnit() const override;
198 
199  void setMapUnitScale( const QgsMapUnitScale& scale ) override;
200  QgsMapUnitScale mapUnitScale() const override;
201 
202  bool writeDxf( QgsDxfExport& e, double mmMapUnitScaleFactor, const QString& layerName, const QgsSymbolV2RenderContext* context, const QgsFeature* f, const QPointF& shift = QPointF( 0.0, 0.0 ) ) const override;
203 
204  protected:
205  QString mPath;
206 
207  //param(fill), param(outline), param(outline-width) are going
208  //to be replaced in memory
209  QColor mFillColor;
214 };
215 
216 
218 
219 #define POINT2MM(x) ( (x) * 25.4 / 72 ) // point is 1/72 of inch
220 #define MM2POINT(x) ( (x) * 72 / 25.4 )
221 
222 #define DEFAULT_FONTMARKER_FONT "Dingbats"
223 #define DEFAULT_FONTMARKER_CHR QChar('A')
224 #define DEFAULT_FONTMARKER_SIZE POINT2MM(12)
225 #define DEFAULT_FONTMARKER_COLOR QColor(Qt::black)
226 #define DEFAULT_FONTMARKER_ANGLE 0
227 
229 {
230  public:
232  QChar chr = DEFAULT_FONTMARKER_CHR,
233  double pointSize = DEFAULT_FONTMARKER_SIZE,
234  QColor color = DEFAULT_FONTMARKER_COLOR,
235  double angle = DEFAULT_FONTMARKER_ANGLE );
236 
237  // static stuff
238 
239  static QgsSymbolLayerV2* create( const QgsStringMap& properties = QgsStringMap() );
240  static QgsSymbolLayerV2* createFromSld( QDomElement &element );
241 
242  // implemented from base classes
243 
244  QString layerType() const override;
245 
246  void startRender( QgsSymbolV2RenderContext& context ) override;
247 
248  void stopRender( QgsSymbolV2RenderContext& context ) override;
249 
250  void renderPoint( const QPointF& point, QgsSymbolV2RenderContext& context ) override;
251 
252  QgsStringMap properties() const override;
253 
254  QgsSymbolLayerV2* clone() const override;
255 
256  void writeSldMarker( QDomDocument &doc, QDomElement &element, QgsStringMap props ) const override;
257 
258  // new methods
259 
260  QString fontFamily() const { return mFontFamily; }
261  void setFontFamily( QString family ) { mFontFamily = family; }
262 
263  QChar character() const { return mChr; }
264  void setCharacter( QChar ch ) { mChr = ch; }
265 
266  protected:
267 
268  QString mFontFamily;
269  QChar mChr;
270 
271  QPointF mChrOffset;
272  QFont mFont;
273  double mOrigSize;
274 };
275 
276 
277 #endif
278 
279