QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
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
30class QgsPoint;
31
42class CORE_EXPORT QgsCircle : public QgsEllipse
43{
44 public:
45 QgsCircle();
46
53 QgsCircle( const QgsPoint &center, double radius, double azimuth = 0 ) SIP_HOLDGIL;
54
65 static QgsCircle from2Points( const QgsPoint &pt1, const QgsPoint &pt2 ) SIP_HOLDGIL;
66
79 static QgsCircle from3Points( const QgsPoint &pt1, const QgsPoint &pt2, const QgsPoint &pt3, double epsilon = 1E-8 ) SIP_HOLDGIL;
80
88 static QgsCircle fromCenterDiameter( const QgsPoint &center, double diameter, double azimuth = 0 ) SIP_HOLDGIL;
89
90
99 static QgsCircle fromCenterPoint( const QgsPoint &center, const QgsPoint &pt1 ) SIP_HOLDGIL;
100
101
130 static QgsCircle from3Tangents( const QgsPoint &pt1_tg1, const QgsPoint &pt2_tg1,
131 const QgsPoint &pt1_tg2, const QgsPoint &pt2_tg2,
132 const QgsPoint &pt1_tg3, const QgsPoint &pt2_tg3,
133 double epsilon = 1E-8,
134 const QgsPoint &pos = QgsPoint() ) SIP_HOLDGIL;
135
176 static QVector<QgsCircle> from3TangentsMulti( const QgsPoint &pt1_tg1, const QgsPoint &pt2_tg1,
177 const QgsPoint &pt1_tg2, const QgsPoint &pt2_tg2,
178 const QgsPoint &pt1_tg3, const QgsPoint &pt2_tg3,
179 double epsilon = 1E-8,
180 const QgsPoint &pos = QgsPoint() ) SIP_HOLDGIL;
181
192 static QgsCircle fromExtent( const QgsPoint &pt1, const QgsPoint &pt2 ) SIP_HOLDGIL;
193
204 static QgsCircle minimalCircleFrom3Points( const QgsPoint &pt1, const QgsPoint &pt2, const QgsPoint &pt3, double epsilon = 1E-8 ) SIP_HOLDGIL;
205
220 int intersections( const QgsCircle &other, QgsPoint &intersection1 SIP_OUT, QgsPoint &intersection2 SIP_OUT, bool useZ = false ) const;
221
235 bool tangentToPoint( const QgsPointXY &p, QgsPointXY &pt1 SIP_OUT, QgsPointXY &pt2 SIP_OUT ) const;
236
258 int outerTangents( const QgsCircle &other,
259 QgsPointXY &line1P1 SIP_OUT, QgsPointXY &line1P2 SIP_OUT,
260 QgsPointXY &line2P1 SIP_OUT, QgsPointXY &line2P2 SIP_OUT ) const;
261
283 int innerTangents( const QgsCircle &other,
284 QgsPointXY &line1P1 SIP_OUT, QgsPointXY &line1P2 SIP_OUT,
285 QgsPointXY &line2P1 SIP_OUT, QgsPointXY &line2P2 SIP_OUT ) const;
286
287 double area() const override SIP_HOLDGIL;
288 double perimeter() const override SIP_HOLDGIL;
289
290 //inherited
291 // void setAzimuth(const double azimuth);
292 // double azimuth() const {return mAzimuth; }
293
294
300 void setSemiMajorAxis( double semiMajorAxis ) override SIP_HOLDGIL;
301
307 void setSemiMinorAxis( double semiMinorAxis ) override SIP_HOLDGIL;
308
310 double radius() const SIP_HOLDGIL {return mSemiMajorAxis;}
312 void setRadius( double radius ) SIP_HOLDGIL
313 {
314 mSemiMajorAxis = std::fabs( radius );
315 mSemiMinorAxis = mSemiMajorAxis;
316 }
317
324 QVector<QgsPoint> northQuadrant() const SIP_FACTORY;
325
330 QgsCircularString *toCircularString( bool oriented = false ) const;
331
333 bool contains( const QgsPoint &point, double epsilon = 1E-8 ) const;
334
335 QgsRectangle boundingBox() const override;
336
337 QString toString( int pointPrecision = 17, int radiusPrecision = 17, int azimuthPrecision = 2 ) const override;
338
348 QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
349
367 QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
368
369#ifdef SIP_RUN
370 SIP_PYOBJECT __repr__();
371 % MethodCode
372 QString str = QStringLiteral( "<QgsCircle: %1>" ).arg( sipCpp->toString() );
373 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
374 % End
375#endif
376};
377
378#endif // QGSCIRCLE_H
Abstract base class for all geometries.
Circle geometry type.
Definition: qgscircle.h:43
double radius() const
Returns the radius of the circle.
Definition: qgscircle.h:310
void setRadius(double radius)
Sets the radius of the circle.
Definition: qgscircle.h:312
Circular string geometry type.
Ellipse geometry type.
Definition: qgsellipse.h:39
static QgsEllipse fromCenterPoint(const QgsPoint &ptc, const QgsPoint &pt1)
Constructs an ellipse by a center point and a another point.
Definition: qgsellipse.cpp:77
double mSemiMajorAxis
Definition: qgsellipse.h:252
virtual double perimeter() const
The circumference of the ellipse using first approximation of Ramanujan.
Definition: qgsellipse.cpp:170
virtual void setSemiMinorAxis(double semiMinorAxis)
Sets the semi-minor axis.
Definition: qgsellipse.cpp:129
static QgsEllipse fromExtent(const QgsPoint &pt1, const QgsPoint &pt2)
Constructs an ellipse by an extent (aka bounding box / QgsRectangle).
Definition: qgsellipse.cpp:65
virtual double area() const
The area of the ellipse.
Definition: qgsellipse.cpp:165
virtual void setSemiMajorAxis(double semiMajorAxis)
Sets the semi-major axis.
Definition: qgsellipse.cpp:124
A class to represent a 2D point.
Definition: qgspointxy.h:60
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:38
#define SIP_OUT
Definition: qgis_sip.h:58
#define SIP_HOLDGIL
Definition: qgis_sip.h:171
#define SIP_FACTORY
Definition: qgis_sip.h:76
int precision