46 x << p1.
x() << p2.
x() << p3.
x();
48 y << p1.
y() << p2.
y() << p3.
y();
58 x << p1.x() << p2.x() << p3.x();
60 y << p1.y() << p2.y() << p3.y();
89 return QStringLiteral(
"Triangle" );
94 auto result = qgis::make_unique< QgsTriangle >();
96 return result.release();
150 line->fromWkbPoints( ringType, wkbPtr );
168 QString defaultChildWkbType = QStringLiteral(
"LineString%1%2" ).arg(
is3D() ? QStringLiteral(
"Z" ) : QString(),
isMeasure() ? QStringLiteral(
"M" ) : QString() );
171 for (
const QString &childWkt : blocks )
217 QDomElement elemTriangle = doc.createElementNS( ns, QStringLiteral(
"Triangle" ) );
222 QDomElement elemExterior = doc.createElementNS( ns, QStringLiteral(
"exterior" ) );
224 if ( curveElem.tagName() == QLatin1String(
"LineString" ) )
226 curveElem.setTagName( QStringLiteral(
"LinearRing" ) );
228 elemExterior.appendChild( curveElem );
229 elemTriangle.appendChild( elemExterior );
241 std::unique_ptr<QgsCurvePolygon> curvePolygon(
new QgsCurvePolygon() );
244 return curvePolygon.release();
254 Q_UNUSED( position );
260 Q_UNUSED( position );
378 double ax, ay, bx, by, cx, cy;
391 angles.append( ( a1 > M_PI_2 ? a1 - M_PI_2 : a1 ) );
392 angles.append( ( a2 > M_PI_2 ? a2 - M_PI_2 : a2 ) );
393 angles.append( ( a3 > M_PI_2 ? a3 - M_PI_2 : a3 ) );
413 QVector<double> sides =
lengths();
414 bool ab_bc =
qgsDoubleNear( sides.at( 0 ), sides.at( 1 ), lengthTolerance );
415 bool bc_ca =
qgsDoubleNear( sides.at( 1 ), sides.at( 2 ), lengthTolerance );
416 bool ca_ab =
qgsDoubleNear( sides.at( 2 ), sides.at( 0 ), lengthTolerance );
418 return ( ab_bc || bc_ca || ca_ab );
425 QVector<double> sides =
lengths();
426 bool ab_bc =
qgsDoubleNear( sides.at( 0 ), sides.at( 1 ), lengthTolerance );
427 bool bc_ca =
qgsDoubleNear( sides.at( 1 ), sides.at( 2 ), lengthTolerance );
428 bool ca_ab =
qgsDoubleNear( sides.at( 2 ), sides.at( 0 ), lengthTolerance );
430 return ( ab_bc && bc_ca && ca_ab );
437 QVector<double> a =
angles();
438 QVector<double>::iterator ita = a.begin();
439 while ( ita != a.end() )
457 QVector<QgsLineString> alt;
470 QVector<QgsLineString> med;
489 QVector<QgsLineString> bis;
498 bool intersection =
false;
531 QVector<QgsLineString> alt =
altitudes();
570 double x = ( l.at( 0 ) *
vertexAt( 2 ).
x() +
573 double y = ( l.at( 0 ) *
vertexAt( 2 ).
y() +
QgsPolygon * surfaceToPolygon() const override
Gets a polygon representation of this surface.
const QgsCurve * exteriorRing() const
Returns the curve polygon's exterior ring.
void setPoints(const QgsPointSequence &points)
Resets the line string to match the specified list of points.
QgsTriangle * createEmptyWithSameType() const override
Creates a new geometry with the same class and same WKB type as the original and transfers ownership...
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.
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.
void clearCache() const override
Clears any cached parameters associated with the geometry, e.g., bounding boxes.
virtual bool hasCurvedSegments() const
Returns true if the geometry contains curved segments.
static QPair< QgsWkbTypes::Type, QString > wktReadBlock(const QString &wkt)
Parses a WKT block of the format "TYPE( contents )" and returns a pair of geometry type to contents (...
bool fromWkt(const QString &wkt) override
Sets the geometry from a WKT string.
static double angleBetweenThreePoints(double x1, double y1, double x2, double y2, double x3, double y3)
Calculates the angle between the lines AB and BC, where AB and BC described by points a...
bool deleteVertex(QgsVertexId position) override
Inherited method not used. You cannot delete or insert a vertex directly. Returns always false...
A class to represent a 2D point.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
Curve polygon geometry type.
void addInteriorRing(QgsCurve *ring) override
Inherited method not used. You cannot add an interior ring into a triangle.
double area() const override
Returns the area of the geometry.
static QStringList wktGetChildBlocks(const QString &wkt, const QString &defaultType=QString())
Parses a WKT string and returns of list of blocks contained in the WKT.
QgsCircle inscribedCircle() const
Inscribed circle of the triangle.
QgsWkbTypes::Type mWkbType
QVector< QgsCurve * > mInteriorRings
bool isScalene(double lengthTolerance=0.0001) const
Is the triangle scalene (all sides have different lengths)?
QgsTriangle * clone() const override
Clones the geometry by performing a deep copy.
QgsCurve * boundary() const override
Returns the closure of the combinatorial boundary of the geometry (ie the topological boundary of the...
Type
The WKB type describes the number of dimensions a geometry has.
double circumscribedRadius() const
Radius of the circumscribed circle of the triangle.
bool isMeasure() const
Returns true if the geometry contains m values.
void clear() override
Clears the geometry, ie reset it to a null geometry.
static bool setZValueFromPoints(const QgsPointSequence &points, QgsPoint &point)
A Z dimension is added to point if one of the point in the list points is in 3D.
QVector< QgsLineString > bisectors(double lengthTolerance=0.0001) const
The segment (defined by a QgsLineString) returned bisect the angle of a vertex to the opposite side...
Utility class for identifying a unique vertex within a geometry.
bool isIsocele(double lengthTolerance=0.0001) const
Is the triangle isocele (two sides with the same length)?
static QgsPoint midpoint(const QgsPoint &pt1, const QgsPoint &pt2)
Returns a middle point between points pt1 and pt2.
QgsCircle circumscribedCircle() const
Circumscribed circle of the triangle.
static GeometryType geometryType(Type type)
Returns the geometry type for a WKB type, e.g., both MultiPolygon and CurvePolygon would have a Polyg...
bool operator!=(const QgsTriangle &other) const
void setZMTypeFromSubGeometry(const QgsAbstractGeometry *subggeom, QgsWkbTypes::Type baseGeomType)
Updates the geometry type based on whether sub geometries contain z or m values.
QgsPoint circumscribedCenter() const
Center of the circumscribed circle of the triangle.
bool addMValue(double mValue=0) override
Adds a measure to the geometry, initialized to a preset value.
double perimeter() const override
Returns the perimeter of the geometry.
void close()
Closes the line string by appending the first point to the end of the line, if it is not already clos...
virtual bool isClosed() const
Returns true if the curve is closed.
QVector< QgsLineString > medians() const
A median is a segment (defined by a QgsLineString) from a vertex to the midpoint of the opposite side...
Abstract base class for curved geometry type.
bool isEquilateral(double lengthTolerance=0.0001) const
Is the triangle equilateral (three sides with the same length)?
QgsCurvePolygon * toCurveType() const override
Returns the geometry converted to the more generic curve type QgsCurvePolygon.
QgsTriangle medial() const
Medial (or midpoint) triangle of a triangle ABC is the triangle with vertices at the midpoints of the...
bool fromWkb(QgsConstWkbPtr &wkbPtr) override
Sets the geometry from a WKB string.
QgsWkbTypes::Type readHeader() const
readHeader
Point geometry type, with support for z-dimension and m-values.
void setExteriorRing(QgsCurve *ring) override
Sets the exterior ring of the polygon.
bool moveVertex(QgsVertexId vId, const QgsPoint &newPos) override
Moves a vertex within the geometry.
AxisOrder
Axis order for GML generation.
QVector< QgsPoint > QgsPointSequence
QgsCurve * segmentize(double tolerance=M_PI_2/90, SegmentationToleranceType toleranceType=MaximumAngle) const override
Returns a geometry without curves.
QVector< double > angles() const
Returns the three angles of the triangle.
virtual QgsPolygon * toPolygon(double tolerance=M_PI_2/90, SegmentationToleranceType toleranceType=MaximumAngle) const
Returns a new polygon geometry corresponding to a segmentized approximation of the curve...
bool isDegenerate()
Convenient method checking if the geometry is degenerate (have duplicate or colinear point(s))...
double inscribedRadius() const
Radius of the inscribed circle of the triangle.
static QgsLineString perpendicularSegment(const QgsPoint &p, const QgsPoint &s1, const QgsPoint &s2)
Create a perpendicular line segment from p to segment [s1, s2].
Line string geometry type, with support for z-dimension and m-values.
void clear() override
Clears the geometry, ie reset it to a null geometry.
static int leftOfLine(double x, double y, double x1, double y1, double x2, double y2)
Returns a value < 0 if the point (x, y) is left of the line from (x1, y1) -> ( x2, y2).
QVector< double > lengths() const
Returns the three lengths of the triangle.
bool addZValue(double zValue=0) override
Adds a z-dimension to the geometry, initialized to a preset value.
bool insertVertex(QgsVertexId position, const QgsPoint &vertex) override
Inherited method not used. You cannot delete or insert a vertex directly. Returns always false...
static void circleCenterRadius(const QgsPoint &pt1, const QgsPoint &pt2, const QgsPoint &pt3, double &radius, double ¢erX, double ¢erY)
Returns radius and center of the circle through pt1, pt2, pt3.
bool is3D() const
Returns true if the geometry is 3D and contains a z-value.
QgsGeometryConstPartIterator parts() const
Returns Java-style iterator for traversal of parts of the geometry.
QString geometryType() const override
Returns a unique string representing the geometry type.
QgsPoint inscribedCenter() const
Center of the inscribed circle of the triangle.
std::unique_ptr< QgsCurve > mExteriorRing
static Type flatType(Type type)
Returns the flat type for a WKB type.
bool isEmpty() const override
Returns true if the geometry is empty.
virtual int numPoints() const =0
Returns the number of points in the curve.
QgsPoint vertexAt(int atVertex) const
Returns coordinates of a vertex.
QVector< QgsLineString > altitudes() const
An altitude is a segment (defined by a QgsLineString) from a vertex to the opposite side (or...
bool isRight(double angleTolerance=0.0001) const
Is the triangle right-angled?
QgsPoint orthocenter(double lengthTolerance=0.0001) const
An orthocenter is the point of intersection of the altitudes of a triangle.
virtual QDomElement asGml3(QDomDocument &doc, int precision=17, const QString &ns="gml", AxisOrder axisOrder=QgsAbstractGeometry::AxisOrder::XY) const =0
Returns a GML3 representation of the geometry.
bool operator==(const QgsTriangle &other) const