QGIS API Documentation
3.16.0-Hannover (43b64b13f3)
|
Go to the documentation of this file.
34 QVector< double > x { p1.
x(), p2.
x(), p3.
x(), p1.
x() };
35 QVector< double > y { p1.
y(), p2.
y(), p3.
y(), p1.
y() };
39 z = { p1.
z(), p2.
z(), p3.
z(), p1.
z() };
44 m = {p1.
m(), p2.
m(), p3.
m(), p1.
m() };
53 QVector< double > x { p1.
x(), p2.
x(), p3.
x(), p1.
x() };
54 QVector< double > y {p1.
y(), p2.
y(), p3.
y(), p1.
y() };
63 QVector< double > x{ p1.x(), p2.x(), p3.x(), p1.x() };
64 QVector< double > y{ p1.y(), p2.y(), p3.y(), p1.y() };
93 return QStringLiteral(
"Triangle" );
98 auto result = qgis::make_unique< QgsTriangle >();
100 return result.release();
154 line->fromWkbPoints( ringType, wkbPtr );
171 QString secondWithoutParentheses =
parts.second;
172 secondWithoutParentheses = secondWithoutParentheses.simplified().remove(
' ' );
173 if ( (
parts.second.compare( QLatin1String(
"EMPTY" ), Qt::CaseInsensitive ) == 0 ) ||
174 secondWithoutParentheses.isEmpty() )
177 QString defaultChildWkbType = QStringLiteral(
"LineString%1%2" ).arg(
is3D() ? QStringLiteral(
"Z" ) : QString(),
isMeasure() ? QStringLiteral(
"M" ) : QString() );
180 for (
const QString &childWkt : blocks )
231 QDomElement elemTriangle = doc.createElementNS( ns, QStringLiteral(
"Triangle" ) );
236 QDomElement elemExterior = doc.createElementNS( ns, QStringLiteral(
"exterior" ) );
238 if ( curveElem.tagName() == QLatin1String(
"LineString" ) )
240 curveElem.setTagName( QStringLiteral(
"LinearRing" ) );
242 elemExterior.appendChild( curveElem );
243 elemTriangle.appendChild( elemExterior );
255 std::unique_ptr<QgsCurvePolygon> curvePolygon(
new QgsCurvePolygon() );
258 return curvePolygon.release();
392 double ax, ay, bx, by, cx, cy;
405 angles.append( ( a1 > M_PI_2 ? a1 - M_PI_2 : a1 ) );
406 angles.append( ( a2 > M_PI_2 ? a2 - M_PI_2 : a2 ) );
407 angles.append( ( a3 > M_PI_2 ? a3 - M_PI_2 : a3 ) );
427 QVector<double> sides =
lengths();
428 bool ab_bc =
qgsDoubleNear( sides.at( 0 ), sides.at( 1 ), lengthTolerance );
429 bool bc_ca =
qgsDoubleNear( sides.at( 1 ), sides.at( 2 ), lengthTolerance );
430 bool ca_ab =
qgsDoubleNear( sides.at( 2 ), sides.at( 0 ), lengthTolerance );
432 return ( ab_bc || bc_ca || ca_ab );
439 QVector<double> sides =
lengths();
440 bool ab_bc =
qgsDoubleNear( sides.at( 0 ), sides.at( 1 ), lengthTolerance );
441 bool bc_ca =
qgsDoubleNear( sides.at( 1 ), sides.at( 2 ), lengthTolerance );
442 bool ca_ab =
qgsDoubleNear( sides.at( 2 ), sides.at( 0 ), lengthTolerance );
444 return ( ab_bc && bc_ca && ca_ab );
451 QVector<double> a =
angles();
452 QVector<double>::iterator ita = a.begin();
453 while ( ita != a.end() )
471 QVector<QgsLineString> alt;
484 QVector<QgsLineString> med;
503 QVector<QgsLineString> bis;
512 bool intersection =
false;
545 QVector<QgsLineString> alt =
altitudes();
584 double x = ( l.at( 0 ) *
vertexAt( 2 ).
x() +
587 double y = ( l.at( 0 ) *
vertexAt( 2 ).
y() +
Abstract base class for curved geometry type.
QgsTriangle * createEmptyWithSameType() const override
Creates a new geometry with the same class and same WKB type as the original and transfers ownership.
bool addMValue(double mValue=0) override
Adds a measure to the geometry, initialized to a preset value.
void clearCache() const override
Clears any cached parameters associated with the geometry, e.g., bounding boxes.
bool isEquilateral(double lengthTolerance=0.0001) const SIP_HOLDGIL
Is the triangle equilateral (three sides with the same length)?
double circumscribedRadius() const SIP_HOLDGIL
Radius of the circumscribed circle of the triangle.
void clear() override
Clears the geometry, ie reset it to a null geometry.
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.
void setPoints(const QgsPointSequence &points)
Resets the line string to match the specified list of points.
static QgsLineString perpendicularSegment(const QgsPoint &p, const QgsPoint &s1, const QgsPoint &s2) SIP_HOLDGIL
Create a perpendicular line segment from p to segment [s1, s2].
Point geometry type, with support for z-dimension and m-values.
QVector< double > angles() const SIP_HOLDGIL
Returns the three angles of the triangle.
const QgsCurve * exteriorRing() const SIP_HOLDGIL
Returns the curve polygon's exterior ring.
static Type flatType(Type type) SIP_HOLDGIL
Returns the flat type for a WKB type.
Curve polygon geometry type.
QgsGeometryConstPartIterator parts() const
Returns Java-style iterator for traversal of parts of the geometry.
double inscribedRadius() const SIP_HOLDGIL
Radius of the inscribed circle of the triangle.
QgsTriangle() SIP_HOLDGIL
Constructor for an empty triangle geometry.
bool deleteVertex(QgsVertexId position) override
Inherited method not used. You cannot delete or insert a vertex directly. Returns always false.
bool isIsocele(double lengthTolerance=0.0001) const SIP_HOLDGIL
Is the triangle isocele (two sides with the same length)?
Type
The WKB type describes the number of dimensions a geometry has.
QVector< double > lengths() const SIP_HOLDGIL
Returns the three lengths of the triangle.
QgsWkbTypes::Type mWkbType
static int leftOfLine(const double x, const double y, const double x1, const double y1, const double x2, const double y2) SIP_HOLDGIL
Returns a value < 0 if the point (x, y) is left of the line from (x1, y1) -> (x2, y2).
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.
QString geometryType() const override SIP_HOLDGIL
Returns a unique string representing the geometry type.
Line string geometry type, with support for z-dimension and m-values.
QgsCircle inscribedCircle() const SIP_HOLDGIL
Inscribed circle of the triangle.
bool isEmpty() const override SIP_HOLDGIL
Returns true if the geometry is empty.
static void circleCenterRadius(const QgsPoint &pt1, const QgsPoint &pt2, const QgsPoint &pt3, double &radius, double ¢erX, double ¢erY) SIP_HOLDGIL
Returns radius and center of the circle through pt1, pt2, pt3.
friend class QgsCurvePolygon
bool isMeasure() const SIP_HOLDGIL
Returns true if the geometry contains m values.
bool fromWkb(QgsConstWkbPtr &wkbPtr) override
Sets the geometry from a WKB string.
std::unique_ptr< QgsCurve > mExteriorRing
void addInteriorRing(QgsCurve *ring) override
Inherited method not used. You cannot add an interior ring into a triangle.
QgsCurve * boundary() const override
Returns the closure of the combinatorial boundary of the geometry (ie the topological boundary of the...
AxisOrder
Axis order for GML generation.
QVector< QgsLineString > altitudes() const SIP_HOLDGIL
An altitude is a segment (defined by a QgsLineString) from a vertex to the opposite side (or,...
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
bool isRight(double angleTolerance=0.0001) const SIP_HOLDGIL
Is the triangle right-angled?
double area() const override SIP_HOLDGIL
Returns the planar, 2-dimensional area of the geometry.
QgsTriangle * clone() const override
Clones the geometry by performing a deep copy.
virtual bool hasCurvedSegments() const
Returns true if the geometry contains curved segments.
bool operator!=(const QgsTriangle &other) const SIP_HOLDGIL
double perimeter() const override SIP_HOLDGIL
Returns the planar, 2-dimensional perimeter 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) SIP_HOLDGIL
Compute the intersection between two segments.
bool insertVertex(QgsVertexId position, const QgsPoint &vertex) override
Inherited method not used. You cannot delete or insert a vertex directly. Returns always false.
bool isDegenerate() SIP_HOLDGIL
Convenient method checking if the geometry is degenerate (have duplicate or colinear point(s)).
bool is3D() const SIP_HOLDGIL
Returns true if the geometry is 3D and contains a z-value.
QgsTriangle medial() const SIP_HOLDGIL
Medial (or midpoint) triangle of a triangle ABC is the triangle with vertices at the midpoints of the...
A class to represent a 2D point.
QVector< QgsLineString > bisectors(double lengthTolerance=0.0001) const SIP_HOLDGIL
The segment (defined by a QgsLineString) returned bisect the angle of a vertex to the opposite side.
void setExteriorRing(QgsCurve *ring) override
Sets the exterior ring of the polygon.
static QStringList wktGetChildBlocks(const QString &wkt, const QString &defaultType=QString())
Parses a WKT string and returns of list of blocks contained in the WKT.
static QgsPoint midpoint(const QgsPoint &pt1, const QgsPoint &pt2) SIP_HOLDGIL
Returns a middle point between points pt1 and pt2.
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.
void clear() override
Clears the geometry, ie reset it to a null geometry.
QgsCurvePolygon * toCurveType() const override
Returns the geometry converted to the more generic curve type QgsCurvePolygon.
QVector< QgsPoint > QgsPointSequence
bool isScalene(double lengthTolerance=0.0001) const SIP_HOLDGIL
Is the triangle scalene (all sides have different lengths)?
void close()
Closes the line string by appending the first point to the end of the line, if it is not already clos...
QgsPoint orthocenter(double lengthTolerance=0.0001) const SIP_HOLDGIL
An orthocenter is the point of intersection of the altitudes of a triangle.
bool moveVertex(QgsVertexId vId, const QgsPoint &newPos) override
Moves a vertex within the geometry.
Utility class for identifying a unique vertex within a geometry.
QgsCircle circumscribedCircle() const SIP_HOLDGIL
Circumscribed circle of the triangle.
bool operator==(const QgsTriangle &other) const SIP_HOLDGIL
static GeometryType geometryType(Type type) SIP_HOLDGIL
Returns the geometry type for a WKB type, e.g., both MultiPolygon and CurvePolygon would have a Polyg...
QVector< QgsCurve * > mInteriorRings
QgsPoint vertexAt(int atVertex) const SIP_HOLDGIL
Returns coordinates of a vertex.
virtual int numPoints() const =0
Returns the number of points in the curve.
QVector< QgsLineString > medians() const SIP_HOLDGIL
A median is a segment (defined by a QgsLineString) from a vertex to the midpoint of the opposite side...
QgsWkbTypes::Type readHeader() const
readHeader
static double angleBetweenThreePoints(double x1, double y1, double x2, double y2, double x3, double y3) SIP_HOLDGIL
Calculates the angle between the lines AB and BC, where AB and BC described by points a,...
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 (...
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.
void setZMTypeFromSubGeometry(const QgsAbstractGeometry *subggeom, QgsWkbTypes::Type baseGeomType)
Updates the geometry type based on whether sub geometries contain z or m values.
QgsCurve * segmentize(double tolerance=M_PI_2/90, SegmentationToleranceType toleranceType=MaximumAngle) const override
Returns a geometry without curves.
virtual bool isClosed() const SIP_HOLDGIL
Returns true if the curve is closed.
bool addZValue(double zValue=0) override
Adds a z-dimension to the geometry, initialized to a preset value.
QgsPoint circumscribedCenter() const SIP_HOLDGIL
Center of the circumscribed circle of the triangle.
QgsPolygon * surfaceToPolygon() const override
Gets a polygon representation of this surface.
bool fromWkt(const QString &wkt) override
Sets the geometry from a WKT string.
QgsPoint inscribedCenter() const SIP_HOLDGIL
Center of the inscribed circle of the triangle.