-
-
Notifications
You must be signed in to change notification settings - Fork 3k
/
qgsmarkersymbollayerv2.sip
557 lines (452 loc) · 20.3 KB
/
qgsmarkersymbollayerv2.sip
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
/** \ingroup core
* \class QgsSimpleMarkerSymbolLayerBase
* \brief Abstract base class for simple marker symbol layers. Handles creation of the symbol shapes but
* leaves the actual drawing of the symbols to subclasses.
* \note Added in version 2.16
*/
class QgsSimpleMarkerSymbolLayerBase : QgsMarkerSymbolLayerV2
{
%TypeHeaderCode
#include <qgsmarkersymbollayerv2.h>
%End
public:
//! Marker symbol shapes
enum Shape
{
Square, /*!< Square */
Diamond, /*!< Diamond */
Pentagon, /*!< Pentagon */
Hexagon, /*!< Hexagon */
Triangle, /*!< Triangle */
EquilateralTriangle, /*!< Equilateral triangle*/
Star, /*!< Star*/
Arrow, /*!< Arrow*/
Circle, /*!< Circle*/
Cross, /*!< Cross (lines only)*/
CrossFill, /*!< Solid filled cross*/
Cross2, /*!< Rotated cross (lines only), "x" shape*/
Line, /*!< Vertical line*/
ArrowHead, /*!< Right facing arrow head (unfilled, lines only)*/
ArrowHeadFilled, /*!< Right facing filled arrow head*/
SemiCircle, /*!< Semi circle (top half)*/
ThirdCircle, /*!< One third circle (top left third)*/
QuarterCircle, /*!< Quarter circle (top left quarter)*/
QuarterSquare, /*!< Quarter square (top left quarter)*/
HalfSquare, /*!< Half square (left half)*/
DiagonalHalfSquare, /*!< Diagonal half square (bottom left half)*/
RightHalfTriangle, /*!< Right half of triangle*/
LeftHalfTriangle, /*!< Left half of triangle*/
};
//! Returns a list of all available shape types.
static QList< QgsSimpleMarkerSymbolLayerBase::Shape > availableShapes();
/** Returns true if a symbol shape has a fill.
* @param shape shape to test
* @returns true if shape uses a fill, or false if shape uses lines only
*/
static bool shapeIsFilled( Shape shape );
/** Constructor for QgsSimpleMarkerSymbolLayerBase.
* @param shape symbol shape for markers
* @param size symbol size (in mm)
* @param angle symbol rotation angle
* @param scaleMethod scaling method for data defined scaling
*/
QgsSimpleMarkerSymbolLayerBase( Shape shape = Circle,
double size = DEFAULT_SIMPLEMARKER_SIZE,
double angle = DEFAULT_SIMPLEMARKER_ANGLE,
QgsSymbolV2::ScaleMethod scaleMethod = DEFAULT_SCALE_METHOD );
/** Returns the shape for the rendered marker symbol.
* @see setShape()
*/
Shape shape() const;
/** Sets the rendered marker shape.
* @param shape new marker shape
* @see shape()
*/
void setShape( Shape shape );
/** Attempts to decode a string representation of a shape name to the corresponding
* shape.
* @param name encoded shape name
* @param ok if specified, will be set to true if shape was successfully decoded
* @return decoded name
* @see encodeShape()
*/
static Shape decodeShape( const QString& name, bool* ok = nullptr );
/** Encodes a shape to its string representation.
* @param shape shape to encode
* @returns encoded string
* @see decodeShape()
*/
static QString encodeShape( Shape shape );
void startRender( QgsSymbolV2RenderContext& context );
void stopRender( QgsSymbolV2RenderContext& context );
void renderPoint( QPointF point, QgsSymbolV2RenderContext& context );
QRectF bounds( QPointF point, QgsSymbolV2RenderContext& context );
protected:
//! Prepares the layer for drawing the specified shape (QPolygonF version)
bool prepareMarkerShape( Shape shape );
//! Prepares the layer for drawing the specified shape (QPainterPath version)
bool prepareMarkerPath( Shape symbol );
/** Creates a polygon representing the specified shape.
* @param shape shape to create
* @param polygon destination polygon for shape
* @returns true if shape was successfully stored in polygon
*/
bool shapeToPolygon( Shape shape, QPolygonF &polygon ) const;
/** Calculates the desired size of the marker, considering data defined size overrides.
* @param context symbol render context
* @param hasDataDefinedSize will be set to true if marker uses data defined sizes
* @returns marker size, in original size units
*/
double calculateSize( QgsSymbolV2RenderContext& context, bool& hasDataDefinedSize ) const;
/** Calculates the marker offset and rotation.
* @param context symbol render context
* @param scaledSize size of symbol to render
* @param hasDataDefinedRotation will be set to true if marker has data defined rotation
* @param offset will be set to calculated marker offset (in painter units)
* @param angle will be set to calculated marker angle
*/
void calculateOffsetAndRotation( QgsSymbolV2RenderContext& context, double scaledSize, bool& hasDataDefinedRotation, QPointF& offset, double& angle ) const;
private:
/** Derived classes must implement draw() to handle drawing the generated shape onto the painter surface.
* @param context symbol render context
* @param shape shape to draw
* @param polygon polygon representing transformed marker shape. May be empty, in which case the shape will be specified
* in the path argument.
* @param path transformed painter path representing shape to draw
*/
virtual void draw( QgsSymbolV2RenderContext& context, Shape shape, const QPolygonF& polygon, const QPainterPath& path ) = 0;
};
/** \ingroup core
* \class QgsSimpleMarkerSymbolLayerV2
* \brief Simple marker symbol layer, consisting of a rendered shape with solid fill color and an outline.
*/
class QgsSimpleMarkerSymbolLayerV2 : QgsSimpleMarkerSymbolLayerBase
{
%TypeHeaderCode
#include <qgsmarkersymbollayerv2.h>
%End
public:
/** Constructor for QgsSimpleMarkerSymbolLayerV2.
* @param name symbol name, should be one of "square", "rectangle", "diamond",
* "pentagon", "hexagon", "triangle", "equilateral_triangle", "star", "arrow",
* "circle", "cross", "cross_fill", "cross2", "line", "x", "arrowhead", "filled_arrowhead",
* "semi_circle", "third_circle", "quarter_circle", "quarter_square", "half_square",
* "diagonal_half_square", "right_half_triangle", "left_half_triangle"
* @param color fill color for symbol
* @param borderColor border color for symbol
* @param size symbol size (in mm)
* @param angle symbol rotation angle
* @param scaleMethod scaling method for data defined scaling
* @param penJoinStyle join style for outline pen
* @deprecated use variant which accepts QgsSimpleMarkerSymbolLayerBase::Shape instead
*/
QgsSimpleMarkerSymbolLayerV2( const QString& name,
const QColor& color = DEFAULT_SIMPLEMARKER_COLOR,
const QColor& borderColor = DEFAULT_SIMPLEMARKER_BORDERCOLOR,
double size = DEFAULT_SIMPLEMARKER_SIZE,
double angle = DEFAULT_SIMPLEMARKER_ANGLE,
QgsSymbolV2::ScaleMethod scaleMethod = DEFAULT_SCALE_METHOD,
Qt::PenJoinStyle penJoinStyle = DEFAULT_SIMPLEMARKER_JOINSTYLE ) /Deprecated/;
/** Constructor for QgsSimpleMarkerSymbolLayerV2.
* @param shape symbol shape
* @param size symbol size (in mm)
* @param angle symbol rotation angle
* @param scaleMethod scaling method for data defined scaling
* @param color fill color for symbol
* @param borderColor border color for symbol
* @param penJoinStyle join style for outline pen
*/
QgsSimpleMarkerSymbolLayerV2( Shape shape = Circle,
double size = DEFAULT_SIMPLEMARKER_SIZE,
double angle = DEFAULT_SIMPLEMARKER_ANGLE,
QgsSymbolV2::ScaleMethod scaleMethod = DEFAULT_SCALE_METHOD,
const QColor& color = DEFAULT_SIMPLEMARKER_COLOR,
const QColor& borderColor = DEFAULT_SIMPLEMARKER_BORDERCOLOR,
Qt::PenJoinStyle penJoinStyle = DEFAULT_SIMPLEMARKER_JOINSTYLE );
// static methods
/** Creates a new QgsSimpleMarkerSymbolLayerV2.
* @param properties a property map containing symbol properties (see properties())
* @returns new QgsSimpleMarkerSymbolLayerV2
*/
static QgsSymbolLayer* create( const QgsStringMap& properties = QgsStringMap() ) /Factory/;
/** Creates a new QgsSimpleMarkerSymbolLayerV2 from an SLD XML element.
* @param element XML element containing SLD definition of symbol
* @returns new QgsSimpleMarkerSymbolLayerV2
*/
static QgsSymbolLayer* createFromSld( QDomElement &element ) /Factory/;
// reimplemented from base classes
QString layerType() const;
void startRender( QgsSymbolV2RenderContext& context );
void renderPoint( QPointF point, QgsSymbolV2RenderContext& context );
QgsStringMap properties() const;
virtual QgsSimpleMarkerSymbolLayerV2* clone() const /Factory/;
void writeSldMarker( QDomDocument &doc, QDomElement &element, const QgsStringMap& props ) const;
QString ogrFeatureStyle( double mmScaleFactor, double mapUnitScaleFactor ) const;
bool writeDxf( QgsDxfExport &e, double mmMapUnitScaleFactor, const QString &layerName, QgsSymbolV2RenderContext &context, QPointF shift = QPointF( 0.0, 0.0 ) ) const;
void setOutputUnit( QgsUnitTypes::RenderUnit unit );
QgsUnitTypes::RenderUnit outputUnit() const;
void setMapUnitScale( const QgsMapUnitScale& scale );
QgsMapUnitScale mapUnitScale() const;
QRectF bounds( QPointF point, QgsSymbolV2RenderContext& context );
QColor outlineColor() const;
void setOutlineColor( const QColor& color );
QColor fillColor() const;
void setFillColor( const QColor& color );
void setColor( const QColor& color );
virtual QColor color() const;
// new methods
//! @deprecated use shape() instead
QString name() const /Deprecated/;
//! @deprecated use setShape() instead
void setName( const QString& name ) /Deprecated/;
/** Returns the marker's border color.
* @see setBorderColor()
* @see outlineStyle()
* @see penJoinStyle()
*/
QColor borderColor() const;
/** Sets the marker's border color.
* @param color border color
* @see borderColor()
* @see setOutlineStyle()
* @see setPenJoinStyle()
*/
void setBorderColor( const QColor& color );
/** Returns the marker's outline style (eg solid, dashed, etc)
* @note added in 2.4
* @see setOutlineStyle()
* @see borderColor()
* @see penJoinStyle()
*/
Qt::PenStyle outlineStyle() const;
/** Sets the marker's outline style (eg solid, dashed, etc)
* @param outlineStyle style
* @note added in 2.4
* @see outlineStyle()
* @see setBorderColor()
* @see setPenJoinStyle()
*/
void setOutlineStyle( Qt::PenStyle outlineStyle );
/** Returns the marker's outline join style (eg miter, bevel, etc).
* @note added in 2.16
* @see setPenJoinStyle()
* @see borderColor()
* @see outlineStyle()
*/
Qt::PenJoinStyle penJoinStyle() const;
/** Sets the marker's outline join style (eg miter, bevel, etc).
* @param style join style
* @note added in 2.16
* @see penJoinStyle()
* @see setBorderColor()
* @see setOutlineStyle()
*/
void setPenJoinStyle( Qt::PenJoinStyle style );
/** Returns the width of the marker's outline.
* @see setOutlineWidth()
* @see outlineWidthUnit()
* @see outlineWidthMapUnitScale()
*/
double outlineWidth() const;
/** Sets the width of the marker's outline.
* @param w outline width. See outlineWidthUnit() for units.
* @see outlineWidth()
* @see setOutlineWidthUnit()
* @see setOutlineWidthMapUnitScale()
*/
void setOutlineWidth( double w );
/** Sets the unit for the width of the marker's outline.
* @param u outline width unit
* @see outlineWidthUnit()
* @see setOutlineWidth()
* @see setOutlineWidthMapUnitScale()
*/
void setOutlineWidthUnit( QgsUnitTypes::RenderUnit u );
/** Returns the unit for the width of the marker's outline.
* @see setOutlineWidthUnit()
* @see outlineWidth()
* @see outlineWidthMapUnitScale()
*/
QgsUnitTypes::RenderUnit outlineWidthUnit() const;
/** Sets the map scale for the width of the marker's outline.
* @param scale outline width map unit scale
* @see outlineWidthMapUnitScale()
* @see setOutlineWidth()
* @see setOutlineWidthUnit()
*/
void setOutlineWidthMapUnitScale( const QgsMapUnitScale& scale );
/** Returns the map scale for the width of the marker's outline.
* @see setOutlineWidthMapUnitScale()
* @see outlineWidth()
* @see outlineWidthUnit()
*/
const QgsMapUnitScale& outlineWidthMapUnitScale() const;
protected:
/** Draws the marker shape in the specified painter.
* @param p destination QPainter
* @param context symbol context
* @note this method does not handle setting the painter pen or brush to match the symbol's fill or outline
*/
void drawMarker( QPainter* p, QgsSymbolV2RenderContext& context );
//! @deprecated will be removed in QGIS 3.0
bool prepareShape( const QString& name = QString() ) /Deprecated/;
//! @deprecated will be removed in QGIS 3.0
bool prepareShape( const QString& name, QPolygonF &polygon ) const /Deprecated/;
//! @deprecated will be removed in QGIS 3.0
bool preparePath( QString name = QString() ) /Deprecated/;
/** Prepares cache image
* @returns true in case of success, false if cache image size too large
*/
bool prepareCache( QgsSymbolV2RenderContext& context );
private:
virtual void draw( QgsSymbolV2RenderContext& context, Shape shape, const QPolygonF& polygon, const QPainterPath& path );
};
/** \ingroup core
* \class QgsFilledMarkerSymbolLayer
* \brief Filled marker symbol layer, consisting of a shape which is rendered using a QgsFillSymbolV2. This allows
* the symbol to support advanced styling of the interior and outline of the shape.
* \note Added in version 2.16
*/
class QgsFilledMarkerSymbolLayer : QgsSimpleMarkerSymbolLayerBase
{
%TypeHeaderCode
#include <qgsmarkersymbollayerv2.h>
%End
public:
/** Constructor for QgsFilledMarkerSymbolLayer.
* @param shape symbol shape
* @param size symbol size (in mm)
* @param angle symbol rotation angle
* @param scaleMethod size scaling method
*/
QgsFilledMarkerSymbolLayer( Shape shape = Circle,
double size = DEFAULT_SIMPLEMARKER_SIZE,
double angle = DEFAULT_SIMPLEMARKER_ANGLE,
QgsSymbolV2::ScaleMethod scaleMethod = DEFAULT_SCALE_METHOD );
/** Creates a new QgsFilledMarkerSymbolLayer.
* @param properties a property map containing symbol properties (see properties())
* @returns new QgsFilledMarkerSymbolLayer
*/
static QgsSymbolLayer* create( const QgsStringMap& properties = QgsStringMap() ) /Factory/;
QString layerType() const;
void startRender( QgsSymbolV2RenderContext& context );
void stopRender( QgsSymbolV2RenderContext& context );
QgsStringMap properties() const;
virtual QgsFilledMarkerSymbolLayer* clone() const /Factory/;
virtual QgsSymbolV2* subSymbol();
virtual bool setSubSymbol( QgsSymbolV2* symbol /Transfer/ );
virtual double estimateMaxBleed() const;
QSet<QString> usedAttributes() const;
void setColor( const QColor& c );
virtual QColor color() const;
private:
virtual void draw( QgsSymbolV2RenderContext& context, Shape shape, const QPolygonF& polygon, const QPainterPath& path );
QgsFilledMarkerSymbolLayer( const QgsFilledMarkerSymbolLayer& );
};
class QgsSvgMarkerSymbolLayerV2 : QgsMarkerSymbolLayerV2
{
%TypeHeaderCode
#include <qgsmarkersymbollayerv2.h>
%End
public:
QgsSvgMarkerSymbolLayerV2( const QString& name = DEFAULT_SVGMARKER_NAME,
double size = DEFAULT_SVGMARKER_SIZE,
double angle = DEFAULT_SVGMARKER_ANGLE,
QgsSymbolV2::ScaleMethod scaleMethod = DEFAULT_SCALE_METHOD );
// static stuff
static QgsSymbolLayer* create( const QgsStringMap& properties = QgsStringMap() ) /Factory/;
static QgsSymbolLayer* createFromSld( QDomElement &element ) /Factory/;
// implemented from base classes
QString layerType() const;
void startRender( QgsSymbolV2RenderContext& context );
void stopRender( QgsSymbolV2RenderContext& context );
void renderPoint( QPointF point, QgsSymbolV2RenderContext& context );
QgsStringMap properties() const;
virtual QgsSvgMarkerSymbolLayerV2* clone() const /Factory/;
void writeSldMarker( QDomDocument &doc, QDomElement &element, const QgsStringMap& props ) const;
QString path() const;
void setPath( const QString& path );
QColor fillColor() const;
void setFillColor( const QColor& c );
QColor outlineColor() const;
void setOutlineColor( const QColor& c );
double outlineWidth() const;
void setOutlineWidth( double w );
/** Sets the units for the outline width.
* @param unit width units
* @see outlineWidthUnit()
*/
void setOutlineWidthUnit( QgsUnitTypes::RenderUnit unit );
/** Returns the units for the outline width.
* @see outlineWidthUnit()
*/
QgsUnitTypes::RenderUnit outlineWidthUnit() const;
void setOutlineWidthMapUnitScale( const QgsMapUnitScale& scale);
const QgsMapUnitScale& outlineWidthMapUnitScale() const;
void setOutputUnit( QgsUnitTypes::RenderUnit unit );
QgsUnitTypes::RenderUnit outputUnit() const;
void setMapUnitScale( const QgsMapUnitScale& scale );
QgsMapUnitScale mapUnitScale() const;
bool writeDxf( QgsDxfExport& e, double mmMapUnitScaleFactor, const QString& layerName, QgsSymbolV2RenderContext &context, QPointF shift = QPointF( 0.0, 0.0 ) ) const;
QRectF bounds( QPointF point, QgsSymbolV2RenderContext& context );
};
class QgsFontMarkerSymbolLayerV2 : QgsMarkerSymbolLayerV2
{
%TypeHeaderCode
#include <qgsmarkersymbollayerv2.h>
%End
public:
QgsFontMarkerSymbolLayerV2( const QString& fontFamily = DEFAULT_FONTMARKER_FONT,
QChar chr = DEFAULT_FONTMARKER_CHR,
double pointSize = DEFAULT_FONTMARKER_SIZE,
const QColor& color = DEFAULT_FONTMARKER_COLOR,
double angle = DEFAULT_FONTMARKER_ANGLE );
~QgsFontMarkerSymbolLayerV2();
// static stuff
static QgsSymbolLayer* create( const QgsStringMap& properties = QgsStringMap() ) /Factory/;
static QgsSymbolLayer* createFromSld( QDomElement &element ) /Factory/;
// implemented from base classes
QString layerType() const;
void startRender( QgsSymbolV2RenderContext& context );
void stopRender( QgsSymbolV2RenderContext& context );
void renderPoint( QPointF point, QgsSymbolV2RenderContext& context );
QgsStringMap properties() const;
virtual QgsFontMarkerSymbolLayerV2* clone() const /Factory/;
void writeSldMarker( QDomDocument &doc, QDomElement &element, const QgsStringMap& props ) const;
// new methods
QString fontFamily() const;
void setFontFamily( const QString& family );
QChar character() const;
void setCharacter( QChar ch );
/** Get outline color.
* @note added in 2.16 */
QColor outlineColor() const;
/** Set outline color.
* @note added in 2.16 */
void setOutlineColor( const QColor& color );
/** Get outline width.
* @note added in 2.16 */
double outlineWidth() const;
/** Set outline width.
* @note added in 2.16 */
void setOutlineWidth( double width );
/** Get outline width unit.
* @note added in 2.16 */
QgsUnitTypes::RenderUnit outlineWidthUnit() const;
/** Set outline width unit.
* @note added in 2.16 */
void setOutlineWidthUnit( QgsUnitTypes::RenderUnit unit );
/** Get outline width map unit scale.
* @note added in 2.16 */
const QgsMapUnitScale& outlineWidthMapUnitScale() const;
/** Set outline width map unit scale.
* @note added in 2.16 */
void setOutlineWidthMapUnitScale( const QgsMapUnitScale& scale );
/** Get outline join style.
* @note added in 2.16 */
Qt::PenJoinStyle penJoinStyle() const;
/** Set outline join style.
* @note added in 2.16 */
void setPenJoinStyle( Qt::PenJoinStyle style );
QRectF bounds( QPointF point, QgsSymbolV2RenderContext& context );
};