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

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :                          qgscompoundcurve.h
       3                 :            :                          ---------------------
       4                 :            :     begin                : September 2014
       5                 :            :     copyright            : (C) 2014 by Marco Hugentobler
       6                 :            :     email                : marco at sourcepole dot ch
       7                 :            :  ***************************************************************************/
       8                 :            : 
       9                 :            : /***************************************************************************
      10                 :            :  *                                                                         *
      11                 :            :  *   This program is free software; you can redistribute it and/or modify  *
      12                 :            :  *   it under the terms of the GNU General Public License as published by  *
      13                 :            :  *   the Free Software Foundation; either version 2 of the License, or     *
      14                 :            :  *   (at your option) any later version.                                   *
      15                 :            :  *                                                                         *
      16                 :            :  ***************************************************************************/
      17                 :            : 
      18                 :            : #ifndef QGSCOMPOUNDCURVE_H
      19                 :            : #define QGSCOMPOUNDCURVE_H
      20                 :            : 
      21                 :            : #include "qgis_core.h"
      22                 :            : #include "qgis_sip.h"
      23                 :            : #include "qgscurve.h"
      24                 :            : 
      25                 :            : /**
      26                 :            :  * \ingroup core
      27                 :            :  * \class QgsCompoundCurve
      28                 :            :  * \brief Compound curve geometry type
      29                 :            :  * \since QGIS 2.10
      30                 :            :  */
      31                 :            : class CORE_EXPORT QgsCompoundCurve: public QgsCurve
      32                 :            : {
      33                 :            :   public:
      34                 :            :     QgsCompoundCurve();
      35                 :            :     QgsCompoundCurve( const QgsCompoundCurve &curve );
      36                 :            :     QgsCompoundCurve &operator=( const QgsCompoundCurve &curve );
      37                 :            :     ~QgsCompoundCurve() override;
      38                 :            : 
      39                 :            :     bool equals( const QgsCurve &other ) const override;
      40                 :            : 
      41                 :            :     QString geometryType() const override SIP_HOLDGIL;
      42                 :            :     int dimension() const override SIP_HOLDGIL;
      43                 :            :     QgsCompoundCurve *clone() const override SIP_FACTORY;
      44                 :            :     void clear() override;
      45                 :            : 
      46                 :            :     bool fromWkb( QgsConstWkbPtr &wkb ) override;
      47                 :            :     bool fromWkt( const QString &wkt ) override;
      48                 :            : 
      49                 :            :     int wkbSize( QgsAbstractGeometry::WkbFlags flags = QgsAbstractGeometry::WkbFlags() ) const override;
      50                 :            :     QByteArray asWkb( QgsAbstractGeometry::WkbFlags flags = QgsAbstractGeometry::WkbFlags() ) const override;
      51                 :            :     QString asWkt( int precision = 17 ) const override;
      52                 :            :     QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
      53                 :            :     QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
      54                 :            :     json asJsonObject( int precision = 17 ) const override SIP_SKIP;
      55                 :            : 
      56                 :            :     //curve interface
      57                 :            :     double length() const override SIP_HOLDGIL;
      58                 :            :     QgsPoint startPoint() const override SIP_HOLDGIL;
      59                 :            :     QgsPoint endPoint() const override SIP_HOLDGIL;
      60                 :            :     void points( QgsPointSequence &pts SIP_OUT ) const override;
      61                 :            :     int numPoints() const override SIP_HOLDGIL;
      62                 :            :     bool isEmpty() const override SIP_HOLDGIL;
      63                 :            :     bool isValid( QString &error SIP_OUT, int flags = 0 ) const override;
      64                 :            : 
      65                 :            :     /**
      66                 :            :      * Returns a new line string geometry corresponding to a segmentized approximation
      67                 :            :      * of the curve.
      68                 :            :      * \param tolerance segmentation tolerance
      69                 :            :      * \param toleranceType maximum segmentation angle or maximum difference between approximation and curve
      70                 :            :     */
      71                 :            :     QgsLineString *curveToLine( double tolerance = M_PI_2 / 90, SegmentationToleranceType toleranceType = MaximumAngle ) const override SIP_FACTORY;
      72                 :            : 
      73                 :            :     QgsCompoundCurve *snappedToGrid( double hSpacing, double vSpacing, double dSpacing = 0, double mSpacing = 0 ) const override SIP_FACTORY;
      74                 :            :     bool removeDuplicateNodes( double epsilon = 4 * std::numeric_limits<double>::epsilon(), bool useZValues = false ) override;
      75                 :            :     bool boundingBoxIntersects( const QgsRectangle &rectangle ) const override SIP_HOLDGIL;
      76                 :            : 
      77                 :            :     /**
      78                 :            :      * Returns the number of curves in the geometry.
      79                 :            :      */
      80                 :         13 :     int nCurves() const SIP_HOLDGIL { return mCurves.size(); }
      81                 :            : 
      82                 :            :     /**
      83                 :            :      * Returns the curve at the specified index.
      84                 :            :      */
      85                 :            :     const QgsCurve *curveAt( int i ) const SIP_HOLDGIL;
      86                 :            : 
      87                 :            :     /**
      88                 :            :      * Adds a curve to the geometry (takes ownership).
      89                 :            :      *
      90                 :            :      * Since QGIS 3.20, if \a extendPrevious is TRUE, then adding a LineString when the last existing curve
      91                 :            :      * in the compound curve is also a LineString will cause the existing linestring to be
      92                 :            :      * extended with the newly added LineString vertices instead of appending a whole new
      93                 :            :      * LineString curve to the compound curve. This can result in simplified compound curves with lesser number
      94                 :            :      * of component curves while still being topologically identical to the desired result.
      95                 :            :      */
      96                 :            :     void addCurve( QgsCurve *c SIP_TRANSFER, bool extendPrevious = false );
      97                 :            : 
      98                 :            :     /**
      99                 :            :      * Removes a curve from the geometry.
     100                 :            :      * \param i index of curve to remove
     101                 :            :      */
     102                 :            :     void removeCurve( int i );
     103                 :            : 
     104                 :            :     /**
     105                 :            :      * Adds a vertex to the end of the geometry.
     106                 :            :      */
     107                 :            :     void addVertex( const QgsPoint &pt );
     108                 :            : 
     109                 :            :     void draw( QPainter &p ) const override;
     110                 :            :     void transform( const QgsCoordinateTransform &ct, QgsCoordinateTransform::TransformDirection d = QgsCoordinateTransform::ForwardTransform, bool transformZ = false ) override  SIP_THROW( QgsCsException );
     111                 :            :     void transform( const QTransform &t, double zTranslate = 0.0, double zScale = 1.0, double mTranslate = 0.0, double mScale = 1.0 ) override;
     112                 :            :     void addToPainterPath( QPainterPath &path ) const override;
     113                 :            :     void drawAsPolygon( QPainter &p ) const override;
     114                 :            :     bool insertVertex( QgsVertexId position, const QgsPoint &vertex ) override;
     115                 :            :     bool moveVertex( QgsVertexId position, const QgsPoint &newPos ) override;
     116                 :            :     bool deleteVertex( QgsVertexId position ) override;
     117                 :            :     double closestSegment( const QgsPoint &pt, QgsPoint &segmentPt SIP_OUT, QgsVertexId &vertexAfter SIP_OUT, int *leftOf SIP_OUT = nullptr, double epsilon = 4 * std::numeric_limits<double>::epsilon() ) const override;
     118                 :            :     bool pointAt( int node, QgsPoint &point, QgsVertexId::VertexType &type ) const override;
     119                 :            :     void sumUpArea( double &sum SIP_OUT ) const override;
     120                 :            : 
     121                 :            :     //! Appends first point if not already closed.
     122                 :            :     void close();
     123                 :            : 
     124                 :            :     bool hasCurvedSegments() const override;
     125                 :            :     double vertexAngle( QgsVertexId vertex ) const override;
     126                 :            :     double segmentLength( QgsVertexId startVertex ) const override;
     127                 :            :     QgsCompoundCurve *reversed() const override SIP_FACTORY;
     128                 :            :     QgsPoint *interpolatePoint( double distance ) const override SIP_FACTORY;
     129                 :            :     QgsCompoundCurve *curveSubstring( double startDistance, double endDistance ) const override SIP_FACTORY;
     130                 :            : 
     131                 :            :     bool addZValue( double zValue = 0 ) override;
     132                 :            :     bool addMValue( double mValue = 0 ) override;
     133                 :            : 
     134                 :            :     bool dropZValue() override;
     135                 :            :     bool dropMValue() override;
     136                 :            :     void swapXy() override;
     137                 :            : 
     138                 :            :     double xAt( int index ) const override SIP_HOLDGIL;
     139                 :            :     double yAt( int index ) const override SIP_HOLDGIL;
     140                 :            : 
     141                 :            :     bool transform( QgsAbstractGeometryTransformer *transformer, QgsFeedback *feedback = nullptr ) override;
     142                 :            : 
     143                 :            : #ifndef SIP_RUN
     144                 :            :     void filterVertices( const std::function< bool( const QgsPoint & ) > &filter ) override;
     145                 :            :     void transformVertices( const std::function< QgsPoint( const QgsPoint & ) > &transform ) override;
     146                 :            : 
     147                 :            :     /**
     148                 :            :      * Cast the \a geom to a QgsCompoundCurve.
     149                 :            :      * Should be used by qgsgeometry_cast<QgsCompoundCurve *>( geometry ).
     150                 :            :      *
     151                 :            :      * \note Not available in Python. Objects will be automatically be converted to the appropriate target type.
     152                 :            :      * \since QGIS 3.0
     153                 :            :      */
     154                 :         24 :     inline static const QgsCompoundCurve *cast( const QgsAbstractGeometry *geom )
     155                 :            :     {
     156                 :         24 :       if ( geom && QgsWkbTypes::flatType( geom->wkbType() ) == QgsWkbTypes::CompoundCurve )
     157                 :         23 :         return static_cast<const QgsCompoundCurve *>( geom );
     158                 :          1 :       return nullptr;
     159                 :         24 :     }
     160                 :            : #endif
     161                 :            : 
     162                 :            :     QgsCompoundCurve *createEmptyWithSameType() const override SIP_FACTORY;
     163                 :            : 
     164                 :            : #ifdef SIP_RUN
     165                 :            :     SIP_PYOBJECT __repr__();
     166                 :            :     % MethodCode
     167                 :            :     QString wkt = sipCpp->asWkt();
     168                 :            :     if ( wkt.length() > 1000 )
     169                 :            :       wkt = wkt.left( 1000 ) + QStringLiteral( "..." );
     170                 :            :     QString str = QStringLiteral( "<QgsCompoundCurve: %1>" ).arg( wkt );
     171                 :            :     sipRes = PyUnicode_FromString( str.toUtf8().constData() );
     172                 :            :     % End
     173                 :            : #endif
     174                 :            : 
     175                 :            :   protected:
     176                 :            : 
     177                 :            :     QgsRectangle calculateBoundingBox() const override;
     178                 :            : 
     179                 :            :   private:
     180                 :            :     QVector< QgsCurve * > mCurves;
     181                 :            : 
     182                 :            :     /**
     183                 :            :      * Turns a vertex id for the compound curve into one or more ids for the subcurves
     184                 :            :      * \returns the index of the subcurve or -1 in case of error
     185                 :            :     */
     186                 :            :     QVector< QPair<int, QgsVertexId> > curveVertexId( QgsVertexId id ) const;
     187                 :            : 
     188                 :            : };
     189                 :            : 
     190                 :            : // clazy:excludeall=qstring-allocations
     191                 :            : 
     192                 :            : #endif // QGSCOMPOUNDCURVE_H

Generated by: LCOV version 1.14