QGIS API Documentation  3.21.0-Master (56b4176581)
qgscircle.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgscircle.h
3  --------------
4  begin : March 2017
5  copyright : (C) 2017 by Loîc Bartoletti
6  email : lbartoletti at tuxfamily dot org
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 QGSCIRCLE_H
19 #define QGSCIRCLE_H
20 
21 #include <QString>
22 
23 #include "qgis_core.h"
24 #include "qgsellipse.h"
25 #include "qgspolygon.h"
26 #include "qgsrectangle.h"
27 #include "qgscircularstring.h"
28 
29 
30 class QgsPoint;
31 
43 class CORE_EXPORT QgsCircle : public QgsEllipse
44 {
45  public:
46  QgsCircle();
47 
54  QgsCircle( const QgsPoint &center, double radius, double azimuth = 0 ) SIP_HOLDGIL;
55 
66  static QgsCircle from2Points( const QgsPoint &pt1, const QgsPoint &pt2 ) SIP_HOLDGIL;
67 
80  static QgsCircle from3Points( const QgsPoint &pt1, const QgsPoint &pt2, const QgsPoint &pt3, double epsilon = 1E-8 ) SIP_HOLDGIL;
81 
89  static QgsCircle fromCenterDiameter( const QgsPoint &center, double diameter, double azimuth = 0 ) SIP_HOLDGIL;
90 
91 
100  static QgsCircle fromCenterPoint( const QgsPoint &center, const QgsPoint &pt1 ) SIP_HOLDGIL;
101 
102 
131  static QgsCircle from3Tangents( const QgsPoint &pt1_tg1, const QgsPoint &pt2_tg1,
132  const QgsPoint &pt1_tg2, const QgsPoint &pt2_tg2,
133  const QgsPoint &pt1_tg3, const QgsPoint &pt2_tg3,
134  double epsilon = 1E-8,
135  QgsPoint pos = QgsPoint() ) SIP_HOLDGIL;
136 
177  static QVector<QgsCircle> from3TangentsMulti( const QgsPoint &pt1_tg1, const QgsPoint &pt2_tg1,
178  const QgsPoint &pt1_tg2, const QgsPoint &pt2_tg2,
179  const QgsPoint &pt1_tg3, const QgsPoint &pt2_tg3,
180  double epsilon = 1E-8,
181  QgsPoint pos = QgsPoint() ) SIP_HOLDGIL;
182 
193  static QgsCircle fromExtent( const QgsPoint &pt1, const QgsPoint &pt2 ) SIP_HOLDGIL;
194 
205  static QgsCircle minimalCircleFrom3Points( const QgsPoint &pt1, const QgsPoint &pt2, const QgsPoint &pt3, double epsilon = 1E-8 ) SIP_HOLDGIL;
206 
221  int intersections( const QgsCircle &other, QgsPoint &intersection1 SIP_OUT, QgsPoint &intersection2 SIP_OUT, bool useZ = false ) const;
222 
236  bool tangentToPoint( const QgsPointXY &p, QgsPointXY &pt1 SIP_OUT, QgsPointXY &pt2 SIP_OUT ) const;
237 
259  int outerTangents( const QgsCircle &other,
260  QgsPointXY &line1P1 SIP_OUT, QgsPointXY &line1P2 SIP_OUT,
261  QgsPointXY &line2P1 SIP_OUT, QgsPointXY &line2P2 SIP_OUT ) const;
262 
284  int innerTangents( const QgsCircle &other,
285  QgsPointXY &line1P1 SIP_OUT, QgsPointXY &line1P2 SIP_OUT,
286  QgsPointXY &line2P1 SIP_OUT, QgsPointXY &line2P2 SIP_OUT ) const;
287 
288  double area() const override SIP_HOLDGIL;
289  double perimeter() const override SIP_HOLDGIL;
290 
291  //inherited
292  // void setAzimuth(const double azimuth);
293  // double azimuth() const {return mAzimuth; }
294 
295 
301  void setSemiMajorAxis( double semiMajorAxis ) override SIP_HOLDGIL;
302 
308  void setSemiMinorAxis( double semiMinorAxis ) override SIP_HOLDGIL;
309 
311  double radius() const SIP_HOLDGIL {return mSemiMajorAxis;}
313  void setRadius( double radius ) SIP_HOLDGIL
314  {
315  mSemiMajorAxis = std::fabs( radius );
316  mSemiMinorAxis = mSemiMajorAxis;
317  }
318 
325  QVector<QgsPoint> northQuadrant() const SIP_FACTORY;
326 
331  QgsCircularString *toCircularString( bool oriented = false ) const;
332 
334  bool contains( const QgsPoint &point, double epsilon = 1E-8 ) const;
335 
336  QgsRectangle boundingBox() const override;
337 
338  QString toString( int pointPrecision = 17, int radiusPrecision = 17, int azimuthPrecision = 2 ) const override;
339 
349  QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
350 
368  QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
369 
370 #ifdef SIP_RUN
371  SIP_PYOBJECT __repr__();
372  % MethodCode
373  QString str = QStringLiteral( "<QgsCircle: %1>" ).arg( sipCpp->toString() );
374  sipRes = PyUnicode_FromString( str.toUtf8().constData() );
375  % End
376 #endif
377 };
378 
379 #endif // QGSCIRCLE_H
Abstract base class for all geometries.
Circle geometry type.
Definition: qgscircle.h:44
double radius() const SIP_HOLDGIL
Returns the radius of the circle.
Definition: qgscircle.h:311
void setRadius(double radius) SIP_HOLDGIL
Sets the radius of the circle.
Definition: qgscircle.h:313
Circular string geometry type.
Ellipse geometry type.
Definition: qgsellipse.h:40
static QgsEllipse fromExtent(const QgsPoint &pt1, const QgsPoint &pt2) SIP_HOLDGIL
Constructs an ellipse by an extent (aka bounding box / QgsRectangle).
Definition: qgsellipse.cpp:65
virtual void setSemiMajorAxis(double semiMajorAxis) SIP_HOLDGIL
Sets the semi-major axis.
Definition: qgsellipse.cpp:124
virtual double perimeter() const SIP_HOLDGIL
The circumference of the ellipse using first approximation of Ramanujan.
Definition: qgsellipse.cpp:170
double mSemiMajorAxis
Definition: qgsellipse.h:253
static QgsEllipse fromCenterPoint(const QgsPoint &ptc, const QgsPoint &pt1) SIP_HOLDGIL
Constructs an ellipse by a center point and a another point.
Definition: qgsellipse.cpp:77
virtual void setSemiMinorAxis(double semiMinorAxis) SIP_HOLDGIL
Sets the semi-minor axis.
Definition: qgsellipse.cpp:129
virtual double area() const SIP_HOLDGIL
The area of the ellipse.
Definition: qgsellipse.cpp:165
A class to represent a 2D point.
Definition: qgspointxy.h:59
Point geometry type, with support for z-dimension and m-values.
Definition: qgspoint.h:49
A rectangle specified with double values.
Definition: qgsrectangle.h:42
#define str(x)
Definition: qgis.cpp:37
#define SIP_OUT
Definition: qgis_sip.h:58
#define SIP_HOLDGIL
Definition: qgis_sip.h:157
#define SIP_FACTORY
Definition: qgis_sip.h:76
int precision