mirror of
				https://github.com/qgis/QGIS.git
				synced 2025-11-04 00:04:25 -05:00 
			
		
		
		
	A port of the equivalent method from GEOS, but with added support for curved geometries and M values Reorganizes the geometry into a normalized form (or "canonical" form). Polygon rings will be rearranged so that their starting vertex is the lower left and ring orientation follows the right hand rule, collections are ordered by geometry type, and other normalization techniques are applied. The resultant geometry will be geometrically equivalent to the original geometry.
		
			
				
	
	
		
			328 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			328 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
/************************************************************************
 | 
						|
 * This file has been generated automatically from                      *
 | 
						|
 *                                                                      *
 | 
						|
 * src/core/geometry/qgscurve.h                                         *
 | 
						|
 *                                                                      *
 | 
						|
 * Do not edit manually ! Edit header and run scripts/sipify.pl again   *
 | 
						|
 ************************************************************************/
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
class QgsCurve: QgsAbstractGeometry /Abstract/
 | 
						|
{
 | 
						|
%Docstring(signature="appended")
 | 
						|
Abstract base class for curved geometry type
 | 
						|
 | 
						|
.. versionadded:: 2.10
 | 
						|
%End
 | 
						|
 | 
						|
%TypeHeaderCode
 | 
						|
#include "qgscurve.h"
 | 
						|
%End
 | 
						|
  public:
 | 
						|
 | 
						|
    QgsCurve();
 | 
						|
%Docstring
 | 
						|
Constructor for QgsCurve.
 | 
						|
%End
 | 
						|
 | 
						|
    virtual bool equals( const QgsCurve &other ) const = 0;
 | 
						|
%Docstring
 | 
						|
Checks whether this curve exactly equals another curve.
 | 
						|
 | 
						|
.. versionadded:: 3.0
 | 
						|
%End
 | 
						|
 | 
						|
    virtual bool operator==( const QgsAbstractGeometry &other ) const;
 | 
						|
 | 
						|
    virtual bool operator!=( const QgsAbstractGeometry &other ) const;
 | 
						|
 | 
						|
 | 
						|
    virtual QgsCurve *clone() const = 0 /Factory/;
 | 
						|
 | 
						|
 | 
						|
    virtual QgsPoint startPoint() const = 0;
 | 
						|
%Docstring
 | 
						|
Returns the starting point of the curve.
 | 
						|
 | 
						|
.. seealso:: :py:func:`endPoint`
 | 
						|
%End
 | 
						|
 | 
						|
    virtual QgsPoint endPoint() const = 0;
 | 
						|
%Docstring
 | 
						|
Returns the end point of the curve.
 | 
						|
 | 
						|
.. seealso:: :py:func:`startPoint`
 | 
						|
%End
 | 
						|
 | 
						|
    virtual bool isClosed() const /HoldGIL/;
 | 
						|
%Docstring
 | 
						|
Returns ``True`` if the curve is closed.
 | 
						|
%End
 | 
						|
 | 
						|
    virtual bool isRing() const /HoldGIL/;
 | 
						|
%Docstring
 | 
						|
Returns ``True`` if the curve is a ring.
 | 
						|
%End
 | 
						|
 | 
						|
    virtual QgsLineString *curveToLine( double tolerance = M_PI_2 / 90, SegmentationToleranceType toleranceType = MaximumAngle ) const = 0 /Factory/;
 | 
						|
%Docstring
 | 
						|
Returns a new line string geometry corresponding to a segmentized approximation
 | 
						|
of the curve.
 | 
						|
 | 
						|
:param tolerance: segmentation tolerance
 | 
						|
:param toleranceType: maximum segmentation angle or maximum difference between approximation and curve
 | 
						|
 | 
						|
Uses a MaximumAngle tolerance of 1 degrees by default (360
 | 
						|
segments in a full circle)
 | 
						|
%End
 | 
						|
 | 
						|
    virtual void addToPainterPath( QPainterPath &path ) const = 0;
 | 
						|
%Docstring
 | 
						|
Adds a curve to a painter path.
 | 
						|
%End
 | 
						|
    virtual QPainterPath asQPainterPath() const;
 | 
						|
 | 
						|
 | 
						|
    virtual void drawAsPolygon( QPainter &p ) const = 0;
 | 
						|
%Docstring
 | 
						|
Draws the curve as a polygon on the specified QPainter.
 | 
						|
 | 
						|
:param p: destination QPainter
 | 
						|
%End
 | 
						|
 | 
						|
    virtual void points( QgsPointSequence &pt /Out/ ) const = 0;
 | 
						|
%Docstring
 | 
						|
Returns a list of points within the curve.
 | 
						|
%End
 | 
						|
 | 
						|
    virtual int numPoints() const = 0;
 | 
						|
%Docstring
 | 
						|
Returns the number of points in the curve.
 | 
						|
%End
 | 
						|
 | 
						|
    int __len__() const;
 | 
						|
%Docstring
 | 
						|
    Returns the number of points in the curve.
 | 
						|
%End
 | 
						|
%MethodCode
 | 
						|
    sipRes = sipCpp->numPoints();
 | 
						|
%End
 | 
						|
 | 
						|
    //! Ensures that bool(obj) returns ``True`` (otherwise __len__() would be used)
 | 
						|
    int __bool__() const;
 | 
						|
%MethodCode
 | 
						|
    sipRes = true;
 | 
						|
%End
 | 
						|
 | 
						|
    virtual void sumUpArea( double &sum /Out/ ) const = 0;
 | 
						|
%Docstring
 | 
						|
Sums up the area of the curve by iterating over the vertices (shoelace formula).
 | 
						|
%End
 | 
						|
 | 
						|
    virtual QgsCoordinateSequence coordinateSequence() const;
 | 
						|
 | 
						|
    virtual bool nextVertex( QgsVertexId &id, QgsPoint &vertex /Out/ ) const;
 | 
						|
 | 
						|
    virtual void adjacentVertices( QgsVertexId vertex, QgsVertexId &previousVertex /Out/, QgsVertexId &nextVertex /Out/ ) const;
 | 
						|
 | 
						|
    virtual int vertexNumberFromVertexId( QgsVertexId id ) const;
 | 
						|
 | 
						|
 | 
						|
    virtual bool pointAt( int node, QgsPoint &point /Out/, QgsVertexId::VertexType &type /Out/ ) const = 0;
 | 
						|
%Docstring
 | 
						|
Returns the point and vertex id of a point within the curve.
 | 
						|
 | 
						|
:param node: node number, where the first node is 0
 | 
						|
 | 
						|
:return: - ``True`` if node exists within the curve
 | 
						|
         - point: will be set to point at corresponding node in the curve
 | 
						|
         - type: will be set to the vertex type of the node
 | 
						|
%End
 | 
						|
 | 
						|
    virtual int indexOf( const QgsPoint &point ) const = 0;
 | 
						|
%Docstring
 | 
						|
Returns the index of the first vertex matching the given ``point``, or -1 if a matching
 | 
						|
vertex is not found.
 | 
						|
 | 
						|
.. note::
 | 
						|
 | 
						|
   If the curve has m or z values then the search ``point`` must have exactly matching
 | 
						|
   m and z values in order to be matched against the curve's vertices.
 | 
						|
 | 
						|
.. note::
 | 
						|
 | 
						|
   This method only matches against segment vertices, not curve vertices.
 | 
						|
 | 
						|
.. versionadded:: 3.20
 | 
						|
%End
 | 
						|
 | 
						|
    virtual QgsCurve *reversed() const = 0 /Factory/;
 | 
						|
%Docstring
 | 
						|
Returns a reversed copy of the curve, where the direction of the curve has been flipped.
 | 
						|
 | 
						|
.. versionadded:: 2.14
 | 
						|
%End
 | 
						|
 | 
						|
    virtual QgsAbstractGeometry *boundary() const /Factory/;
 | 
						|
 | 
						|
 | 
						|
    virtual QString asKml( int precision = 17 ) const;
 | 
						|
 | 
						|
 | 
						|
    virtual QgsCurve *segmentize( double tolerance = M_PI_2 / 90, SegmentationToleranceType toleranceType = MaximumAngle ) const /Factory/;
 | 
						|
 | 
						|
%Docstring
 | 
						|
Returns a geometry without curves. Caller takes ownership
 | 
						|
 | 
						|
:param tolerance: segmentation tolerance
 | 
						|
:param toleranceType: maximum segmentation angle or maximum difference between approximation and curve
 | 
						|
%End
 | 
						|
 | 
						|
    virtual int vertexCount( int part = 0, int ring = 0 ) const;
 | 
						|
 | 
						|
    virtual int ringCount( int part = 0 ) const;
 | 
						|
 | 
						|
    virtual int partCount() const;
 | 
						|
 | 
						|
    virtual QgsPoint vertexAt( QgsVertexId id ) const;
 | 
						|
 | 
						|
    virtual QgsCurve *toCurveType() const /Factory/;
 | 
						|
 | 
						|
    void normalize() final /HoldGIL/;
 | 
						|
 | 
						|
    virtual QgsRectangle boundingBox() const;
 | 
						|
 | 
						|
    virtual bool isValid( QString &error /Out/, int flags = 0 ) const;
 | 
						|
 | 
						|
 | 
						|
    virtual double xAt( int index ) const = 0;
 | 
						|
%Docstring
 | 
						|
Returns the x-coordinate of the specified node in the line string.
 | 
						|
 | 
						|
:param index: index of node, where the first node in the line is 0
 | 
						|
 | 
						|
:return: x-coordinate of node, or 0.0 if index is out of bounds
 | 
						|
%End
 | 
						|
 | 
						|
    virtual double yAt( int index ) const = 0;
 | 
						|
%Docstring
 | 
						|
Returns the y-coordinate of the specified node in the line string.
 | 
						|
 | 
						|
:param index: index of node, where the first node in the line is 0
 | 
						|
 | 
						|
:return: y-coordinate of node, or 0.0 if index is out of bounds
 | 
						|
%End
 | 
						|
 | 
						|
    virtual QPolygonF asQPolygonF() const;
 | 
						|
%Docstring
 | 
						|
Returns a QPolygonF representing the points.
 | 
						|
%End
 | 
						|
 | 
						|
    virtual QgsPoint *interpolatePoint( double distance ) const = 0 /Factory/;
 | 
						|
%Docstring
 | 
						|
Returns an interpolated point on the curve at the specified ``distance``.
 | 
						|
 | 
						|
If z or m values are present, the output z and m will be interpolated using
 | 
						|
the existing vertices' z or m values.
 | 
						|
 | 
						|
If distance is negative, or is greater than the length of the curve, ``None``
 | 
						|
will be returned.
 | 
						|
 | 
						|
.. versionadded:: 3.4
 | 
						|
%End
 | 
						|
 | 
						|
    virtual QgsCurve *curveSubstring( double startDistance, double endDistance ) const = 0 /Factory/;
 | 
						|
%Docstring
 | 
						|
Returns a new curve representing a substring of this curve.
 | 
						|
 | 
						|
The ``startDistance`` and ``endDistance`` arguments specify the length along the curve
 | 
						|
which the substring should start and end at. If the ``endDistance`` is greater than the
 | 
						|
total length of the curve then any "extra" length will be ignored.
 | 
						|
 | 
						|
If z or m values are present, the output z and m will be interpolated using
 | 
						|
the existing vertices' z or m values.
 | 
						|
 | 
						|
.. versionadded:: 3.4
 | 
						|
%End
 | 
						|
 | 
						|
    double straightDistance2d() const;
 | 
						|
%Docstring
 | 
						|
Returns the straight distance of the curve, i.e. the direct/euclidean distance
 | 
						|
between the first and last vertex of the curve. (Also known as
 | 
						|
"as the crow flies" distance).
 | 
						|
 | 
						|
.. versionadded:: 3.2
 | 
						|
%End
 | 
						|
 | 
						|
    double sinuosity() const;
 | 
						|
%Docstring
 | 
						|
Returns the curve sinuosity, which is the ratio of the curve :py:func:`~QgsCurve.length` to curve
 | 
						|
:py:func:`~QgsCurve.straightDistance2d`. Larger numbers indicate a more "sinuous" curve (i.e. more
 | 
						|
"bendy"). The minimum value returned of 1.0 indicates a perfectly straight curve.
 | 
						|
 | 
						|
If a curve :py:func:`~QgsCurve.isClosed`, it has infinite sinuosity and will return NaN.
 | 
						|
 | 
						|
.. versionadded:: 3.2
 | 
						|
%End
 | 
						|
 | 
						|
    enum Orientation
 | 
						|
    {
 | 
						|
      Clockwise,
 | 
						|
      CounterClockwise,
 | 
						|
    };
 | 
						|
 | 
						|
    Orientation orientation() const;
 | 
						|
%Docstring
 | 
						|
Returns the curve's orientation, e.g. clockwise or counter-clockwise.
 | 
						|
 | 
						|
.. warning::
 | 
						|
 | 
						|
   The result is not predictable for non-closed curves.
 | 
						|
 | 
						|
.. versionadded:: 3.6
 | 
						|
%End
 | 
						|
 | 
						|
    virtual void scroll( int firstVertexIndex ) = 0;
 | 
						|
%Docstring
 | 
						|
Scrolls the curve vertices so that they start with the vertex at the given index.
 | 
						|
 | 
						|
.. warning::
 | 
						|
 | 
						|
   This should only be called on closed curves, or the shape of the curve will be altered and
 | 
						|
   the result is undefined.
 | 
						|
 | 
						|
.. warning::
 | 
						|
 | 
						|
   The ``firstVertexIndex`` must correspond to a segment vertex and not a curve point or the result
 | 
						|
   is undefined.
 | 
						|
 | 
						|
 | 
						|
.. versionadded:: 3.20
 | 
						|
%End
 | 
						|
 | 
						|
 | 
						|
 | 
						|
  protected:
 | 
						|
 | 
						|
    virtual void clearCache() const;
 | 
						|
 | 
						|
 | 
						|
    virtual int childCount() const;
 | 
						|
 | 
						|
    virtual QgsPoint childPoint( int index ) const;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
};
 | 
						|
 | 
						|
/************************************************************************
 | 
						|
 * This file has been generated automatically from                      *
 | 
						|
 *                                                                      *
 | 
						|
 * src/core/geometry/qgscurve.h                                         *
 | 
						|
 *                                                                      *
 | 
						|
 * Do not edit manually ! Edit header and run scripts/sipify.pl again   *
 | 
						|
 ************************************************************************/
 |