LCOV - code coverage report
Current view: top level - core/symbology - qgsellipsesymbollayer.h (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 0 16 0.0 %
Date: 2021-04-10 08:29:14 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :  qgsellipsesymbollayer.h
       3                 :            :  ---------------------
       4                 :            :  begin                : June 2011
       5                 :            :  copyright            : (C) 2011 by Marco Hugentobler
       6                 :            :  email                : marco dot hugentobler at sourcepole dot ch
       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                 :            : #ifndef QGSELLIPSESYMBOLLAYER_H
      16                 :            : #define QGSELLIPSESYMBOLLAYER_H
      17                 :            : 
      18                 :            : #define DEFAULT_ELLIPSE_JOINSTYLE    Qt::MiterJoin
      19                 :            : 
      20                 :            : #include "qgis_core.h"
      21                 :            : #include "qgis.h"
      22                 :            : #include "qgsmarkersymbollayer.h"
      23                 :            : #include <QPainterPath>
      24                 :            : 
      25                 :            : class QgsExpression;
      26                 :            : 
      27                 :            : /**
      28                 :            :  * \ingroup core
      29                 :            :  * \brief A symbol layer for rendering objects with major and minor axis (e.g. ellipse, rectangle, etc).
      30                 :            : */
      31                 :          0 : class CORE_EXPORT QgsEllipseSymbolLayer: public QgsMarkerSymbolLayer
      32                 :            : {
      33                 :            :   public:
      34                 :            : 
      35                 :            :     //! Marker symbol shapes
      36                 :            :     enum Shape
      37                 :            :     {
      38                 :            :       Circle, //!< Circle
      39                 :            :       Rectangle, //!< Rectangle
      40                 :            :       Diamond, //!< Diamond
      41                 :            :       Cross, //!< Stroke-only cross
      42                 :            :       Arrow, //!< Stroke-only arrow (since QGIS 3.20)
      43                 :            :       HalfArc, //!< Stroke-only half arc (since QGIS 3.20)
      44                 :            :       Triangle, //!< Triangle
      45                 :            :       RightHalfTriangle, //!< Right half of a triangle
      46                 :            :       LeftHalfTriangle, //!< Left half of a triangle
      47                 :            :       SemiCircle, //!< Semi circle
      48                 :            :     };
      49                 :            : 
      50                 :            :     //! Returns a list of all available shape types.
      51                 :            :     static QList< QgsEllipseSymbolLayer::Shape > availableShapes();
      52                 :            : 
      53                 :            :     /**
      54                 :            :      * Returns TRUE if a \a shape has a fill.
      55                 :            :      * \returns TRUE if shape uses a fill, or FALSE if shape uses lines only
      56                 :            :      * \since QGIS 3.20
      57                 :            :      */
      58                 :            :     static bool shapeIsFilled( const QgsEllipseSymbolLayer::Shape &shape );
      59                 :            : 
      60                 :            :     QgsEllipseSymbolLayer();
      61                 :            : 
      62                 :            :     //! Creates the symbol layer
      63                 :            :     static QgsSymbolLayer *create( const QVariantMap &properties = QVariantMap() ) SIP_FACTORY;
      64                 :            :     static QgsSymbolLayer *createFromSld( QDomElement &element ) SIP_FACTORY;
      65                 :            : 
      66                 :            :     void renderPoint( QPointF point, QgsSymbolRenderContext &context ) override;
      67                 :            :     QString layerType() const override;
      68                 :            :     void startRender( QgsSymbolRenderContext &context ) override;
      69                 :            :     void stopRender( QgsSymbolRenderContext &context ) override;
      70                 :            :     QgsEllipseSymbolLayer *clone() const override SIP_FACTORY;
      71                 :            :     QVariantMap properties() const override;
      72                 :            : 
      73                 :            :     void toSld( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const override;
      74                 :            :     void writeSldMarker( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const override;
      75                 :            : 
      76                 :            :     bool writeDxf( QgsDxfExport &e, double mmMapUnitScaleFactor, const QString &layerName, QgsSymbolRenderContext &context, QPointF shift = QPointF( 0.0, 0.0 ) ) const override;
      77                 :            : 
      78                 :            :     /**
      79                 :            :      * Sets the rendered ellipse marker shape using a symbol \a name.
      80                 :            :      * \see setShape()
      81                 :            :      * \see shape()
      82                 :            :      * \deprecated since QGIS 3.20
      83                 :            :      */
      84                 :            :     Q_DECL_DEPRECATED void setSymbolName( const QString &name ) SIP_DEPRECATED { mShape = decodeShape( name ); }
      85                 :            : 
      86                 :            :     /**
      87                 :            :      * Returns the shape name for the rendered ellipse marker symbol.
      88                 :            :      * \see shape()
      89                 :            :      * \see setShape()
      90                 :            :      * \deprecated since QGIS 3.20
      91                 :            :      */
      92                 :            :     Q_DECL_DEPRECATED QString symbolName() const SIP_DEPRECATED { return encodeShape( mShape ); }
      93                 :            : 
      94                 :            :     /**
      95                 :            :      * Returns the shape for the rendered ellipse marker symbol.
      96                 :            :      * \see setShape()
      97                 :            :      * \since QGIS 3.20
      98                 :            :      */
      99                 :            :     QgsEllipseSymbolLayer::Shape shape() const { return mShape; }
     100                 :            : 
     101                 :            :     /**
     102                 :            :      * Sets the rendered ellipse marker shape.
     103                 :            :      * \param shape new ellipse marker shape
     104                 :            :      * \see shape()
     105                 :            :      * \since QGIS 3.20
     106                 :            :      */
     107                 :          0 :     void setShape( QgsEllipseSymbolLayer::Shape shape ) { mShape = shape; }
     108                 :            : 
     109                 :            :     /**
     110                 :            :      * Attempts to decode a string representation of a shape name to the corresponding
     111                 :            :      * shape.
     112                 :            :      * \param name encoded shape name
     113                 :            :      * \param ok if specified, will be set to TRUE if shape was successfully decoded
     114                 :            :      * \returns decoded name
     115                 :            :      * \see encodeShape()
     116                 :            :      * \since QGIS 3.20
     117                 :            :      */
     118                 :            :     static QgsEllipseSymbolLayer::Shape decodeShape( const QString &name, bool *ok = nullptr );
     119                 :            : 
     120                 :            :     /**
     121                 :            :      * Encodes a shape to its string representation.
     122                 :            :      * \param shape shape to encode
     123                 :            :      * \returns encoded string
     124                 :            :      * \see decodeShape()
     125                 :            :      * \since QGIS 3.20
     126                 :            :      */
     127                 :            :     static QString encodeShape( QgsEllipseSymbolLayer::Shape shape );
     128                 :            : 
     129                 :            :     void setSize( double size ) override;
     130                 :            : 
     131                 :            :     void setSymbolWidth( double w );
     132                 :            :     double symbolWidth() const { return mSymbolWidth; }
     133                 :            : 
     134                 :            :     void setSymbolHeight( double h );
     135                 :            :     double symbolHeight() const { return mSymbolHeight; }
     136                 :            : 
     137                 :            :     Qt::PenStyle strokeStyle() const { return mStrokeStyle; }
     138                 :          0 :     void setStrokeStyle( Qt::PenStyle strokeStyle ) { mStrokeStyle = strokeStyle; }
     139                 :            : 
     140                 :            :     /**
     141                 :            :      * Gets stroke join style.
     142                 :            :      * \since QGIS 2.16
     143                 :            :      */
     144                 :            :     Qt::PenJoinStyle penJoinStyle() const { return mPenJoinStyle; }
     145                 :            : 
     146                 :            :     /**
     147                 :            :      * Set stroke join style.
     148                 :            :      * \since QGIS 2.16
     149                 :            :     */
     150                 :          0 :     void setPenJoinStyle( Qt::PenJoinStyle style ) { mPenJoinStyle = style; }
     151                 :            : 
     152                 :            :     /**
     153                 :            :      * Returns the marker's stroke cap style (e.g., flat, round, etc).
     154                 :            :      * \see setPenCapStyle()
     155                 :            :      * \see penJoinStyle()
     156                 :            :      * \see strokeColor()
     157                 :            :      * \see strokeStyle()
     158                 :            :      * \since QGIS 3.20
     159                 :            :     */
     160                 :            :     Qt::PenCapStyle penCapStyle() const { return mPenCapStyle; }
     161                 :            : 
     162                 :            :     /**
     163                 :            :      * Sets the marker's stroke cap \a style (e.g., flat, round, etc).
     164                 :            :      * \see penCapStyle()
     165                 :            :      * \see penJoinStyle()
     166                 :            :      * \see setStrokeColor()
     167                 :            :      * \see setStrokeStyle()
     168                 :            :      * \since QGIS 3.20
     169                 :            :     */
     170                 :          0 :     void setPenCapStyle( Qt::PenCapStyle style ) { mPenCapStyle = style; }
     171                 :            : 
     172                 :          0 :     void setStrokeWidth( double w ) { mStrokeWidth = w; }
     173                 :            :     double strokeWidth() const { return mStrokeWidth; }
     174                 :            : 
     175                 :          0 :     void setFillColor( const QColor &c ) override { setColor( c ); }
     176                 :          0 :     QColor fillColor() const override { return color(); }
     177                 :            : 
     178                 :          0 :     void setStrokeColor( const QColor &c ) override { mStrokeColor = c; }
     179                 :          0 :     QColor strokeColor() const override { return mStrokeColor; }
     180                 :            : 
     181                 :            :     /**
     182                 :            :      * Sets the units for the symbol's width.
     183                 :            :      * \param unit symbol units
     184                 :            :      * \see symbolWidthUnit()
     185                 :            :      * \see setSymbolHeightUnit()
     186                 :            :     */
     187                 :          0 :     void setSymbolWidthUnit( QgsUnitTypes::RenderUnit unit ) { mSymbolWidthUnit = unit; }
     188                 :            : 
     189                 :            :     /**
     190                 :            :      * Returns the units for the symbol's width.
     191                 :            :      * \see setSymbolWidthUnit()
     192                 :            :      * \see symbolHeightUnit()
     193                 :            :     */
     194                 :            :     QgsUnitTypes::RenderUnit symbolWidthUnit() const { return mSymbolWidthUnit; }
     195                 :            : 
     196                 :          0 :     void setSymbolWidthMapUnitScale( const QgsMapUnitScale &scale ) { mSymbolWidthMapUnitScale = scale; }
     197                 :            :     const QgsMapUnitScale &symbolWidthMapUnitScale() const { return mSymbolWidthMapUnitScale; }
     198                 :            : 
     199                 :            :     /**
     200                 :            :      * Sets the units for the symbol's height.
     201                 :            :      * \param unit symbol units
     202                 :            :      * \see symbolHeightUnit()
     203                 :            :      * \see setSymbolWidthUnit()
     204                 :            :     */
     205                 :          0 :     void setSymbolHeightUnit( QgsUnitTypes::RenderUnit unit ) { mSymbolHeightUnit = unit; }
     206                 :            : 
     207                 :            :     /**
     208                 :            :      * Returns the units for the symbol's height.
     209                 :            :      * \see setSymbolHeightUnit()
     210                 :            :      * \see symbolWidthUnit()
     211                 :            :     */
     212                 :            :     QgsUnitTypes::RenderUnit symbolHeightUnit() const { return mSymbolHeightUnit; }
     213                 :            : 
     214                 :          0 :     void setSymbolHeightMapUnitScale( const QgsMapUnitScale &scale ) { mSymbolHeightMapUnitScale = scale; }
     215                 :            :     const QgsMapUnitScale &symbolHeightMapUnitScale() const { return mSymbolHeightMapUnitScale; }
     216                 :            : 
     217                 :            :     /**
     218                 :            :      * Sets the units for the symbol's stroke width.
     219                 :            :      * \param unit symbol units
     220                 :            :      * \see strokeWidthUnit()
     221                 :            :     */
     222                 :          0 :     void setStrokeWidthUnit( QgsUnitTypes::RenderUnit unit ) { mStrokeWidthUnit = unit; }
     223                 :            : 
     224                 :            :     /**
     225                 :            :      * Returns the units for the symbol's stroke width.
     226                 :            :      * \see setStrokeWidthUnit()
     227                 :            :     */
     228                 :            :     QgsUnitTypes::RenderUnit strokeWidthUnit() const { return mStrokeWidthUnit; }
     229                 :            : 
     230                 :          0 :     void setStrokeWidthMapUnitScale( const QgsMapUnitScale &scale ) { mStrokeWidthMapUnitScale = scale; }
     231                 :            :     const QgsMapUnitScale &strokeWidthMapUnitScale() const { return mStrokeWidthMapUnitScale; }
     232                 :            : 
     233                 :            :     void setOutputUnit( QgsUnitTypes::RenderUnit unit ) override;
     234                 :            :     QgsUnitTypes::RenderUnit outputUnit() const override;
     235                 :            :     bool usesMapUnits() const override;
     236                 :            : 
     237                 :            :     void setMapUnitScale( const QgsMapUnitScale &scale ) override;
     238                 :            :     QgsMapUnitScale mapUnitScale() const override;
     239                 :            : 
     240                 :            :     QRectF bounds( QPointF point, QgsSymbolRenderContext &context ) override;
     241                 :            : 
     242                 :            :   private:
     243                 :            :     Shape mShape = Circle;
     244                 :            :     double mSymbolWidth = 4;
     245                 :            :     QgsUnitTypes::RenderUnit mSymbolWidthUnit = QgsUnitTypes::RenderMillimeters;
     246                 :            :     QgsMapUnitScale mSymbolWidthMapUnitScale;
     247                 :            :     double mSymbolHeight = 3;
     248                 :            :     QgsUnitTypes::RenderUnit mSymbolHeightUnit = QgsUnitTypes::RenderMillimeters;
     249                 :            :     QgsMapUnitScale mSymbolHeightMapUnitScale;
     250                 :            :     QColor mStrokeColor;
     251                 :            :     Qt::PenStyle mStrokeStyle = Qt::SolidLine;
     252                 :            :     Qt::PenJoinStyle mPenJoinStyle = DEFAULT_ELLIPSE_JOINSTYLE;
     253                 :            :     Qt::PenCapStyle mPenCapStyle = Qt::SquareCap;
     254                 :            :     double mStrokeWidth = 0;
     255                 :            :     QgsUnitTypes::RenderUnit mStrokeWidthUnit = QgsUnitTypes::RenderMillimeters;
     256                 :            :     QgsMapUnitScale mStrokeWidthMapUnitScale;
     257                 :            : 
     258                 :            :     QPainterPath mPainterPath;
     259                 :            : 
     260                 :            :     QPen mPen;
     261                 :            :     QBrush mBrush;
     262                 :            :     //! QPen to use as stroke of selected symbols
     263                 :            :     QPen mSelPen;
     264                 :            :     //! QBrush to use as fill of selected symbols
     265                 :            :     QBrush mSelBrush;
     266                 :            : 
     267                 :            :     /**
     268                 :            :      * Setup mPainterPath
     269                 :            :      * \param shape name of symbol
     270                 :            :      * \param context render context
     271                 :            :      * \param scaledWidth optional width
     272                 :            :      * \param scaledHeight optional height
     273                 :            :      * \param f optional feature to render (0 if no data defined rendering)
     274                 :            :      */
     275                 :            :     void preparePath( const QgsEllipseSymbolLayer::Shape &shape, QgsSymbolRenderContext &context, double *scaledWidth = nullptr, double *scaledHeight = nullptr, const QgsFeature *f = nullptr );
     276                 :            :     QSizeF calculateSize( QgsSymbolRenderContext &context, double *scaledWidth = nullptr, double *scaledHeight = nullptr );
     277                 :            :     void calculateOffsetAndRotation( QgsSymbolRenderContext &context, double scaledWidth, double scaledHeight, bool &hasDataDefinedRotation, QPointF &offset, double &angle ) const;
     278                 :            : };
     279                 :            : 
     280                 :            : // clazy:excludeall=qstring-allocations
     281                 :            : 
     282                 :            : #endif // QGSELLIPSESYMBOLLAYER_H
     283                 :            : 
     284                 :            : 

Generated by: LCOV version 1.14