37  double z = std::numeric_limits< double >::quiet_NaN();
 
   38  double m = std::numeric_limits< double >::quiet_NaN();
 
   50  if ( p2.
is3D() && std::isnan( z ) )
 
   52  if ( p3.
is3D() && std::isnan( z ) )
 
   54  if ( !std::isnan( z ) )
 
   65  const QgsPoint point1( pType, p1.
x(), p1.
y(), std::isnan( p1.
z() ) ? z : p1.
z() );
 
   66  const QgsPoint point2( pType, p2.
x(), p2.
y(), std::isnan( p2.
z() ) ? z : p2.
z() );
 
   67  const QgsPoint point3( pType, p3.
x(), p3.
y(), std::isnan( p3.
z() ) ? z : p3.
z() );
 
   70  double inclination = 90.0;
 
   72  const double azimuth = point1.azimuth( point2 ) + 90.0 * 
QgsGeometryUtilsBase::leftOfLine( point3.x(), point3.y(), point1.x(), point1.y(), point2.x(), point2.y() );
 
   77      if ( point2.is3D() && point3.is3D() )
 
   79        inclination = point2.inclination( point3 );
 
   80        distance = point2.distance3D( point3 );
 
   84        distance = point2.distance( point3 );
 
   92                             QgsVector3D( point2.x(), point2.y(), std::isnan( point2.z() ) ? z : point2.z() ),
 
   93                             QgsVector3D( point3.x(), point3.y(), std::isnan( point3.z() ) ? z : point3.z() ) );
 
   94      const QgsPoint pV3( pType, v3.
x(), v3.
y(), v3.
z() );
 
  121  if ( !std::isnan( m ) )
 
  129  rect.setPoints( fp1, fp2, fp3, fp4 );
 
 
  140  const double z = p1.
z();
 
  141  const double m = p1.
m();
 
  143  double xMin = 0, xMax = 0, yMin = 0, yMax = 0;
 
  145  if ( p1.
x() < p2.
x() )
 
  157  if ( p1.
y() < p2.
y() )
 
 
  183  const double z = p1.
z();
 
  184  const double m = p1.
m();
 
  189  const double azimuth = p1.
azimuth( point3 ) + 90.0;
 
  190  const double distance = p1.
distance( point3 ) / 2.0;
 
  193  point2 = midPoint.
project( -distance, azimuth );
 
  194  point4 = midPoint.
project( distance, azimuth );
 
  201  quad.
setPoints( p1, point2, point3, point4 );
 
 
  210  const double xOffset = std::fabs( point.
x() - center.
x() );
 
  211  const double yOffset = std::fabs( point.
y() - center.
y() );
 
  214                           QgsPoint( center.
wkbType(), center.
x() - xOffset, center.
y() + yOffset, center.
z(), center.
m() ),
 
  215                           QgsPoint( center.
wkbType(), center.
x() + xOffset, center.
y() + yOffset, center.
z(), center.
m() ),
 
  216                           QgsPoint( center.
wkbType(), center.
x() + xOffset, center.
y() - yOffset, center.
z(), center.
m() ) );
 
 
  233static bool equalPoint( 
const QgsPoint &p1, 
const QgsPoint &p2, 
double epsilon )
 
  239    equal &= 
qgsDoubleNear( p1.
z(), p2.
z(), epsilon ) || ( std::isnan( p1.
z() ) && std::isnan( p2.
z() ) );
 
  241    equal &= 
