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() +
bool isMeasure() const
Returns true if the geometry contains m values.
QgsPolygon * surfaceToPolygon() const override
Gets a polygon representation of this surface.
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.
QgsPoint circumscribedCenter() const
Center of the circumscribed circle of the triangle.
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 (...
QVector< double > angles() const
Returns the three angles of the triangle.
bool operator!=(const QgsTriangle &other) const
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.
bool isIsocele(double lengthTolerance=0.0001) const
Is the triangle isocele (two sides with the same length)?
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.
QgsWkbTypes::Type mWkbType
QVector< QgsCurve * > mInteriorRings
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...
QgsPoint vertexAt(int atVertex) const
Returns coordinates of a vertex.
Type
The WKB type describes the number of dimensions a geometry has.
double inscribedRadius() const
Radius of the inscribed circle of the triangle.
QgsPoint inscribedCenter() const
Center of the inscribed circle of the triangle.
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.
Utility class for identifying a unique vertex within a geometry.
QgsTriangle medial() const
Medial (or midpoint) triangle of a triangle ABC is the triangle with vertices at the midpoints of the...
static QgsPoint midpoint(const QgsPoint &pt1, const QgsPoint &pt2)
Returns a middle point between points pt1 and pt2.
static GeometryType geometryType(Type type)
Returns the geometry type for a WKB type, e.g., both MultiPolygon and CurvePolygon would have a Polyg...
void setZMTypeFromSubGeometry(const QgsAbstractGeometry *subggeom, QgsWkbTypes::Type baseGeomType)
Updates the geometry type based on whether sub geometries contain z or m values.
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...
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.
QVector< QgsLineString > altitudes() const
An altitude is a segment (defined by a QgsLineString) from a vertex to the opposite side (or...
void close()
Closes the line string by appending the first point to the end of the line, if it is not already clos...
bool isEquilateral(double lengthTolerance=0.0001) const
Is the triangle equilateral (three sides with the same length)?
Abstract base class for curved geometry type.
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...
double circumscribedRadius() const
Radius of the circumscribed circle of the triangle.
QgsCurvePolygon * toCurveType() const override
Returns the geometry converted to the more generic curve type QgsCurvePolygon.
bool isScalene(double lengthTolerance=0.0001) const
Is the triangle scalene (all sides have differen lengths)?
bool fromWkb(QgsConstWkbPtr &wkbPtr) override
Sets the geometry from a WKB string.
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.
QVector< QgsLineString > medians() const
A median is a segment (defined by a QgsLineString) from a vertex to the midpoint of the opposite side...
AxisOrder
Axis order for GML generation.
virtual bool isClosed() const
Returns true if the curve is closed.
QVector< QgsPoint > QgsPointSequence
QgsCurve * segmentize(double tolerance=M_PI_2/90, SegmentationToleranceType toleranceType=MaximumAngle) const override
Returns a geometry without curves.
bool isDegenerate()
Convenient method checking if the geometry is degenerate (have duplicate or colinear point(s))...
static QgsLineString perpendicularSegment(const QgsPoint &p, const QgsPoint &s1, const QgsPoint &s2)
Create a perpendicular line segment from p to segment [s1, s2].
QgsPoint orthocenter(double lengthTolerance=0.0001) const
An orthocenter is the point of intersection of the altitudes of a triangle.
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).
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...
QVector< double > lengths() const
Returns the three lengths of the triangle.
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.
QString geometryType() const override
Returns a unique string representing the geometry type.
QgsCircle circumscribedCircle() const
Circumscribed circle of the triangle.
const QgsCurve * exteriorRing() const
bool operator==(const QgsTriangle &other) const
std::unique_ptr< QgsCurve > mExteriorRing
static Type flatType(Type type)
Returns the flat type for a WKB type.
QgsWkbTypes::Type readHeader() const
readHeader
virtual bool hasCurvedSegments() const
Returns true if the geometry contains curved segments.
bool isEmpty() const override
Returns true if the geometry is empty.
bool isRight(double angleTolerance=0.0001) const
Is the triangle right-angled?
virtual int numPoints() const =0
Returns the number of points in the curve.
bool is3D() const
Returns true if the geometry is 3D and contains a z-value.
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.
QgsCircle inscribedCircle() const
Inscribed circle of the triangle.