QGIS API Documentation  2.14.11-Essen
qgsfillsymbollayerv2.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsfillsymbollayerv2.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 QGSFILLSYMBOLLAYERV2_H
17 #define QGSFILLSYMBOLLAYERV2_H
18 
19 #include "qgssymbollayerv2.h"
20 
21 #define DEFAULT_SIMPLEFILL_COLOR QColor(0,0,255)
22 #define DEFAULT_SIMPLEFILL_STYLE Qt::SolidPattern
23 #define DEFAULT_SIMPLEFILL_BORDERCOLOR QColor(0,0,0)
24 #define DEFAULT_SIMPLEFILL_BORDERSTYLE Qt::SolidLine
25 #define DEFAULT_SIMPLEFILL_BORDERWIDTH DEFAULT_LINE_WIDTH
26 #define DEFAULT_SIMPLEFILL_JOINSTYLE Qt::BevelJoin
27 
28 #define INF 1E20
29 
30 #include <QPen>
31 #include <QBrush>
32 
34 {
35  public:
37  Qt::BrushStyle style = DEFAULT_SIMPLEFILL_STYLE,
38  const QColor& borderColor = DEFAULT_SIMPLEFILL_BORDERCOLOR,
39  Qt::PenStyle borderStyle = DEFAULT_SIMPLEFILL_BORDERSTYLE,
40  double borderWidth = DEFAULT_SIMPLEFILL_BORDERWIDTH,
41  Qt::PenJoinStyle penJoinStyle = DEFAULT_SIMPLEFILL_JOINSTYLE
42  );
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 renderPolygon( const QPolygonF& points, QList<QPolygonF>* rings, QgsSymbolV2RenderContext& context ) override;
58 
59  QgsStringMap properties() const override;
60 
61  QgsSimpleFillSymbolLayerV2* clone() const override;
62 
64  void toSld( QDomDocument &doc, QDomElement &element, const QgsStringMap& props ) const override;
65 
66  QString ogrFeatureStyle( double mmScaleFactor, double mapUnitScaleFactor ) const override;
67 
68  Qt::BrushStyle brushStyle() const { return mBrushStyle; }
69  void setBrushStyle( Qt::BrushStyle style ) { mBrushStyle = style; }
70 
71  QColor borderColor() const { return mBorderColor; }
72  void setBorderColor( const QColor& borderColor ) { mBorderColor = borderColor; }
73 
76  QColor outlineColor() const override { return borderColor(); }
79  void setOutlineColor( const QColor& color ) override { setBorderColor( color ); }
80 
83  QColor fillColor() const override { return color(); }
86  void setFillColor( const QColor& color ) override { setColor( color ); }
87 
88  Qt::PenStyle borderStyle() const { return mBorderStyle; }
89  void setBorderStyle( Qt::PenStyle borderStyle ) { mBorderStyle = borderStyle; }
90 
91  double borderWidth() const { return mBorderWidth; }
92  void setBorderWidth( double borderWidth ) { mBorderWidth = borderWidth; }
93 
94  Qt::PenJoinStyle penJoinStyle() const { return mPenJoinStyle; }
95  void setPenJoinStyle( Qt::PenJoinStyle style ) { mPenJoinStyle = style; }
96 
97  void setOffset( QPointF offset ) { mOffset = offset; }
98  QPointF offset() { return mOffset; }
99 
100  void setBorderWidthUnit( QgsSymbolV2::OutputUnit unit ) { mBorderWidthUnit = unit; }
101  QgsSymbolV2::OutputUnit borderWidthUnit() const { return mBorderWidthUnit; }
102 
103  void setBorderWidthMapUnitScale( const QgsMapUnitScale& scale ) { mBorderWidthMapUnitScale = scale; }
104  const QgsMapUnitScale& borderWidthMapUnitScale() const { return mBorderWidthMapUnitScale; }
105 
106  void setOffsetUnit( QgsSymbolV2::OutputUnit unit ) { mOffsetUnit = unit; }
107  QgsSymbolV2::OutputUnit offsetUnit() const { return mOffsetUnit; }
108 
109  void setOffsetMapUnitScale( const QgsMapUnitScale& scale ) { mOffsetMapUnitScale = scale; }
110  const QgsMapUnitScale& offsetMapUnitScale() const { return mOffsetMapUnitScale; }
111 
112  void setOutputUnit( QgsSymbolV2::OutputUnit unit ) override;
113  QgsSymbolV2::OutputUnit outputUnit() const override;
114 
115  void setMapUnitScale( const QgsMapUnitScale &scale ) override;
116  QgsMapUnitScale mapUnitScale() const override;
117 
118  double estimateMaxBleed() const override;
119 
120  double dxfWidth( const QgsDxfExport& e, QgsSymbolV2RenderContext& context ) const override;
121  QColor dxfColor( QgsSymbolV2RenderContext& context ) const override;
122  double dxfAngle( QgsSymbolV2RenderContext& context ) const override;
123 
124  Qt::PenStyle dxfPenStyle() const override;
125  QColor dxfBrushColor( QgsSymbolV2RenderContext &context ) const override;
126  Qt::BrushStyle dxfBrushStyle() const override;
127 
128  protected:
131  Qt::BrushStyle mBrushStyle;
133  Qt::PenStyle mBorderStyle;
134  double mBorderWidth;
137  Qt::PenJoinStyle mPenJoinStyle;
140 
144 
145  private:
146  //helper functions for data defined symbology
147  void applyDataDefinedSymbology( QgsSymbolV2RenderContext& context, QBrush& brush, QPen& pen, QPen& selPen );
148 };
149 
151 
153 {
154  public:
155 
157  {
159  ColorRamp
160  };
161 
163  {
166  Conical
167  };
168 
170  {
172  Viewport
173  };
174 
176  {
179  Repeat
180  };
181 
183  const QColor& color2 = Qt::white,
184  GradientColorType gradientColorType = SimpleTwoColor,
185  GradientType gradientType = Linear,
186  GradientCoordinateMode coordinateMode = Feature,
187  GradientSpread gradientSpread = Pad
188  );
189 
190  virtual ~QgsGradientFillSymbolLayerV2();
191 
192  // static stuff
193 
194  static QgsSymbolLayerV2* create( const QgsStringMap& properties = QgsStringMap() );
195 
196  // implemented from base classes
197 
198  QString layerType() const override;
199 
200  void startRender( QgsSymbolV2RenderContext& context ) override;
201 
202  void stopRender( QgsSymbolV2RenderContext& context ) override;
203 
204  void renderPolygon( const QPolygonF& points, QList<QPolygonF>* rings, QgsSymbolV2RenderContext& context ) override;
205 
206  QgsStringMap properties() const override;
207 
208  QgsGradientFillSymbolLayerV2* clone() const override;
209 
210  double estimateMaxBleed() const override;
211 
213  GradientType gradientType() const { return mGradientType; }
214  void setGradientType( GradientType gradientType ) { mGradientType = gradientType; }
215 
217  GradientColorType gradientColorType() const { return mGradientColorType; }
218  void setGradientColorType( GradientColorType gradientColorType ) { mGradientColorType = gradientColorType; }
219 
221  QgsVectorColorRampV2* colorRamp() { return mGradientRamp; }
222  void setColorRamp( QgsVectorColorRampV2* ramp );
223 
225  QColor color2() const { return mColor2; }
226  void setColor2( const QColor& color2 ) { mColor2 = color2; }
227 
229  GradientCoordinateMode coordinateMode() const { return mCoordinateMode; }
230  void setCoordinateMode( GradientCoordinateMode coordinateMode ) { mCoordinateMode = coordinateMode; }
231 
233  GradientSpread gradientSpread() const { return mGradientSpread; }
234  void setGradientSpread( GradientSpread gradientSpread ) { mGradientSpread = gradientSpread; }
235 
237  void setReferencePoint1( QPointF referencePoint ) { mReferencePoint1 = referencePoint; }
238  QPointF referencePoint1() const { return mReferencePoint1; }
239 
241  void setReferencePoint1IsCentroid( bool isCentroid ) { mReferencePoint1IsCentroid = isCentroid; }
242  bool referencePoint1IsCentroid() const { return mReferencePoint1IsCentroid; }
243 
245  void setReferencePoint2( QPointF referencePoint ) { mReferencePoint2 = referencePoint; }
246  QPointF referencePoint2() const { return mReferencePoint2; }
247 
249  void setReferencePoint2IsCentroid( bool isCentroid ) { mReferencePoint2IsCentroid = isCentroid; }
250  bool referencePoint2IsCentroid() const { return mReferencePoint2IsCentroid; }
251 
253  void setOffset( QPointF offset ) { mOffset = offset; }
254  QPointF offset() const { return mOffset; }
255 
257  void setOffsetUnit( QgsSymbolV2::OutputUnit unit ) { mOffsetUnit = unit; }
258  QgsSymbolV2::OutputUnit offsetUnit() const { return mOffsetUnit; }
259 
260  void setOffsetMapUnitScale( const QgsMapUnitScale& scale ) { mOffsetMapUnitScale = scale; }
261  const QgsMapUnitScale& offsetMapUnitScale() const { return mOffsetMapUnitScale; }
262 
263  void setOutputUnit( QgsSymbolV2::OutputUnit unit ) override;
264  QgsSymbolV2::OutputUnit outputUnit() const override;
265 
266  void setMapUnitScale( const QgsMapUnitScale &scale ) override;
267  QgsMapUnitScale mapUnitScale() const override;
268 
269  protected:
272 
279 
284 
288 
289  private:
290 
291  //helper functions for data defined symbology
292  void applyDataDefinedSymbology( QgsSymbolV2RenderContext& context, const QPolygonF& points );
293 
295  void applyGradient( const QgsSymbolV2RenderContext& context, QBrush& brush, const QColor& color, const QColor& color2,
296  GradientColorType gradientColorType, QgsVectorColorRampV2 *gradientRamp, GradientType gradientType,
297  GradientCoordinateMode coordinateMode, GradientSpread gradientSpread,
298  QPointF referencePoint1, QPointF referencePoint2, const double angle );
299 
301  QPointF rotateReferencePoint( QPointF refPoint, double angle );
302 };
303 
305 {
306  public:
307 
309  {
311  ColorRamp
312  };
313 
314  QgsShapeburstFillSymbolLayerV2( const QColor& color = DEFAULT_SIMPLEFILL_COLOR, const QColor& color2 = Qt::white,
315  ShapeburstColorType colorType = SimpleTwoColor,
316  int blurRadius = 0, bool useWholeShape = true, double maxDistance = 5 );
317 
319 
320  // static stuff
321 
322  static QgsSymbolLayerV2* create( const QgsStringMap& properties = QgsStringMap() );
323 
324  // implemented from base classes
325 
326  QString layerType() const override;
327 
328  void startRender( QgsSymbolV2RenderContext& context ) override;
329 
330  void stopRender( QgsSymbolV2RenderContext& context ) override;
331 
332  void renderPolygon( const QPolygonF& points, QList<QPolygonF>* rings, QgsSymbolV2RenderContext& context ) override;
333 
334  QgsStringMap properties() const override;
335 
336  QgsShapeburstFillSymbolLayerV2* clone() const override;
337 
338  double estimateMaxBleed() const override;
339 
345  void setBlurRadius( int blurRadius ) { mBlurRadius = blurRadius; }
351  int blurRadius() const { return mBlurRadius; }
352 
360  void setUseWholeShape( bool useWholeShape ) { mUseWholeShape = useWholeShape; }
367  bool useWholeShape() const { return mUseWholeShape; }
368 
376  void setMaxDistance( double maxDistance ) { mMaxDistance = maxDistance; }
384  double maxDistance() const { return mMaxDistance; }
385 
392  void setDistanceUnit( QgsSymbolV2::OutputUnit unit ) { mDistanceUnit = unit; }
399  QgsSymbolV2::OutputUnit distanceUnit() const { return mDistanceUnit; }
400 
401  void setDistanceMapUnitScale( const QgsMapUnitScale& scale ) { mDistanceMapUnitScale = scale; }
402  const QgsMapUnitScale& distanceMapUnitScale() const { return mDistanceMapUnitScale; }
403 
413  void setColorType( ShapeburstColorType colorType ) { mColorType = colorType; }
423  ShapeburstColorType colorType() const { return mColorType; }
424 
431  void setColorRamp( QgsVectorColorRampV2* ramp );
438  QgsVectorColorRampV2* colorRamp() { return mGradientRamp; }
439 
446  void setColor2( const QColor& color2 ) { mColor2 = color2; }
453  QColor color2() const { return mColor2; }
454 
461  void setIgnoreRings( bool ignoreRings ) { mIgnoreRings = ignoreRings; }
467  bool ignoreRings() const { return mIgnoreRings; }
468 
475  void setOffset( QPointF offset ) { mOffset = offset; }
482  QPointF offset() const { return mOffset; }
483 
490  void setOffsetUnit( QgsSymbolV2::OutputUnit unit ) { mOffsetUnit = unit; }
497  QgsSymbolV2::OutputUnit offsetUnit() const { return mOffsetUnit; }
498 
499  void setOffsetMapUnitScale( const QgsMapUnitScale& scale ) { mOffsetMapUnitScale = scale; }
500  const QgsMapUnitScale& offsetMapUnitScale() const { return mOffsetMapUnitScale; }
501 
502  void setOutputUnit( QgsSymbolV2::OutputUnit unit ) override;
503  QgsSymbolV2::OutputUnit outputUnit() const override;
504 
505  void setMapUnitScale( const QgsMapUnitScale &scale ) override;
506  QgsMapUnitScale mapUnitScale() const override;
507 
508  protected:
511 
513 
515  double mMaxDistance;
518 
523 
525 
529 
530  private:
531 
532  //helper functions for data defined symbology
533  void applyDataDefinedSymbology( QgsSymbolV2RenderContext& context, QColor& color, QColor& color2, int& blurRadius, bool& useWholeShape,
534  double& maxDistance, bool &ignoreRings );
535 
536  /* distance transform of a 1d function using squared distance */
537  void distanceTransform1d( double *f, int n, int *v, double *z, double *d );
538  /* distance transform of 2d function using squared distance */
539  void distanceTransform2d( double * im, int width, int height );
540  /* distance transform of a binary QImage */
541  double * distanceTransform( QImage * im );
542 
543  /* fills a QImage with values from an array of doubles containing squared distance transform values */
544  void dtArrayToQImage( double * array, QImage *im, QgsVectorColorRampV2* ramp, double layerAlpha = 1, bool useWholeShape = true, int maxPixelDistance = 0 );
545 };
546 
549 {
550  public:
551 
553  virtual ~QgsImageFillSymbolLayer();
554  void renderPolygon( const QPolygonF& points, QList<QPolygonF>* rings, QgsSymbolV2RenderContext& context ) override;
555 
556  virtual QgsSymbolV2* subSymbol() override { return mOutline; }
557  virtual bool setSubSymbol( QgsSymbolV2* symbol ) override;
558 
559  void setOutlineWidthUnit( QgsSymbolV2::OutputUnit unit ) { mOutlineWidthUnit = unit; }
560  QgsSymbolV2::OutputUnit outlineWidthUnit() const { return mOutlineWidthUnit; }
561 
562  void setOutlineWidthMapUnitScale( const QgsMapUnitScale& scale ) { mOutlineWidthMapUnitScale = scale; }
563  const QgsMapUnitScale& outlineWidthMapUnitScale() const { return mOutlineWidthMapUnitScale; }
564 
565  void setOutputUnit( QgsSymbolV2::OutputUnit unit ) override;
566  QgsSymbolV2::OutputUnit outputUnit() const override;
567 
568  void setMapUnitScale( const QgsMapUnitScale &scale ) override;
569  QgsMapUnitScale mapUnitScale() const override;
570 
571  virtual double estimateMaxBleed() const override;
572 
573  double dxfWidth( const QgsDxfExport& e, QgsSymbolV2RenderContext& context ) const override;
574  QColor dxfColor( QgsSymbolV2RenderContext& context ) const override;
575 
576  Qt::PenStyle dxfPenStyle() const override;
577 
578  QSet<QString> usedAttributes() const override;
579 
580  protected:
582  double mNextAngle; // mAngle / data defined angle
583 
588 
591 
592  virtual void applyDataDefinedSettings( QgsSymbolV2RenderContext& context ) { Q_UNUSED( context ); }
593 };
594 
601 {
602  public:
603 
605  {
607  Viewport
608  };
609 
610  QgsRasterFillSymbolLayer( const QString& imageFilePath = QString() );
612 
613  static QgsSymbolLayerV2* create( const QgsStringMap& properties = QgsStringMap() );
614 
615  // implemented from base classes
616  QString layerType() const override;
617  void renderPolygon( const QPolygonF& points, QList<QPolygonF>* rings, QgsSymbolV2RenderContext& context ) override;
618  void startRender( QgsSymbolV2RenderContext& context ) override;
619  void stopRender( QgsSymbolV2RenderContext& context ) override;
620  QgsStringMap properties() const override;
621  QgsRasterFillSymbolLayer* clone() const override;
622  virtual double estimateMaxBleed() const override;
623 
624  //override QgsImageFillSymbolLayer's support for sub symbols
625  virtual QgsSymbolV2* subSymbol() override { return nullptr; }
626  virtual bool setSubSymbol( QgsSymbolV2* symbol ) override;
627 
632  void setImageFilePath( const QString& imagePath );
637  QString imageFilePath() const { return mImageFilePath; }
638 
644  void setCoordinateMode( const FillCoordinateMode mode );
650  FillCoordinateMode coordinateMode() const { return mCoordinateMode; }
651 
656  void setAlpha( const double alpha );
661  double alpha() const { return mAlpha; }
662 
669  void setOffset( QPointF offset ) { mOffset = offset; }
676  QPointF offset() const { return mOffset; }
677 
684  void setOffsetUnit( const QgsSymbolV2::OutputUnit unit ) { mOffsetUnit = unit; }
691  QgsSymbolV2::OutputUnit offsetUnit() const { return mOffsetUnit; }
692 
699  void setOffsetMapUnitScale( const QgsMapUnitScale& scale ) { mOffsetMapUnitScale = scale; }
706  const QgsMapUnitScale& offsetMapUnitScale() const { return mOffsetMapUnitScale; }
707 
715  void setWidth( const double width ) { mWidth = width; }
723  double width() const { return mWidth; }
724 
731  void setWidthUnit( const QgsSymbolV2::OutputUnit unit ) { mWidthUnit = unit; }
738  QgsSymbolV2::OutputUnit widthUnit() const { return mWidthUnit; }
739 
746  void setWidthMapUnitScale( const QgsMapUnitScale& scale ) { mWidthMapUnitScale = scale; }
753  const QgsMapUnitScale& widthMapUnitScale() const { return mWidthMapUnitScale; }
754 
755  protected:
756 
760  double mAlpha;
761 
765 
766  double mWidth;
769 
770  void applyDataDefinedSettings( QgsSymbolV2RenderContext& context ) override;
771 
772  private:
773 
775  void applyPattern( QBrush& brush, const QString& imageFilePath, const double width, const double alpha,
776  const QgsSymbolV2RenderContext& context );
777 };
778 
782 {
783  public:
784  QgsSVGFillSymbolLayer( const QString& svgFilePath = "", double width = 20, double rotation = 0.0 );
785  QgsSVGFillSymbolLayer( const QByteArray& svgData, double width = 20, double rotation = 0.0 );
787 
788  static QgsSymbolLayerV2* create( const QgsStringMap& properties = QgsStringMap() );
789  static QgsSymbolLayerV2* createFromSld( QDomElement &element );
790 
791  // implemented from base classes
792 
793  QString layerType() const override;
794 
795  void startRender( QgsSymbolV2RenderContext& context ) override;
796  void stopRender( QgsSymbolV2RenderContext& context ) override;
797 
798  QgsStringMap properties() const override;
799 
800  QgsSVGFillSymbolLayer* clone() const override;
801 
803  void toSld( QDomDocument &doc, QDomElement &element, const QgsStringMap& props ) const override;
804 
805  //getters and setters
806  void setSvgFilePath( const QString& svgPath );
807  QString svgFilePath() const { return mSvgFilePath; }
808  void setPatternWidth( double width ) { mPatternWidth = width;}
809  double patternWidth() const { return mPatternWidth; }
810 
811  void setSvgFillColor( const QColor& c ) { setColor( c ); }
812  QColor svgFillColor() const { return color(); }
813 
814  void setSvgOutlineColor( const QColor& c ) { mSvgOutlineColor = c; }
815  QColor svgOutlineColor() const { return mSvgOutlineColor; }
816  void setSvgOutlineWidth( double w ) { mSvgOutlineWidth = w; }
817  double svgOutlineWidth() const { return mSvgOutlineWidth; }
818 
819  void setPatternWidthUnit( QgsSymbolV2::OutputUnit unit ) { mPatternWidthUnit = unit; }
820  QgsSymbolV2::OutputUnit patternWidthUnit() const { return mPatternWidthUnit; }
821 
822  void setPatternWidthMapUnitScale( const QgsMapUnitScale& scale ) { mPatternWidthMapUnitScale = scale; }
823  const QgsMapUnitScale& patternWidthMapUnitScale() const { return mPatternWidthMapUnitScale; }
824 
825  void setSvgOutlineWidthUnit( QgsSymbolV2::OutputUnit unit ) { mSvgOutlineWidthUnit = unit; }
826  QgsSymbolV2::OutputUnit svgOutlineWidthUnit() const { return mSvgOutlineWidthUnit; }
827 
828  void setSvgOutlineWidthMapUnitScale( const QgsMapUnitScale& scale ) { mSvgOutlineWidthMapUnitScale = scale; }
829  const QgsMapUnitScale& svgOutlineWidthMapUnitScale() const { return mSvgOutlineWidthMapUnitScale; }
830 
831  void setOutputUnit( QgsSymbolV2::OutputUnit unit ) override;
832  QgsSymbolV2::OutputUnit outputUnit() const override;
833 
834  void setMapUnitScale( const QgsMapUnitScale &scale ) override;
835  QgsMapUnitScale mapUnitScale() const override;
836 
837  protected:
842 
851 
852  //param(fill), param(outline), param(outline-width) are going
853  //to be replaced in memory
858 
859  void applyDataDefinedSettings( QgsSymbolV2RenderContext& context ) override;
860 
861  private:
863  void storeViewBox();
864  void setDefaultSvgParams(); //fills mSvgFillColor, mSvgOutlineColor, mSvgOutlineWidth with default values for mSvgFilePath
865 
867  void applyPattern( QBrush& brush, const QString& svgFilePath, double patternWidth, QgsSymbolV2::OutputUnit patternWidthUnit, const QColor& svgFillColor, const QColor& svgOutlineColor,
868  double svgOutlineWidth, QgsSymbolV2::OutputUnit svgOutlineWidthUnit, const QgsSymbolV2RenderContext& context, const QgsMapUnitScale& patternWidthMapUnitScale, const QgsMapUnitScale &svgOutlineWidthMapUnitScale );
869 };
870 
872 {
873  public:
876 
877  static QgsSymbolLayerV2* create( const QgsStringMap& properties = QgsStringMap() );
878  static QgsSymbolLayerV2* createFromSld( QDomElement &element );
879 
880  QString layerType() const override;
881 
882  void startRender( QgsSymbolV2RenderContext& context ) override;
883 
884  void stopRender( QgsSymbolV2RenderContext& context ) override;
885 
886  QgsStringMap properties() const override;
887 
888  QgsLinePatternFillSymbolLayer* clone() const override;
889 
891  void toSld( QDomDocument &doc, QDomElement &element, const QgsStringMap& props ) const override;
892 
893  double estimateMaxBleed() const override;
894 
895  QString ogrFeatureStyleWidth( double widthScaleFactor ) const;
896 
897  //getters and setters
898  void setLineAngle( double a ) { mLineAngle = a; }
899  double lineAngle() const { return mLineAngle; }
900  void setDistance( double d ) { mDistance = d; }
901  double distance() const { return mDistance; }
902  void setLineWidth( double w );
903  double lineWidth() const { return mLineWidth; }
904  void setColor( const QColor& c ) override;
905  QColor color() const override;
906  void setOffset( double offset ) { mOffset = offset; }
907  double offset() const { return mOffset; }
908 
909  void setDistanceUnit( QgsSymbolV2::OutputUnit unit ) { mDistanceUnit = unit; }
910  QgsSymbolV2::OutputUnit distanceUnit() const { return mDistanceUnit; }
911 
912  void setDistanceMapUnitScale( const QgsMapUnitScale& scale ) { mDistanceMapUnitScale = scale; }
913  const QgsMapUnitScale& distanceMapUnitScale() const { return mDistanceMapUnitScale; }
914 
915  void setLineWidthUnit( QgsSymbolV2::OutputUnit unit ) { mLineWidthUnit = unit; }
916  QgsSymbolV2::OutputUnit lineWidthUnit() const { return mLineWidthUnit; }
917 
918  void setLineWidthMapUnitScale( const QgsMapUnitScale& scale ) { mLineWidthMapUnitScale = scale; }
919  const QgsMapUnitScale& lineWidthMapUnitScale() const { return mLineWidthMapUnitScale; }
920 
921  void setOffsetUnit( QgsSymbolV2::OutputUnit unit ) { mOffsetUnit = unit; }
922  QgsSymbolV2::OutputUnit offsetUnit() const { return mOffsetUnit; }
923 
924  void setOffsetMapUnitScale( const QgsMapUnitScale& scale ) { mOffsetMapUnitScale = scale; }
925  const QgsMapUnitScale& offsetMapUnitScale() const { return mOffsetMapUnitScale; }
926 
927  void setOutputUnit( QgsSymbolV2::OutputUnit unit ) override;
928  QgsSymbolV2::OutputUnit outputUnit() const override;
929 
930  void setMapUnitScale( const QgsMapUnitScale& scale ) override;
931  QgsMapUnitScale mapUnitScale() const override;
932 
933  bool setSubSymbol( QgsSymbolV2* symbol ) override;
934  QgsSymbolV2* subSymbol() override;
935 
936  QSet<QString> usedAttributes() const override;
937 
938  protected:
940  double mDistance;
944  double mLineWidth;
949  double mLineAngle;
951  double mOffset;
954 
955  void applyDataDefinedSettings( QgsSymbolV2RenderContext& context ) override;
956 
957  private:
959  void applyPattern( const QgsSymbolV2RenderContext& context, QBrush& brush, double lineAngle, double distance, double lineWidth, const QColor& color );
960 
962  QgsLineSymbolV2* mFillLineSymbol;
963 };
964 
966 {
967  public:
970 
971  static QgsSymbolLayerV2* create( const QgsStringMap& properties = QgsStringMap() );
972  static QgsSymbolLayerV2* createFromSld( QDomElement &element );
973 
974  QString layerType() const override;
975 
976  void startRender( QgsSymbolV2RenderContext& context ) override;
977 
978  void stopRender( QgsSymbolV2RenderContext& context ) override;
979 
980  QgsStringMap properties() const override;
981 
982  QgsPointPatternFillSymbolLayer* clone() const override;
983 
985  void toSld( QDomDocument &doc, QDomElement &element, const QgsStringMap& props ) const override;
986 
987  double estimateMaxBleed() const override;
988 
989  //getters and setters
990  double distanceX() const { return mDistanceX; }
991  void setDistanceX( double d ) { mDistanceX = d; }
992 
993  double distanceY() const { return mDistanceY; }
994  void setDistanceY( double d ) { mDistanceY = d; }
995 
996  double displacementX() const { return mDisplacementX; }
997  void setDisplacementX( double d ) { mDisplacementX = d; }
998 
999  double displacementY() const { return mDisplacementY; }
1000  void setDisplacementY( double d ) { mDisplacementY = d; }
1001 
1002  bool setSubSymbol( QgsSymbolV2* symbol ) override;
1003  virtual QgsSymbolV2* subSymbol() override { return mMarkerSymbol; }
1004 
1005  void setDistanceXUnit( QgsSymbolV2::OutputUnit unit ) { mDistanceXUnit = unit; }
1006  QgsSymbolV2::OutputUnit distanceXUnit() const { return mDistanceXUnit; }
1007 
1008  void setDistanceXMapUnitScale( const QgsMapUnitScale& scale ) { mDistanceXMapUnitScale = scale; }
1009  const QgsMapUnitScale& distanceXMapUnitScale() const { return mDistanceXMapUnitScale; }
1010 
1011  void setDistanceYUnit( QgsSymbolV2::OutputUnit unit ) { mDistanceYUnit = unit; }
1012  QgsSymbolV2::OutputUnit distanceYUnit() const { return mDistanceYUnit; }
1013 
1014  void setDistanceYMapUnitScale( const QgsMapUnitScale& scale ) { mDistanceYMapUnitScale = scale; }
1015  const QgsMapUnitScale& distanceYMapUnitScale() const { return mDistanceYMapUnitScale; }
1016 
1017  void setDisplacementXUnit( QgsSymbolV2::OutputUnit unit ) { mDisplacementXUnit = unit; }
1018  QgsSymbolV2::OutputUnit displacementXUnit() const { return mDisplacementXUnit; }
1019 
1020  void setDisplacementXMapUnitScale( const QgsMapUnitScale& scale ) { mDisplacementXMapUnitScale = scale; }
1021  const QgsMapUnitScale& displacementXMapUnitScale() const { return mDisplacementXMapUnitScale; }
1022 
1023  void setDisplacementYUnit( QgsSymbolV2::OutputUnit unit ) { mDisplacementYUnit = unit; }
1024  QgsSymbolV2::OutputUnit displacementYUnit() const { return mDisplacementYUnit; }
1025 
1026  void setDisplacementYMapUnitScale( const QgsMapUnitScale& scale ) { mDisplacementYMapUnitScale = scale; }
1027  const QgsMapUnitScale& displacementYMapUnitScale() const { return mDisplacementYMapUnitScale; }
1028 
1029  void setOutputUnit( QgsSymbolV2::OutputUnit unit ) override;
1030  QgsSymbolV2::OutputUnit outputUnit() const override;
1031 
1032  void setMapUnitScale( const QgsMapUnitScale &scale ) override;
1033  QgsMapUnitScale mapUnitScale() const override;
1034 
1035  virtual QSet<QString> usedAttributes() const override;
1036  void setColor( const QColor& c ) override;
1037  virtual QColor color() const override;
1038 
1039  protected:
1041  double mDistanceX;
1044  double mDistanceY;
1053 
1054  void applyDataDefinedSettings( QgsSymbolV2RenderContext& context ) override;
1055 
1056  private:
1057  void applyPattern( const QgsSymbolV2RenderContext& context, QBrush& brush, double distanceX, double distanceY,
1058  double displacementX, double displacementY );
1059 };
1060 
1062 {
1063  public:
1066 
1067  // static stuff
1068 
1069  static QgsSymbolLayerV2* create( const QgsStringMap& properties = QgsStringMap() );
1070  static QgsSymbolLayerV2* createFromSld( QDomElement &element );
1071 
1072  // implemented from base classes
1073 
1074  QString layerType() const override;
1075 
1076  void startRender( QgsSymbolV2RenderContext& context ) override;
1077 
1078  void stopRender( QgsSymbolV2RenderContext& context ) override;
1079 
1080  void renderPolygon( const QPolygonF& points, QList<QPolygonF>* rings, QgsSymbolV2RenderContext& context ) override;
1081 
1082  QgsStringMap properties() const override;
1083 
1084  QgsCentroidFillSymbolLayerV2* clone() const override;
1085 
1087  void toSld( QDomDocument &doc, QDomElement &element, const QgsStringMap& props ) const override;
1088 
1089  void setColor( const QColor& color ) override;
1090  QColor color() const override;
1091 
1092  QgsSymbolV2* subSymbol() override;
1093  bool setSubSymbol( QgsSymbolV2* symbol ) override;
1094 
1095  void setOutputUnit( QgsSymbolV2::OutputUnit unit ) override;
1096  QgsSymbolV2::OutputUnit outputUnit() const override;
1097 
1098  void setMapUnitScale( const QgsMapUnitScale &scale ) override;
1099  QgsMapUnitScale mapUnitScale() const override;
1100 
1101  virtual QSet<QString> usedAttributes() const override;
1102 
1103  void setPointOnSurface( bool pointOnSurface ) { mPointOnSurface = pointOnSurface; }
1104  bool pointOnSurface() const { return mPointOnSurface; }
1105 
1106  protected:
1109 };
1110 
1111 #endif
1112 
1113 
QgsMapUnitScale mSvgOutlineWidthMapUnitScale
void setBorderWidthMapUnitScale(const QgsMapUnitScale &scale)
QgsVectorColorRampV2 * colorRamp()
Color ramp used for the gradient fill, only used if the gradient color type is set to ColorRamp...
virtual void setMapUnitScale(const QgsMapUnitScale &scale)
QgsSymbolV2::OutputUnit offsetUnit() const
void setDistanceUnit(QgsSymbolV2::OutputUnit unit)
Sets the unit for the maximum distance to shade inside of the shape from the polygon&#39;s boundary...
void setMaxDistance(double maxDistance)
Sets the maximum distance to shape inside of the shape from the polygon&#39;s boundary.
#define DEFAULT_SIMPLEFILL_BORDERCOLOR
QgsVectorColorRampV2 * colorRamp()
Returns the color ramp used for the shapeburst fill.
virtual Qt::BrushStyle dxfBrushStyle() const
const QgsMapUnitScale & displacementYMapUnitScale() const
bool ignoreRings() const
Returns whether the shapeburst fill is set to ignore polygon interior rings.
void setReferencePoint1(QPointF referencePoint)
Starting point of gradient fill, in the range [0,0] - [1,1].
QgsSymbolV2::OutputUnit mSvgOutlineWidthUnit
void setReferencePoint2IsCentroid(bool isCentroid)
Sets the end point of the gradient to be the feature centroid.
void setSvgOutlineWidth(double w)
const QgsMapUnitScale & borderWidthMapUnitScale() const
OutputUnit
The unit of the output.
Definition: qgssymbolv2.h:62
virtual void setOutputUnit(QgsSymbolV2::OutputUnit unit)
QgsSymbolV2::OutputUnit mOffsetUnit
FillCoordinateMode mCoordinateMode
virtual QgsSymbolLayerV2 * clone() const =0
Shall be reimplemented by subclasses to create a deep copy of the instance.
QgsSymbolV2::OutputUnit mLineWidthUnit
QSet< QString > usedAttributes() const override
Returns the set of attributes referenced by the layer.
void setCoordinateMode(GradientCoordinateMode coordinateMode)
virtual Qt::PenStyle dxfPenStyle() const
const QgsMapUnitScale & lineWidthMapUnitScale() const
void setSvgFillColor(const QColor &c)
void setPatternWidthMapUnitScale(const QgsMapUnitScale &scale)
QgsSymbolV2::OutputUnit distanceUnit() const
Returns the unit for the maximum distance to shade inside of the shape from the polygon&#39;s boundary...
const QgsMapUnitScale & displacementXMapUnitScale() const
virtual QColor dxfColor(QgsSymbolV2RenderContext &context) const
void setDistanceYUnit(QgsSymbolV2::OutputUnit unit)
QString imageFilePath() const
The path to the raster image used for the fill.
void setOffsetUnit(QgsSymbolV2::OutputUnit unit)
void setOutlineWidthMapUnitScale(const QgsMapUnitScale &scale)
virtual QSet< QString > usedAttributes() const
Returns the set of attributes referenced by the layer.
Qt::BrushStyle brushStyle() const
virtual QgsMapUnitScale mapUnitScale() const
GradientCoordinateMode coordinateMode() const
Coordinate mode for gradient.
GradientType gradientType() const
Type of gradient, eg linear or radial.
Base class for polygon renderers generating texture images.
QgsMapUnitScale mPatternWidthMapUnitScale
GradientCoordinateMode mCoordinateMode
void setPointOnSurface(bool pointOnSurface)
void setIgnoreRings(bool ignoreRings)
Sets whether the shapeburst fill should ignore polygon rings when calculating the buffered shading...
QgsSymbolV2::OutputUnit widthUnit() const
Returns the units for the image&#39;s width.
QPointF offset() const
Returns the offset for the shapeburst fill.
virtual QColor dxfBrushColor(QgsSymbolV2RenderContext &context) const
void setDistanceMapUnitScale(const QgsMapUnitScale &scale)
QgsMapUnitScale mOutlineWidthMapUnitScale
virtual void renderPolygon(const QPolygonF &points, QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context)=0
QgsSymbolV2::OutputUnit mWidthUnit
QgsSymbolV2::OutputUnit mDisplacementXUnit
void setDistanceXMapUnitScale(const QgsMapUnitScale &scale)
ShapeburstColorType colorType() const
Returns the color mode used for the shapeburst fill.
double mDistance
Distance (in mm or map units) between lines.
void setSvgOutlineWidthUnit(QgsSymbolV2::OutputUnit unit)
double mLineAngle
Vector line angle in degrees (0 = horizontal, counterclockwise)
QgsSymbolV2::OutputUnit borderWidthUnit() const
QgsVectorColorRampV2 * mGradientRamp
void setOutputUnit(QgsSymbolV2::OutputUnit unit) override
QMap< QString, QString > QgsStringMap
Definition: qgis.h:392
QgsSymbolV2::OutputUnit svgOutlineWidthUnit() const
void setPatternWidth(double width)
virtual void toSld(QDomDocument &doc, QDomElement &element, const QgsStringMap &props) const
Writes the SLD element following the SLD v1.1 specs.
QgsMapUnitScale mapUnitScale() const override
QgsSymbolV2::OutputUnit outputUnit() const override
void setSvgOutlineColor(const QColor &c)
virtual void startRender(QgsSymbolV2RenderContext &context)=0
const QgsMapUnitScale & offsetMapUnitScale() const
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
void setMapUnitScale(const QgsMapUnitScale &scale) override
void setDistanceUnit(QgsSymbolV2::OutputUnit unit)
virtual QgsSymbolV2::OutputUnit outputUnit() const
void setGradientType(GradientType gradientType)
const QgsMapUnitScale & offsetMapUnitScale() const
QString mImageFilePath
Path to the image file.
QgsSymbolV2::OutputUnit mDisplacementYUnit
virtual double estimateMaxBleed() const
Returns the estimated maximum distance which the layer style will bleed outside the drawn shape...
GradientSpread gradientSpread() const
Gradient spread mode.
QgsSymbolV2::OutputUnit distanceXUnit() const
#define DEFAULT_SIMPLEFILL_BORDERSTYLE
A class for filling symbols with a repeated raster image.
void setOffset(QPointF offset)
Sets the offset for the shapeburst fill.
QByteArray mSvgData
SVG data.
void setOutlineWidthUnit(QgsSymbolV2::OutputUnit unit)
QgsLineSymbolV2 * mOutline
Custom outline.
#define DEFAULT_SIMPLEFILL_STYLE
QgsSymbolV2::OutputUnit patternWidthUnit() const
void setWidth(const double width)
Sets the width for scaling the image used in the fill.
double mOffset
Offset perpendicular to line direction.
void setPenJoinStyle(Qt::PenJoinStyle style)
void setBrushStyle(Qt::BrushStyle style)
void setReferencePoint1IsCentroid(bool isCentroid)
Sets the starting point of the gradient to be the feature centroid.
QgsVectorColorRampV2 * mTwoColorGradientRamp
void setLineWidthUnit(QgsSymbolV2::OutputUnit unit)
void setBlurRadius(int blurRadius)
Sets the blur radius, which controls the amount of blurring applied to the fill.
QColor outlineColor() const override
Get outline color.
virtual double estimateMaxBleed() const override
Returns the estimated maximum distance which the layer style will bleed outside the drawn shape...
void setOffsetUnit(QgsSymbolV2::OutputUnit unit)
void setWidthMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for the image&#39;s width.
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
const QgsMapUnitScale & offsetMapUnitScale() const
Returns the map unit scale for the fill&#39;s offset.
QgsSymbolV2::OutputUnit distanceYUnit() const
const QgsMapUnitScale & outlineWidthMapUnitScale() const
void setDistanceYMapUnitScale(const QgsMapUnitScale &scale)
QColor color2() const
Color for endpoint of gradient, only used if the gradient color type is set to SimpleTwoColor.
double alpha() const
The opacity for the raster image used in the fill.
QgsSymbolV2::OutputUnit mOffsetUnit
virtual QgsSymbolV2 * subSymbol() override
virtual QgsStringMap properties() const =0
Should be reimplemented by subclasses to return a string map that contains the configuration informat...
void renderPolygon(const QPolygonF &points, QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context) override
void setOutlineColor(const QColor &color) override
Set outline color.
void setFillColor(const QColor &color) override
Set fill color.
bool useWholeShape() const
Returns whether the shapeburst fill is set to cover the entire shape.
const QgsMapUnitScale & svgOutlineWidthMapUnitScale() const
void setDisplacementXUnit(QgsSymbolV2::OutputUnit unit)
virtual bool setSubSymbol(QgsSymbolV2 *symbol) override
set layer&#39;s subsymbol. takes ownership of the passed symbol
QgsSymbolV2::OutputUnit mOffsetUnit
virtual QColor color() const
The fill color.
void setBorderWidthUnit(QgsSymbolV2::OutputUnit unit)
double maxDistance() const
Returns the maximum distance from the shape&#39;s boundary which is shaded.
void setLineWidthMapUnitScale(const QgsMapUnitScale &scale)
void setDisplacementXMapUnitScale(const QgsMapUnitScale &scale)
QgsSymbolV2::OutputUnit mOffsetUnit
void setOffset(QPointF offset)
Sets the offset for the fill.
void setColor2(const QColor &color2)
Sets the color for the endpoint of the shapeburst fill.
QString mSvgFilePath
Path to the svg file (or empty if constructed directly from data)
const QgsMapUnitScale & distanceMapUnitScale() const
QgsSymbolV2::OutputUnit mOffsetUnit
QgsSymbolV2::OutputUnit mOutlineWidthUnit
double mOutlineWidth
Outline width.
double ANALYSIS_EXPORT angle(Point3D *p1, Point3D *p2, Point3D *p3, Point3D *p4)
Calculates the angle between two segments (in 2 dimension, z-values are ignored)
void setColorType(ShapeburstColorType colorType)
Sets the color mode to use for the shapeburst fill.
void setDistanceXUnit(QgsSymbolV2::OutputUnit unit)
double mLineWidth
Line width (in mm or map units)
QgsVectorColorRampV2 * mGradientRamp
QgsSymbolV2::OutputUnit displacementXUnit() const
QgsSymbolV2::OutputUnit offsetUnit() const
Returns the units used for the offset of the shapeburst fill.
void setOffset(QPointF offset)
Offset for gradient fill.
virtual QString layerType() const =0
Returns a string that represents this layer type.
void setBorderColor(const QColor &borderColor)
void setOffsetUnit(QgsSymbolV2::OutputUnit unit)
Sets the units used for the offset for the shapeburst fill.
QgsSymbolV2::OutputUnit mDistanceYUnit
virtual QgsSymbolV2 * subSymbol()
void setOffset(QPointF offset)
const QgsMapUnitScale & distanceMapUnitScale() const
A class for svg fill patterns.
QgsSymbolV2::OutputUnit lineWidthUnit() const
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for the fill&#39;s offset.
void setGradientColorType(GradientColorType gradientColorType)
QgsMapUnitScale mBorderWidthMapUnitScale
Struct for storing maximum and minimum scales for measurements in map units.
QgsSymbolV2::OutputUnit mDistanceXUnit
void setDisplacementYUnit(QgsSymbolV2::OutputUnit unit)
const QgsMapUnitScale & distanceXMapUnitScale() const
const QgsMapUnitScale & patternWidthMapUnitScale() const
virtual double dxfWidth(const QgsDxfExport &e, QgsSymbolV2RenderContext &context) const
void setUseWholeShape(bool useWholeShape)
Sets whether the shapeburst fill should be drawn using the entire shape.
QgsSymbolV2::OutputUnit mBorderWidthUnit
QgsSymbolV2::OutputUnit offsetUnit() const
const QgsMapUnitScale & distanceYMapUnitScale() const
QgsSymbolV2::OutputUnit mDistanceUnit
FillCoordinateMode coordinateMode() const
Coordinate mode for fill.
const QgsMapUnitScale & widthMapUnitScale() const
Returns the map unit scale for the image&#39;s width.
QColor color2() const
Returns the color used for the endpoint of the shapeburst fill.
void setDisplacementYMapUnitScale(const QgsMapUnitScale &scale)
QgsSymbolV2::OutputUnit offsetUnit() const
QgsSymbolV2::OutputUnit offsetUnit() const
Returns the units for the fill&#39;s offset.
virtual void setColor(const QColor &color)
The fill color.
virtual double dxfAngle(QgsSymbolV2RenderContext &context) const
QgsSymbolV2::OutputUnit mDistanceUnit
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
void setColor2(const QColor &color2)
const QgsMapUnitScale & offsetMapUnitScale() const
void setPatternWidthUnit(QgsSymbolV2::OutputUnit unit)
void setWidthUnit(const QgsSymbolV2::OutputUnit unit)
Sets the units for the image&#39;s width.
void setGradientSpread(GradientSpread gradientSpread)
QgsSymbolV2::OutputUnit mPatternWidthUnit
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
Qt::PenStyle borderStyle() const
virtual QgsSymbolV2 * subSymbol() override
int blurRadius() const
Returns the blur radius, which controls the amount of blurring applied to the fill.
QgsSymbolV2::OutputUnit displacementYUnit() const
void setReferencePoint2(QPointF referencePoint)
End point of gradient fill, in the range [0,0] - [1,1].
QgsSymbolV2::OutputUnit distanceUnit() const
void setBorderWidth(double borderWidth)
GradientColorType gradientColorType() const
Gradient color mode, controls how gradient color stops are created.
#define DEFAULT_SIMPLEFILL_JOINSTYLE
virtual bool setSubSymbol(QgsSymbolV2 *symbol)
set layer&#39;s subsymbol. takes ownership of the passed symbol
double width() const
Returns the width used for scaling the image used in the fill.
virtual void stopRender(QgsSymbolV2RenderContext &context)=0
Qt::PenJoinStyle penJoinStyle() const
QColor fillColor() const override
Get fill color.
void setOffsetUnit(const QgsSymbolV2::OutputUnit unit)
Sets the units for the fill&#39;s offset.
void setDistanceMapUnitScale(const QgsMapUnitScale &scale)
#define DEFAULT_SIMPLEFILL_BORDERWIDTH
virtual QString ogrFeatureStyle(double mmScaleFactor, double mapUnitScaleFactor) const
virtual void applyDataDefinedSettings(QgsSymbolV2RenderContext &context)
const QgsMapUnitScale & offsetMapUnitScale() const
virtual QgsSymbolV2 * subSymbol() override
void setOffsetUnit(QgsSymbolV2::OutputUnit unit)
Units for gradient fill offset.
QRectF mSvgViewBox
SVG view box (to keep the aspect ratio.
QImage * mSvgPattern
SVG pattern image.
void setSvgOutlineWidthMapUnitScale(const QgsMapUnitScale &scale)
QPointF offset() const
Returns the offset for the fill.
double mPatternWidth
Width of the pattern (in output units)
QgsSymbolV2::OutputUnit outlineWidthUnit() const
#define DEFAULT_SIMPLEFILL_COLOR
void setBorderStyle(Qt::PenStyle borderStyle)