LCOV - code coverage report
Current view: top level - core/geometry - qgslinesegment.h (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 12 19 63.2 %
Date: 2021-03-26 12:19:53 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :                          qgslinesegment.h
       3                 :            :                          -----------------
       4                 :            :     begin                : April 2018
       5                 :            :     copyright            : (C) 2018 by Nyall Dawson
       6                 :            :     email                : nyall dot dawson at gmail dot com
       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 QGSLINESEGMENT_H
      19                 :            : #define QGSLINESEGMENT_H
      20                 :            : 
      21                 :            : #include "qgis_core.h"
      22                 :            : #include "qgspointxy.h"
      23                 :            : 
      24                 :            : class QgsLineString;
      25                 :            : 
      26                 :            : /**
      27                 :            :  * \ingroup core
      28                 :            :  * \brief Represents a single 2D line segment, consisting of a 2D start and end vertex only.
      29                 :            :  * \since QGIS 3.2
      30                 :            :  */
      31                 :            : class CORE_EXPORT QgsLineSegment2D
      32                 :            : {
      33                 :            : 
      34                 :            :   public:
      35                 :            : 
      36                 :            :     /**
      37                 :            :      * Constructor for a QgsLineSegment2D from the specified \a start point to
      38                 :            :      * the \a end point.
      39                 :            :      */
      40                 :          1 :     QgsLineSegment2D( const QgsPointXY &start, const QgsPointXY &end ) SIP_HOLDGIL
      41                 :          1 :   : mStart( start )
      42                 :          1 :     , mEnd( end )
      43                 :          1 :     {}
      44                 :            : 
      45                 :            :     /**
      46                 :            :      * Constructor for a QgsLineSegment2D from the point (\a x1, \a y2) to
      47                 :            :      * (\a x2, \a y2).
      48                 :            :      */
      49                 :            :     QgsLineSegment2D( double x1, double y1, double x2, double y2 ) SIP_HOLDGIL
      50                 :            :   : mStart( QgsPointXY( x1, y1 ) )
      51                 :            :     , mEnd( QgsPointXY( x2, y2 ) )
      52                 :            :     {}
      53                 :            : 
      54                 :            :     /**
      55                 :            :      * Returns the length of the segment.
      56                 :            :      * \see lengthSquared()
      57                 :            :      */
      58                 :            :     double length() const SIP_HOLDGIL
      59                 :            :     {
      60                 :            :       return std::sqrt( ( mStart.x() - mEnd.x() ) * ( mStart.x() - mEnd.x() ) + ( mStart.y() - mEnd.y() ) * ( mStart.y() - mEnd.y() ) );
      61                 :            :     }
      62                 :            : 
      63                 :            :     /**
      64                 :            :      * Returns the squared length of the segment.
      65                 :            :      * \see length()
      66                 :            :      */
      67                 :            :     double lengthSquared() const SIP_HOLDGIL
      68                 :            :     {
      69                 :            :       return ( mStart.x() - mEnd.x() ) * ( mStart.x() - mEnd.x() ) + ( mStart.y() - mEnd.y() ) * ( mStart.y() - mEnd.y() );
      70                 :            :     }
      71                 :            : 
      72                 :            :     /**
      73                 :            :      * Returns the segment's start x-coordinate.
      74                 :            :      * \see start()
      75                 :            :      * \see startY()
      76                 :            :      */
      77                 :          1 :     double startX() const SIP_HOLDGIL
      78                 :            :     {
      79                 :          1 :       return mStart.x();
      80                 :            :     }
      81                 :            : 
      82                 :            :     /**
      83                 :            :      * Returns the segment's start y-coordinate.
      84                 :            :      * \see start()
      85                 :            :      * \see startX()
      86                 :            :      */
      87                 :          1 :     double startY() const SIP_HOLDGIL
      88                 :            :     {
      89                 :          1 :       return mStart.y();
      90                 :            :     }
      91                 :            : 
      92                 :            :     /**
      93                 :            :      * Returns the segment's end x-coordinate.
      94                 :            :      * \see end()
      95                 :            :      * \see endY()
      96                 :            :      */
      97                 :          1 :     double endX() const SIP_HOLDGIL
      98                 :            :     {
      99                 :          1 :       return mEnd.x();
     100                 :            :     }
     101                 :            : 
     102                 :            :     /**
     103                 :            :      * Returns the segment's end y-coordinate.
     104                 :            :      * \see end()
     105                 :            :      * \see endX()
     106                 :            :      */
     107                 :          1 :     double endY() const SIP_HOLDGIL
     108                 :            :     {
     109                 :          1 :       return mEnd.y();
     110                 :            :     }
     111                 :            : 
     112                 :            :     /**
     113                 :            :      * Returns the segment's start point.
     114                 :            :      * \see end()
     115                 :            :      * \see startX()
     116                 :            :      * \see startY()
     117                 :            :      */
     118                 :          0 :     QgsPointXY start() const SIP_HOLDGIL
     119                 :            :     {
     120                 :          0 :       return mStart;
     121                 :            :     }
     122                 :            : 
     123                 :            :     /**
     124                 :            :      * Returns the segment's end point.
     125                 :            :      * \see start()
     126                 :            :      * \see endX()
     127                 :            :      * \see endY()
     128                 :            :      */
     129                 :          0 :     QgsPointXY end() const SIP_HOLDGIL
     130                 :            :     {
     131                 :          0 :       return mEnd;
     132                 :            :     }
     133                 :            : 
     134                 :            :     /**
     135                 :            :      * Sets the segment's start \a x coordinate.
     136                 :            :      * \see setEndX()
     137                 :            :      * \see setStart()
     138                 :            :      * \see setStartY()
     139                 :            :      */
     140                 :            :     void setStartX( double x ) SIP_HOLDGIL
     141                 :            :     {
     142                 :            :       mStart.setX( x );
     143                 :            :     }
     144                 :            : 
     145                 :            :     /**
     146                 :            :      * Sets the segment's start \a y coordinate.
     147                 :            :      * \see setEndY()
     148                 :            :      * \see setStart()
     149                 :            :      * \see setStartX()
     150                 :            :      */
     151                 :            :     void setStartY( double y ) SIP_HOLDGIL
     152                 :            :     {
     153                 :            :       mStart.setY( y );
     154                 :            :     }
     155                 :            : 
     156                 :            :     /**
     157                 :            :      * Sets the segment's end \a x coordinate.
     158                 :            :      * \see setStartX()
     159                 :            :      * \see setEnd()
     160                 :            :      * \see setEndY()
     161                 :            :      */
     162                 :            :     void setEndX( double x ) SIP_HOLDGIL
     163                 :            :     {
     164                 :            :       mEnd.setX( x );
     165                 :            :     }
     166                 :            : 
     167                 :            :     /**
     168                 :            :      * Sets the segment's end \a y coordinate.
     169                 :            :      * \see setStartY()
     170                 :            :      * \see setEnd()
     171                 :            :      * \see setEndX()
     172                 :            :      */
     173                 :            :     void setEndY( double y ) SIP_HOLDGIL
     174                 :            :     {
     175                 :            :       mEnd.setY( y );
     176                 :            :     }
     177                 :            : 
     178                 :            :     /**
     179                 :            :      * Sets the segment's \a start point.
     180                 :            :      * \see setStartX()
     181                 :            :      * \see setStartY()
     182                 :            :      * \see setEnd()
     183                 :            :      */
     184                 :            :     void setStart( const QgsPointXY &start ) SIP_HOLDGIL
     185                 :            :     {
     186                 :            :       mStart = start;
     187                 :            :     }
     188                 :            : 
     189                 :            :     /**
     190                 :            :      * Sets the segment's \a end point.
     191                 :            :      * \see setEndX()
     192                 :            :      * \see setEndY()
     193                 :            :      * \see setStart()
     194                 :            :      */
     195                 :            :     void setEnd( const QgsPointXY &end ) SIP_HOLDGIL
     196                 :            :     {
     197                 :            :       mEnd = end;
     198                 :            :     }
     199                 :            : 
     200                 :            :     /**
     201                 :            :      * Tests if a \a point is to the left of the line segment.
     202                 :            :      *
     203                 :            :      * Returns -1 if the point falls to the left of the line, or +1 if the point
     204                 :            :      * is to the right.
     205                 :            :      *
     206                 :            :      * If the return value is 0, then the test was unsuccessful (e.g. due to testing a point exactly
     207                 :            :      * on the line, or exactly in line with the segment) and the result is undefined.
     208                 :            :      *
     209                 :            :      * \see QgsGeometryUtils::leftOfLine()
     210                 :            :      */
     211                 :            :     int pointLeftOfLine( const QgsPointXY &point ) const SIP_HOLDGIL;
     212                 :            : 
     213                 :            :     /**
     214                 :            :      * Reverses the line segment, so that the start and end points are flipped.
     215                 :            :      */
     216                 :          0 :     void reverse() SIP_HOLDGIL
     217                 :            :     {
     218                 :          0 :       std::swap( mStart, mEnd );
     219                 :          0 :     }
     220                 :            : 
     221                 :            :     //! Equality operator
     222                 :            :     bool operator==( const QgsLineSegment2D &other ) const SIP_HOLDGIL
     223                 :            :     {
     224                 :            :       return mStart == other.mStart && mEnd == other.mEnd;
     225                 :            :     }
     226                 :            : 
     227                 :            :     //! Inequality operator
     228                 :            :     bool operator!=( const QgsLineSegment2D &other ) const SIP_HOLDGIL
     229                 :            :     {
     230                 :            :       return mStart != other.mStart || mEnd != other.mEnd;
     231                 :            :     }
     232                 :            : 
     233                 :            :   private:
     234                 :            : 
     235                 :            :     QgsPointXY mStart;
     236                 :            :     QgsPointXY mEnd;
     237                 :            : 
     238                 :            : };
     239                 :            : 
     240                 :            : #endif // QGSLINESEGMENT_H

Generated by: LCOV version 1.14