QGIS API Documentation  3.21.0-Master (909859188c)
qgstriangle.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgstriangle.h
3  -------------------
4  begin : January 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 QGSTRIANGLE_H
19 #define QGSTRIANGLE_H
20 
21 #include "qgis_core.h"
22 #include "qgis_sip.h"
23 #include "qgspolygon.h"
24 #include "qgscircle.h"
25 #include "qgslinestring.h"
26 
33 class CORE_EXPORT QgsTriangle : public QgsPolygon
34 {
35  public:
36 
41 
48  QgsTriangle( const QgsPoint &p1, const QgsPoint &p2, const QgsPoint &p3 ) SIP_HOLDGIL;
49 
56  explicit QgsTriangle( const QgsPointXY &p1, const QgsPointXY &p2, const QgsPointXY &p3 ) SIP_HOLDGIL;
57 
64  explicit QgsTriangle( QPointF p1, QPointF p2, QPointF p3 ) SIP_HOLDGIL;
65 
66  bool operator==( const QgsTriangle &other ) const SIP_HOLDGIL;
67  bool operator!=( const QgsTriangle &other ) const SIP_HOLDGIL;
68 
69  QString geometryType() const override SIP_HOLDGIL;
70  QgsTriangle *clone() const override SIP_FACTORY;
71  void clear() override;
72 
73  bool fromWkb( QgsConstWkbPtr &wkbPtr ) override;
74 
75  bool fromWkt( const QString &wkt ) override;
76 
77  // inherited: QString asWkt( int precision = 17 ) const;
78  // inherited (as a polygon): QDomElement asGML2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
79  QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
80 
81  QgsPolygon *surfaceToPolygon() const override SIP_FACTORY;
82 
83  QgsCurvePolygon *toCurveType() const override SIP_FACTORY;
84 
86  void addInteriorRing( QgsCurve *ring SIP_TRANSFER ) override;
87 
92  void setInteriorRings( const QVector< QgsCurve *> &rings ) = delete;
94  bool deleteVertex( QgsVertexId position ) override;
96  bool insertVertex( QgsVertexId position, const QgsPoint &vertex ) override;
97  bool moveVertex( QgsVertexId vId, const QgsPoint &newPos ) override;
98 
99  void setExteriorRing( QgsCurve *ring SIP_TRANSFER ) override;
100 
101  QgsCurve *boundary() const override SIP_FACTORY;
102 
103  // inherited: double pointDistanceToBoundary( double x, double y ) const;
104 
105 
106 #ifdef __clang__
107 #pragma clang diagnostic push
108 #pragma clang diagnostic ignored "-Woverloaded-virtual"
109 #endif
110 
116  QgsPoint vertexAt( int atVertex ) const SIP_HOLDGIL;
117 #ifdef __clang__
118 #pragma clang diagnostic pop
119 #endif
120 
136  QVector<double> lengths() const SIP_HOLDGIL;
137 
153  QVector<double> angles() const SIP_HOLDGIL;
154 
176  bool isDegenerate() SIP_HOLDGIL;
177 
196  bool isIsocele( double lengthTolerance = 0.0001 ) const SIP_HOLDGIL;
197 
216  bool isEquilateral( double lengthTolerance = 0.0001 ) const SIP_HOLDGIL;
217 
236  bool isRight( double angleTolerance = 0.0001 ) const SIP_HOLDGIL;
237 
256  bool isScalene( double lengthTolerance = 0.0001 ) const SIP_HOLDGIL;
257 
273  QVector<QgsLineString> altitudes() const SIP_HOLDGIL;
274 
290  QVector<QgsLineString> medians() const SIP_HOLDGIL;
291 
308  QVector<QgsLineString> bisectors( double lengthTolerance = 0.0001 ) const SIP_HOLDGIL;
309 
325  QgsTriangle medial() const SIP_HOLDGIL;
326 
343  QgsPoint orthocenter( double lengthTolerance = 0.0001 ) const SIP_HOLDGIL;
344 
360  QgsPoint circumscribedCenter() const SIP_HOLDGIL;
361 
377  double circumscribedRadius() const SIP_HOLDGIL;
378 
394  QgsCircle circumscribedCircle() const SIP_HOLDGIL;
395 
412  QgsPoint inscribedCenter() const SIP_HOLDGIL;
413 
429  double inscribedRadius() const SIP_HOLDGIL;
430 
446  QgsCircle inscribedCircle() const SIP_HOLDGIL;
447 
448 #ifndef SIP_RUN
449 
457  inline static const QgsTriangle *cast( const QgsAbstractGeometry *geom )
458  {
459  if ( geom && QgsWkbTypes::flatType( geom->wkbType() ) == QgsWkbTypes::Triangle )
460  return static_cast<const QgsTriangle *>( geom );
461  return nullptr;
462  }
463 #endif
464 
466 
467 
468 };
469 #endif // QGSTRIANGLE_H
Abstract base class for all geometries.
AxisOrder
Axis order for GML generation.
QgsWkbTypes::Type wkbType() const SIP_HOLDGIL
Returns the WKB type of the geometry.
Circle geometry type.
Definition: qgscircle.h:44
A const WKB pointer.
Definition: qgswkbptr.h:138
Curve polygon geometry type.
bool moveVertex(QgsVertexId position, const QgsPoint &newPos) override
Moves a vertex within the geometry.
bool operator!=(const QgsAbstractGeometry &other) const override
QgsPoint vertexAt(QgsVertexId id) const override
Returns the point corresponding to a specified vertex id.
bool insertVertex(QgsVertexId position, const QgsPoint &vertex) override
Inserts a vertex into the geometry.
bool fromWkt(const QString &wkt) override
Sets the geometry from a WKT string.
bool deleteVertex(QgsVertexId position) override
Deletes a vertex within the geometry.
QDomElement asGml3(QDomDocument &doc, int precision=17, const QString &ns="gml", QgsAbstractGeometry::AxisOrder axisOrder=QgsAbstractGeometry::AxisOrder::XY) const override
Returns a GML3 representation of the geometry.
bool operator==(const QgsAbstractGeometry &other) const override
Abstract base class for curved geometry type.
Definition: qgscurve.h:36
Line string geometry type, with support for z-dimension and m-values.
Definition: qgslinestring.h:44
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
Polygon geometry type.
Definition: qgspolygon.h:34
QgsCurvePolygon * toCurveType() const override
Returns the geometry converted to the more generic curve type QgsCurvePolygon.
Definition: qgspolygon.cpp:316
void setExteriorRing(QgsCurve *ring) override
Sets the exterior ring of the polygon.
Definition: qgspolygon.cpp:219
void addInteriorRing(QgsCurve *ring) override
Adds an interior ring to the geometry (takes ownership)
Definition: qgspolygon.cpp:188
QgsPolygon * clone() const override
Clones the geometry by performing a deep copy.
Definition: qgspolygon.cpp:54
void clear() override
Clears the geometry, ie reset it to a null geometry.
Definition: qgspolygon.cpp:59
QgsAbstractGeometry * boundary() const override
Returns the closure of the combinatorial boundary of the geometry (ie the topological boundary of the...
Definition: qgspolygon.cpp:254
QgsPolygon * createEmptyWithSameType() const override
Creates a new geometry with the same class and same WKB type as the original and transfers ownership.
Definition: qgspolygon.cpp:47
QString geometryType() const override SIP_HOLDGIL
Returns a unique string representing the geometry type.
Definition: qgspolygon.cpp:42
bool fromWkb(QgsConstWkbPtr &wkb) override
Sets the geometry from a WKB string.
Definition: qgspolygon.cpp:65
QgsPolygon * surfaceToPolygon() const override
Gets a polygon representation of this surface.
Definition: qgspolygon.cpp:311
Triangle geometry type.
Definition: qgstriangle.h:34
void setInteriorRings(const QVector< QgsCurve * > &rings)=delete
Inherited method not used.
static const QgsTriangle * cast(const QgsAbstractGeometry *geom)
Cast the geom to a QgsTriangle.
Definition: qgstriangle.h:457
static Type flatType(Type type) SIP_HOLDGIL
Returns the flat type for a WKB type.
Definition: qgswkbtypes.h:702
#define SIP_TRANSFER
Definition: qgis_sip.h:36
#define SIP_HOLDGIL
Definition: qgis_sip.h:157
#define SIP_FACTORY
Definition: qgis_sip.h:76
int precision
Utility class for identifying a unique vertex within a geometry.