497 void fromWkb(
const QByteArray &wkb );
618 bool isGeosValid(
Qgis::GeometryValidityFlags flags =
Qgis::GeometryValidityFlags() ) const;
987 bool insertVertex(
double x,
double y,
int beforeVertex );
1019 bool moveVertex(
double x,
double y,
int atVertex );
1232 Qgis::GeometryOperationResult
transform( const QTransform &t,
double zTranslate = 0.0,
double zScale = 1.0,
double mTranslate = 0.0,
double mScale = 1.0 );
1310 if ( PyList_Check( a0 ) && PyList_GET_SIZE( a0 ) )
1312 PyObject *p0 = PyList_GetItem( a0, 0 );
1313 if ( sipCanConvertToType( p0, sipType_QgsPointXY, SIP_NOT_NONE ) && sipCanConvertToType( a0, sipType_QVector_0100QgsPointXY, SIP_NOT_NONE ) )
1315 QVector<QgsGeometry> newGeometries;
1316 QVector<QgsPointXY> topologyTestPoints;
1318 QVector<QgsPointXY> *splitLine =
reinterpret_cast<QVector<QgsPointXY> *
>( sipConvertToType( a0, sipType_QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state, &sipIsErr ) );
1323 PyObject *o0 = sipConvertFromEnum(
static_cast<int>( result ), sipType_Qgis_GeometryOperationResult );
1324 PyObject *o1 = sipConvertFromType( &newGeometries, sipType_QVector_0100QgsGeometry, Py_None );
1325 PyObject *o2 = sipConvertFromType( &topologyTestPoints, sipType_QVector_0100QgsPointXY, Py_None );
1327 sipRes = PyTuple_New( 3 );
1328 PyTuple_SET_ITEM( sipRes, 0, o0 );
1329 PyTuple_SET_ITEM( sipRes, 1, o1 );
1330 PyTuple_SET_ITEM( sipRes, 2, o2 );
1332 sipReleaseType( splitLine, sipType_QVector_0100QgsPointXY, state );
1335 else if ( sipCanConvertToType( p0, sipType_QgsPoint, SIP_NOT_NONE ) && sipCanConvertToType( a0, sipType_QVector_0100QgsPoint, SIP_NOT_NONE ) )
1337 QVector<QgsGeometry> newGeometries;
1338 QVector<QgsPoint> topologyTestPoints;
1340 QVector<QgsPoint> *splitLine =
reinterpret_cast<QVector<QgsPoint> *
>( sipConvertToType( a0, sipType_QVector_0100QgsPoint, 0, SIP_NOT_NONE, &state, &sipIsErr ) );
1345 PyObject *o0 = sipConvertFromEnum(
static_cast<int>( result ), sipType_Qgis_GeometryOperationResult );
1346 PyObject *o1 = sipConvertFromType( &newGeometries, sipType_QVector_0100QgsGeometry, Py_None );
1347 PyObject *o2 = sipConvertFromType( &topologyTestPoints, sipType_QVector_0100QgsPoint, Py_None );
1349 sipRes = PyTuple_New( 3 );
1350 PyTuple_SET_ITEM( sipRes, 0, o0 );
1351 PyTuple_SET_ITEM( sipRes, 1, o1 );
1352 PyTuple_SET_ITEM( sipRes, 2, o2 );
1354 sipReleaseType( splitLine, sipType_QVector_0100QgsPoint, state );
1359 PyErr_SetString( PyExc_TypeError, u
"Could not convert first argument to a list of QgsPoint or QgsPointXY."_s.toUtf8().constData() );
1365 PyErr_SetString( PyExc_TypeError, u
"First argument is not a list of points or is empty."_s.toUtf8().constData() );
1398 Q_DECL_DEPRECATED
int makeDifferenceInPlace(
const QgsGeometry &other, QgsFeedback* feedback =
nullptr )
SIP_SKIP;
1408 Q_DECL_DEPRECATED QgsGeometry makeDifference( const QgsGeometry &other, QgsFeedback* feedback =
nullptr ) const
SIP_DEPRECATED;
1414 QgsRectangle boundingBox() const;
1421 QgsBox3D boundingBox3D() const;
1435 QgsGeometry orientedMinimumBoundingBox(
double &area
SIP_OUT,
double &angle
SIP_OUT,
double &width
SIP_OUT,
double &height
SIP_OUT ) const;
1446 QgsGeometry orientedMinimumBoundingBox() const
SIP_SKIP;
1455 QgsGeometry minimalEnclosingCircle( QgsPointXY ¢er
SIP_OUT,
double &radius
SIP_OUT,
unsigned int segments = 36 ) const;
1461 QgsGeometry minimalEnclosingCircle(
unsigned int segments = 36 ) const
SIP_SKIP;
1470 QgsGeometry orthogonalize(
double tolerance = 1.0E-8,
int maxIterations = 1000,
double angleThreshold = 15.0 ) const;
1484 QgsGeometry triangularWaves(
double wavelength,
double amplitude,
bool strictWavelength = false ) const;
1504 QgsGeometry triangularWavesRandomized(
double minimumWavelength,
double maximumWavelength,
double minimumAmplitude,
double maximumAmplitude,
unsigned long seed = 0 ) const;
1518 QgsGeometry squareWaves(
double wavelength,
double amplitude,
bool strictWavelength = false ) const;
1538 QgsGeometry squareWavesRandomized(
double minimumWavelength,
double maximumWavelength,
double minimumAmplitude,
double maximumAmplitude,
unsigned long seed = 0 ) const;
1552 QgsGeometry roundWaves(
double wavelength,
double amplitude,
bool strictWavelength = false ) const;
1572 QgsGeometry roundWavesRandomized(
double minimumWavelength,
double maximumWavelength,
double minimumAmplitude,
double maximumAmplitude,
unsigned long seed = 0 ) const;
1587 QgsGeometry applyDashPattern( const QVector<
double > &pattern, Qgis::DashPatternLineEndingRule startRule = Qgis::DashPatternLineEndingRule::NoRule, Qgis::DashPatternLineEndingRule endRule = Qgis::DashPatternLineEndingRule::NoRule, Qgis::DashPatternSizeAdjustment adjustment = Qgis::DashPatternSizeAdjustment::ScaleBothDashAndGap,
double patternOffset = 0 ) const;
1600 QgsGeometry snappedToGrid(
double hSpacing,
double vSpacing,
double dSpacing = 0,
double mSpacing = 0 ) const;
1621 bool removeDuplicateNodes(
double epsilon = 4 * std::numeric_limits<
double>::epsilon(),
bool useZValues = false );
1632 Q_INVOKABLE
bool intersects( const QgsRectangle &rectangle ) const;
1648 Q_INVOKABLE
bool intersects( const QgsGeometry &geometry ) const;
1658 Q_INVOKABLE
bool boundingBoxIntersects( const QgsRectangle &rectangle ) const;
1668 Q_INVOKABLE
bool boundingBoxIntersects( const QgsGeometry &geometry ) const;
1673 bool contains( const QgsPointXY *p ) const;
1680 Q_INVOKABLE
bool contains(
double x,
double y ) const;
1691 Q_INVOKABLE
bool contains( const QgsGeometry &geometry ) const;
1702 Q_INVOKABLE
bool disjoint( const QgsGeometry &geometry ) const;
1713 Q_INVOKABLE
bool touches( const QgsGeometry &geometry ) const;
1724 Q_INVOKABLE
bool overlaps( const QgsGeometry &geometry ) const;
1735 Q_INVOKABLE
bool within( const QgsGeometry &geometry ) const;
1746 Q_INVOKABLE
bool crosses( const QgsGeometry &geometry ) const;
1757 QgsGeometry buffer(
double distance,
int segments, QgsFeedback* feedback =
nullptr ) const;
1771 QgsGeometry buffer(
double distance,
int segments, Qgis::EndCapStyle endCapStyle, Qgis::JoinStyle joinStyle,
double miterLimit, QgsFeedback* feedback =
nullptr ) const;
1780 QgsGeometry offsetCurve(
double distance,
int segments, Qgis::JoinStyle joinStyle,
double miterLimit ) const;
1796 QgsGeometry singleSidedBuffer(
double distance,
int segments, Qgis::BufferSide side, Qgis::JoinStyle joinStyle = Qgis::JoinStyle::Round,
double miterLimit = 2.0 ) const;
1815 QgsGeometry taperedBuffer(
double startWidth,
double endWidth,
int segments ) const;
1831 QgsGeometry variableWidthBufferByM(
int segments ) const;
1841 QgsGeometry extendLine(
double startDistance,
double endDistance,
double startDeflection = 0,
double endDeflection = 0 ) const;
1848 QgsGeometry simplify(
double tolerance, QgsFeedback* feedback =
nullptr ) const;
1858 QgsGeometry densifyByCount(
int extraNodesPerSegment ) const;
1873 QgsGeometry densifyByDistance(
double distance ) const;
1890 QgsGeometry convertToCurves(
double distanceTolerance = 1e-8,
double angleTolerance = 1e-8 ) const;
1905 QgsGeometry centroid() const;
1920 QgsGeometry pointOnSurface() const;
1933 QgsGeometry poleOfInaccessibility(
double precision,
double *distanceToBoundary
SIP_OUT =
nullptr ) const;
1958 QgsGeometry largestEmptyCircle(
double tolerance, const QgsGeometry &boundary = QgsGeometry() ) const
SIP_THROW( QgsNotSupportedException );
1974 QgsGeometry minimumWidth() const
SIP_THROW( QgsNotSupportedException );
1997 double minimumClearance() const
SIP_THROW( QgsNotSupportedException );
2010 QgsGeometry minimumClearanceLine() const
SIP_THROW( QgsNotSupportedException );
2020 QgsGeometry convexHull() const;
2037 QgsGeometry concaveHull(
double targetPercent,
bool allowHoles = false, QgsFeedback * feedback =
nullptr ) const
SIP_THROW( QgsNotSupportedException );
2074 QgsGeometry concaveHullOfPolygons(
double lengthRatio,
bool allowHoles = false,
bool isTight = false, QgsFeedback *feedback =
nullptr ) const
SIP_THROW( QgsNotSupportedException );
2090 QgsGeometry voronoiDiagram( const QgsGeometry &extent = QgsGeometry(),
double tolerance = 0.0,
bool edgesOnly = false ) const;
2102 QgsGeometry delaunayTriangulation(
double tolerance = 0.0,
bool edgesOnly = false ) const;
2116 QgsGeometry constrainedDelaunayTriangulation() const
SIP_THROW( QgsNotSupportedException );
2135 Qgis::CoverageValidityResult validateCoverage(
double gapWidth, QgsGeometry *invalidEdges
SIP_OUT =
nullptr ) const
SIP_THROW( QgsNotSupportedException );
2157 QgsGeometry simplifyCoverageVW(
double tolerance,
bool preserveBoundary ) const
SIP_THROW( QgsNotSupportedException );
2170 QgsGeometry unionCoverage() const;
2189 QgsGeometry cleanCoverage( const QgsCoverageCleanParameters ¶meters, QgsFeedback *feedback =
nullptr ) const
SIP_THROW( QgsNotSupportedException );
2201 QgsGeometry node() const;
2217 QgsGeometry sharedPaths( const QgsGeometry &other ) const;
2241 QgsGeometry subdivide(
int maxNodes = 256, const QgsGeometryParameters ¶meters = QgsGeometryParameters(), QgsFeedback* feedback =
nullptr ) const;
2257 QgsGeometry interpolate(
double distance ) const;
2269 double lineLocatePoint( const QgsGeometry &point ) const;
2279 double interpolateAngle(
double distance ) const;
2294 QgsGeometry intersection( const QgsGeometry &geometry, const QgsGeometryParameters ¶meters = QgsGeometryParameters(), QgsFeedback* feedback =
nullptr ) const;
2304 QgsGeometry clipped( const QgsRectangle &rectangle, QgsFeedback* feedback =
nullptr );
2322 QgsGeometry combine( const QgsGeometry &geometry, const QgsGeometryParameters ¶meters = QgsGeometryParameters(), QgsFeedback* feedback =
nullptr ) const;
2334 QgsGeometry mergeLines( const QgsGeometryParameters ¶meters = QgsGeometryParameters() ) const;
2349 QgsGeometry difference( const QgsGeometry &geometry, const QgsGeometryParameters ¶meters = QgsGeometryParameters(), QgsFeedback* feedback =
nullptr ) const;
2364 QgsGeometry symDifference( const QgsGeometry &geometry, const QgsGeometryParameters ¶meters = QgsGeometryParameters(), QgsFeedback* feedback =
nullptr ) const;
2367 QgsGeometry extrude(
double x,
double y );
2430 PyErr_SetString( PyExc_ValueError, u
"Cannot generate points inside a null geometry."_s.toUtf8().constData() );
2435 PyErr_SetString( PyExc_TypeError, u
"Cannot generate points inside a %1 geometry. Only Polygon types are permitted."_s.arg(
QgsWkbTypes::displayString( sipCpp->wkbType() ) ).toUtf8().constData() );
2440 const sipTypeDef *qvector_type = sipFindType(
"QVector<QgsPointXY>" );
2441 sipRes = sipConvertFromNewType(
new QVector< QgsPointXY >( sipCpp->randomPointsInPolygon( a0, a1 ) ), qvector_type, Py_None );
2472 Q_INVOKABLE QString asWkt(
int precision = 17 )
const;
2476 SIP_PYOBJECT __repr__();
2479 if ( sipCpp->isNull() )
2480 str = u
"<QgsGeometry: null>"_s;
2483 QString wkt = sipCpp->asWkt();
2484 if ( wkt.length() > 1000 )
2485 wkt = wkt.left( 1000 ) + u
"..."_s;
2486 str = u
"<QgsGeometry: %1>"_s.arg( wkt );
2488 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
2497 QString asJson(
int precision = 17 )
const;
2549 QVector< QgsGeometry > coerceToType(
Qgis::WkbType type,
double defaultZ = 0,
double defaultM = 0,
bool avoidDuplicates =
true )
const;
2562 QgsGeometry convertToType(
Qgis::GeometryType destType,
bool destMultipart =
false )
const;
2576 QgsPointXY asPoint()
const;
2590 SIP_PYOBJECT asPoint() const
SIP_TYPEHINT( QgsPointXY );
2592 if ( sipCpp->isNull() )
2594 PyErr_SetString( PyExc_ValueError, u
"Null geometry cannot be converted to a point."_s.toUtf8().constData() );
2599 const QgsAbstractGeometry *geom = sipCpp->constGet();
2602 PyErr_SetString( PyExc_TypeError, u
"%1 geometry cannot be converted to a point. Only Point types are permitted."_s.arg(
QgsWkbTypes::displayString( geom->
wkbType() ) ).toUtf8().constData() );
2607 sipRes = sipConvertFromNewType(
new QgsPointXY( sipCpp->asPoint() ), sipType_QgsPointXY, Py_None );
2641 const Qgis::WkbType type = sipCpp->wkbType();
2642 if ( sipCpp->isNull() )
2644 PyErr_SetString( PyExc_ValueError, u
"Null geometry cannot be converted to a polyline."_s.toUtf8().constData() );
2649 PyErr_SetString( PyExc_TypeError, u
"%1 geometry cannot be converted to a polyline. Only single line or curve types are permitted."_s.arg(
QgsWkbTypes::displayString( type ) ).toUtf8().constData() );
2654 const sipTypeDef *qvector_type = sipFindType(
"QVector< QgsPointXY >" );
2655 sipRes = sipConvertFromNewType(
new QgsPolylineXY( sipCpp->asPolyline() ), qvector_type, Py_None );
2688 const Qgis::WkbType type = sipCpp->wkbType();
2689 if ( sipCpp->isNull() )
2691 PyErr_SetString( PyExc_ValueError, u
"Null geometry cannot be converted to a polygon."_s.toUtf8().constData() );
2696 PyErr_SetString( PyExc_TypeError, u
"%1 geometry cannot be converted to a polygon. Only single polygon or curve polygon types are permitted."_s.arg(
QgsWkbTypes::displayString( type ) ).toUtf8().constData() );
2701 const sipTypeDef *qvector_type = sipFindType(
"QVector<QVector<QgsPointXY>>" );
2702 sipRes = sipConvertFromNewType(
new QgsPolygonXY( sipCpp->asPolygon() ), qvector_type, Py_None );
2733 const Qgis::WkbType type = sipCpp->wkbType();
2734 if ( sipCpp->isNull() )
2736 PyErr_SetString( PyExc_ValueError, u
"Null geometry cannot be converted to a multipoint."_s.toUtf8().constData() );
2741 PyErr_SetString( PyExc_TypeError, u
"%1 geometry cannot be converted to a multipoint. Only multipoint types are permitted."_s.arg(
QgsWkbTypes::displayString( type ) ).toUtf8().constData() );
2746 const sipTypeDef *qvector_type = sipFindType(
"QVector< QgsPointXY >" );
2747 sipRes = sipConvertFromNewType(
new QgsPolylineXY( sipCpp->asMultiPoint() ), qvector_type, Py_None );
2780 const Qgis::WkbType type = sipCpp->wkbType();
2781 if ( sipCpp->isNull() )
2783 PyErr_SetString( PyExc_ValueError, u
"Null geometry cannot be converted to a multilinestring."_s.toUtf8().constData() );
2788 PyErr_SetString( PyExc_TypeError, u
"%1 geometry cannot be converted to a multilinestring. Only multi linestring or curves are permitted."_s.arg(
QgsWkbTypes::displayString( type ) ).toUtf8().constData() );
2793 const sipTypeDef *qvector_type = sipFindType(
"QVector<QVector<QgsPointXY>>" );
2794 sipRes = sipConvertFromNewType(
new QgsMultiPolylineXY( sipCpp->asMultiPolyline() ), qvector_type, Py_None );
2827 const Qgis::WkbType type = sipCpp->wkbType();
2828 if ( sipCpp->isNull() )
2830 PyErr_SetString( PyExc_ValueError, u
"Null geometry cannot be converted to a multipolygon."_s.toUtf8().constData() );
2835 PyErr_SetString( PyExc_TypeError, u
"%1 geometry cannot be converted to a multipolygon. Only multi polygon or curves are permitted."_s.arg(
QgsWkbTypes::displayString( type ) ).toUtf8().constData() );
2840 const sipTypeDef *qvector_type = sipFindType(
"QVector<QVector<QVector<QgsPointXY>>>" );
2841 sipRes = sipConvertFromNewType(
new QgsMultiPolygonXY( sipCpp->asMultiPolygon() ), qvector_type, Py_None );
2850 QVector<QgsGeometry> asGeometryCollection()
const;
2876 bool deleteRing(
int ringNum,
int partNum = 0 );
2882 bool deletePart(
int partNum );
2892 bool convertToMultiType();
2909 bool convertToCurvedMultiType();
2920 bool convertToSingleType();
2931 bool convertGeometryCollectionToSubclass( Qgis::GeometryType geomType );
2957 Qgis::GeometryOperationResult avoidIntersectionsV2( const QList<QgsVectorLayer *> &avoidIntersectionsLayers, const QHash<QgsVectorLayer *, QSet<
QgsFeatureId> > &ignoreFeatures
SIP_PYARGREMOVE = ( QHash<QgsVectorLayer *, QSet<
QgsFeatureId> >() ) );
2980 QgsGeometry makeValid( Qgis::MakeValidMethod method = Qgis::MakeValidMethod::Linework,
bool keepCollapsed = false, QgsFeedback* feedback =
nullptr ) const
SIP_THROW( QgsNotSupportedException );
2991 Qgis::AngularDirection polygonOrientation() const;
3072 : mMessage( u
"none"_s )
3082 , mHasLocation( true ) {}
3087 QString what()
const;
3097 bool hasWhere()
const;
3101 SIP_PYOBJECT __repr__();
3103 QString str = u
"<QgsGeometry.Error: %1>"_s.arg( sipCpp->what() );
3104 sipRes = PyUnicode_FromString( str.toUtf8().data() );
3112 return other.mMessage == mMessage && other.mHasLocation == mHasLocation && other.mLocation == mLocation;
3118 bool mHasLocation =
false;
3162 static QgsGeometry polygonize(
const QVector<QgsGeometry> &geometries );
3177 bool requiresConversionToStraightSegments()
const;
3189 void draw( QPainter &p )
const;
3231 void filterVertices( const std::function<
bool( const
QgsPoint & ) > &filter )
SIP_SKIP;
3261 static
QgsGeometry fromQPolygonF( const QPolygonF &polygon );
3291 static bool compare(
const QgsPolylineXY &p1,
const QgsPolylineXY &p2,
double epsilon = 4 * std::numeric_limits<double>::epsilon() );
3301 static bool compare(
const QgsPolygonXY &p1,
const QgsPolygonXY &p2,
double epsilon = 4 * std::numeric_limits<double>::epsilon() );
3334 static bool compare( PyObject *obj1, PyObject *obj2,
double epsilon = 4 * std::numeric_limits<double>::epsilon() );
3342 if ( PyList_Check( a0 ) && PyList_Check( a1 ) && PyList_GET_SIZE( a0 ) && PyList_GET_SIZE( a1 ) )
3344 PyObject *o0 = PyList_GetItem( a0, 0 );
3345 PyObject *o1 = PyList_GetItem( a1, 0 );
3349 if ( sipCanConvertToType( o0, sipType_QgsPointXY, SIP_NOT_NONE ) && sipCanConvertToType( o1, sipType_QgsPointXY, SIP_NOT_NONE ) && sipCanConvertToType( a0, sipType_QVector_0100QgsPointXY, SIP_NOT_NONE ) && sipCanConvertToType( a1, sipType_QVector_0100QgsPointXY, SIP_NOT_NONE ) )
3353 p0 =
reinterpret_cast<QgsPolylineXY *
>( sipConvertToType( a0, sipType_QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state0, &sipIsErr ) );
3354 p1 =
reinterpret_cast<QgsPolylineXY *
>( sipConvertToType( a1, sipType_QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state1, &sipIsErr ) );
3359 sipReleaseType( p0, sipType_QVector_0100QgsPointXY, state0 );
3360 sipReleaseType( p1, sipType_QVector_0100QgsPointXY, state1 );
3362 else if ( PyList_Check( o0 ) && PyList_Check( o1 ) && PyList_GET_SIZE( o0 ) && PyList_GET_SIZE( o1 ) )
3364 PyObject *oo0 = PyList_GetItem( o0, 0 );
3365 PyObject *oo1 = PyList_GetItem( o1, 0 );
3369 if ( sipCanConvertToType( oo0, sipType_QgsPointXY, SIP_NOT_NONE ) && sipCanConvertToType( oo1, sipType_QgsPointXY, SIP_NOT_NONE ) && sipCanConvertToType( a0, sipType_QVector_0600QVector_0100QgsPointXY, SIP_NOT_NONE ) && sipCanConvertToType( a1, sipType_QVector_0600QVector_0100QgsPointXY, SIP_NOT_NONE ) )
3373 p0 =
reinterpret_cast<QgsPolygonXY *
>( sipConvertToType( a0, sipType_QVector_0600QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state0, &sipIsErr ) );
3374 p1 =
reinterpret_cast<QgsPolygonXY *
>( sipConvertToType( a1, sipType_QVector_0600QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state1, &sipIsErr ) );
3379 sipReleaseType( p0, sipType_QVector_0600QVector_0100QgsPointXY, state0 );
3380 sipReleaseType( p1, sipType_QVector_0600QVector_0100QgsPointXY, state1 );
3382 else if ( PyList_Check( oo0 ) && PyList_Check( oo1 ) && PyList_GET_SIZE( oo0 ) && PyList_GET_SIZE( oo1 ) )
3384 PyObject *ooo0 = PyList_GetItem( oo0, 0 );
3385 PyObject *ooo1 = PyList_GetItem( oo1, 0 );
3389 if ( sipCanConvertToType( ooo0, sipType_QgsPointXY, SIP_NOT_NONE ) && sipCanConvertToType( ooo1, sipType_QgsPointXY, SIP_NOT_NONE ) && sipCanConvertToType( a0, sipType_QVector_0600QVector_0600QVector_0100QgsPointXY, SIP_NOT_NONE ) && sipCanConvertToType( a1, sipType_QVector_0600QVector_0600QVector_0100QgsPointXY, SIP_NOT_NONE ) )
3393 p0 =
reinterpret_cast<QgsMultiPolygonXY *
>( sipConvertToType( a0, sipType_QVector_0600QVector_0600QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state0, &sipIsErr ) );
3394 p1 =
reinterpret_cast<QgsMultiPolygonXY *
>( sipConvertToType( a1, sipType_QVector_0600QVector_0600QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state1, &sipIsErr ) );
3399 sipReleaseType( p0, sipType_QVector_0600QVector_0600QVector_0100QgsPointXY, state0 );
3400 sipReleaseType( p1, sipType_QVector_0600QVector_0600QVector_0100QgsPointXY, state1 );
3428 QgsGeometry smooth(
unsigned int iterations = 1,
double offset = 0.25,
double minimumDistance = -1.0,
double maxAngle = 180.0 )
const;
3476 static void convertPointList(
const QVector<QgsPointXY> &input,
QgsPointSequence &output );
3483 static void convertPointList(
const QgsPointSequence &input, QVector<QgsPointXY> &output );
3486 operator QVariant()
const
3488 return QVariant::fromValue( *
this );
3501 Q_ENUM( ChamferFilletOperationType )
3520 QgsGeometry fillet(
int vertexIndex,
double radius,
int segments = 8 )
const;
3555 QgsGeometry chamfer(
int vertexIndex,
double distance1,
double distance2 = -1.0 ) const;
3582 mutable QString mLastError;
3599 QgsGeometry convertToPoint(
bool destMultipart ) const;
3601 QgsGeometry convertToLine(
bool destMultipart ) const;
3603 QgsGeometry convertToPolygon(
bool destMultipart ) const;
3616 std::unique_ptr<
QgsLineString > smoothLine( const
QgsLineString &line,
unsigned int iterations = 1,
double offset = 0.25,
double minimumDistance = -1,
double maxAngle = 180.0 ) const;
3629 std::unique_ptr<
QgsPolygon > smoothPolygon( const
QgsPolygon &polygon,
unsigned int iterations = 1,
double offset = 0.25,
double minimumDistance = -1,
double maxAngle = 180.0 ) const;
3631 QgsGeometry doChamferFillet( ChamferFilletOperationType op,
int vertexIndex,
double distance1,
double distance2,
int segments ) const;