qgsDoubleNear( p1.
m(), p2.
m(), epsilon ) || ( std::isnan( p1.
m() ) && std::isnan( p2.
m() ) );
 
  256  return ( ( equalPoint( mPoint1, other.mPoint1, epsilon ) ) &&
 
  257           ( equalPoint( mPoint2, other.mPoint2, epsilon ) ) &&
 
  258           ( equalPoint( mPoint3, other.mPoint3, epsilon ) ) &&
 
  259           ( equalPoint( mPoint4, other.mPoint4, epsilon ) ) );
 
 
  288  return !( isIntersection1234 || isIntersection2341 );
 
  293  const bool isCollinear =
 
  307  const bool doublePoints =
 
  309      ( p1 == p2 ) || ( p1 == p3 ) || ( p1 == p4 ) || ( p2 == p3 ) || ( p2 == p4 ) || ( p3 == p4 ) );
 
  311  return !doublePoints;
 
  323           haveSameType( p1, p2, p3, p4 ) &&
 
  324           notHaveDoublePoints( p1, p2, p3, p4 ) &&
 
  325           isNotAntiParallelogram( p1, p2, p3, p4 ) &&
 
  326           isNotCollinear( p1, p2, p3, p4 )
 
  332  return validate( mPoint1, mPoint2, mPoint3, mPoint4 );
 
 
  340      if ( validate( newPoint, mPoint2, mPoint3, mPoint4 ) == 
false )
 
  345      if ( validate( mPoint1, newPoint, mPoint3, mPoint4 ) == 
false )
 
  350      if ( validate( mPoint1, mPoint2, newPoint, mPoint4 ) == 
false )
 
  355      if ( validate( mPoint1, mPoint2, mPoint3, newPoint ) == 
false )
 
 
  366  if ( validate( p1, p2, p3, p4 ) == 
false )
 
 
  381  pts << mPoint1 << mPoint2 << mPoint3 << mPoint4 << mPoint1;
 
 
  388  auto polygon = std::make_unique< QgsPolygon >();
 
  391    return polygon.release();
 
  396  return polygon.release();
 
 
  401  auto ext = std::make_unique< QgsLineString>();
 
  404    return ext.release();
 
  410  ext->setPoints( pts );
 
  418  return ext.release();
 
 
  425    rep = QStringLiteral( 
"Empty" );
 
  427    rep = QStringLiteral( 
"Quadrilateral (Point 1: %1, Point 2: %2, Point 3: %3, Point 4: %4)" )
 
  428          .arg( mPoint1.
asWkt( pointPrecision ), 0, 
's' )
 
  429          .arg( mPoint2.
asWkt( pointPrecision ), 0, 
's' )
 
  430          .arg( mPoint3.
asWkt( pointPrecision ), 0, 
's' )
 
  431          .arg( mPoint4.
asWkt( pointPrecision ), 0, 
's' );
 
 
  438  std::unique_ptr<QgsPolygon> polygon( 
toPolygon() );
 
  439  return polygon->area();
 
 
  444  std::unique_ptr<QgsPolygon> polygon( 
toPolygon() );
 
  445  return polygon->perimeter();
 
 
WkbType
The WKB type describes the number of dimensions a geometry has.
 
bool isMeasure() const
Returns true if the geometry contains m values.
 
bool is3D() const
Returns true if the geometry is 3D and contains a z-value.
 
Qgis::WkbType wkbType() const
Returns the WKB type of the geometry.
 
static int leftOfLine(const double x, const double y, const double x1, const double y1, const double x2, const double y2)
Returns a value < 0 if the point (x, y) is left of the line from (x1, y1) -> (x2, y2).
 
static bool segmentIntersection(const QgsPoint &p1, const QgsPoint &p2, const QgsPoint &q1, const QgsPoint &q2, QgsPoint &intersectionPoint, bool &isIntersection, double tolerance=1e-8, bool acceptImproperIntersection=false)
Compute the intersection between two segments.
 
static int segmentSide(const QgsPoint &pt1, const QgsPoint &pt3, const QgsPoint &pt2)
For line defined by points pt1 and pt3, find out on which side of the line is point pt2.
 
static QgsPoint midpoint(const QgsPoint &pt1, const QgsPoint &pt2)
Returns a middle point between points pt1 and pt2.
 
Line string geometry type, with support for z-dimension and m-values.
 
A class to represent a 2D point.
 
Point geometry type, with support for z-dimension and m-values.
 
double inclination(const QgsPoint &other) const
Calculates Cartesian inclination between this point and other one (starting from zenith = 0 to nadir ...
 
bool addMValue(double mValue=0) override
Adds a measure to the geometry, initialized to a preset value.
 
double azimuth(const QgsPoint &other) const
Calculates Cartesian azimuth between this point and other one (clockwise in degree,...
 
QString asWkt(int precision=17) const override
Returns a WKT representation of the geometry.
 
double distance3D(double x, double y, double z) const
Returns the Cartesian 3D distance between this point and a specified x, y, z coordinate.
 
double distance(double x, double y) const
Returns the Cartesian 2D distance between this point and a specified x, y coordinate.
 
bool dropZValue() override
Drops any z-dimensions which exist in the geometry.
 
QgsPoint project(double distance, double azimuth, double inclination=90.0) const
Returns a new point which corresponds to this point projected by a specified distance with specified ...
 
Quadrilateral geometry type.
 
bool setPoint(const QgsPoint &newPoint, Point index)
Sets the point newPoint at the index.
 
bool operator!=(const QgsQuadrilateral &other) const
 
double perimeter() const
Returns the perimeter of the quadrilateral, or 0 if the quadrilateral is empty.
 
static QgsQuadrilateral fromRectangle(const QgsRectangle &rectangle)
Construct a QgsQuadrilateral as a rectangle from a QgsRectangle.
 
static QgsQuadrilateral rectangleFromCenterPoint(const QgsPoint ¢er, const QgsPoint &point)
Construct a QgsQuadrilateral as a rectangle from center point center and another point point.
 
static QgsQuadrilateral rectangleFromExtent(const QgsPoint &p1, const QgsPoint &p2)
Construct a QgsQuadrilateral as a rectangle from an extent, defined by two opposite corner points.
 
QgsLineString * toLineString(bool force2D=false) const
Returns the quadrilateral as a new linestring.
 
Point
Simple enumeration to ensure indices in setPoint.
 
QString toString(int pointPrecision=17) const
Returns a string representation of the quadrilateral.
 
bool isValid() const
Convenient method to determine if a QgsQuadrilateral is valid.
 
double area() const
Returns the area of the quadrilateral, or 0 if the quadrilateral is empty.
 
static QgsQuadrilateral squareFromDiagonal(const QgsPoint &p1, const QgsPoint &p2)
Construct a QgsQuadrilateral as a square from a diagonal.
 
QgsQuadrilateral()
Constructor for an empty quadrilateral geometry.
 
bool equals(const QgsQuadrilateral &other, double epsilon=4 *std::numeric_limits< double >::epsilon()) const
Compares two QgsQuadrilateral, allowing specification of the maximum allowable difference between poi...
 
QgsPolygon * toPolygon(bool force2D=false) const
Returns the quadrilateral as a new polygon.
 
static QgsQuadrilateral rectangleFrom3Points(const QgsPoint &p1, const QgsPoint &p2, const QgsPoint &p3, ConstructionOption mode)
Construct a QgsQuadrilateral as a Rectangle from 3 points.
 
ConstructionOption
A quadrilateral can be constructed from 3 points where the second distance can be determined by the t...
 
@ Distance
Second distance is equal to the distance between 2nd and 3rd point.
 
@ Projected
Second distance is equal to the distance of the perpendicular projection of the 3rd point on the segm...
 
bool operator==(const QgsQuadrilateral &other) const
 
QgsPointSequence points() const
Returns a list including the vertices of the quadrilateral.
 
bool setPoints(const QgsPoint &p1, const QgsPoint &p2, const QgsPoint &p3, const QgsPoint &p4)
Set all points Returns false if the QgsQuadrilateral is not valid:
 
A rectangle specified with double values.
 
Class for storage of 3D vectors similar to QVector3D, with the difference that it uses double precisi...
 
double y() const
Returns Y coordinate.
 
double z() const
Returns Z coordinate.
 
double x() const
Returns X coordinate.
 
static QgsVector3D perpendicularPoint(const QgsVector3D &v1, const QgsVector3D &v2, const QgsVector3D &vp)
Returns the perpendicular point of vector vp from [v1 - v2].
 
static Qgis::WkbType addZ(Qgis::WkbType type)
Adds the z dimension to a WKB type and returns the new type.
 
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
 
QVector< QgsPoint > QgsPointSequence