364 double outerRadius,
double innerRadius = 0 );
380 double outerRadius,
double innerRadius = 0 );
392 void fromWkb(
const QByteArray &wkb );
455 bool isGeosValid(
Qgis::GeometryValidityFlags flags =
Qgis::GeometryValidityFlags() ) const;
808 bool insertVertex(
double x,
double y,
int beforeVertex );
840 bool moveVertex(
double x,
double y,
int atVertex );
1037 Qgis::GeometryOperationResult
transform( const QTransform &t,
double zTranslate = 0.0,
double zScale = 1.0,
double mTranslate = 0.0,
double mScale = 1.0 );
1114 if ( PyList_Check( a0 ) && PyList_GET_SIZE( a0 ) )
1116 PyObject *p0 = PyList_GetItem( a0, 0 );
1117 if ( sipCanConvertToType( p0, sipType_QgsPointXY, SIP_NOT_NONE ) &&
1118 sipCanConvertToType( a0, sipType_QVector_0100QgsPointXY, SIP_NOT_NONE ) )
1120 QVector<QgsGeometry> newGeometries;
1121 QVector<QgsPointXY> topologyTestPoints;
1123 QVector<QgsPointXY> *splitLine =
reinterpret_cast<QVector<QgsPointXY> *
>( sipConvertToType( a0, sipType_QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state, &sipIsErr ) );
1128 PyObject *o0 = sipConvertFromEnum(
static_cast<int>( result ), sipType_Qgis_GeometryOperationResult );
1129 PyObject *o1 = sipConvertFromType( &newGeometries, sipType_QVector_0100QgsGeometry, Py_None );
1130 PyObject *o2 = sipConvertFromType( &topologyTestPoints, sipType_QVector_0100QgsPointXY, Py_None );
1132 sipRes = PyTuple_New( 3 );
1133 PyTuple_SET_ITEM( sipRes, 0, o0 );
1134 PyTuple_SET_ITEM( sipRes, 1, o1 );
1135 PyTuple_SET_ITEM( sipRes, 2, o2 );
1137 sipReleaseType( splitLine, sipType_QVector_0100QgsPointXY, state );
1140 else if ( sipCanConvertToType( p0, sipType_QgsPoint, SIP_NOT_NONE ) &&
1141 sipCanConvertToType( a0, sipType_QVector_0100QgsPoint, SIP_NOT_NONE ) )
1143 QVector<QgsGeometry> newGeometries;
1144 QVector<QgsPoint> topologyTestPoints;
1146 QVector<QgsPoint> *splitLine =
reinterpret_cast<QVector<QgsPoint> *
>( sipConvertToType( a0, sipType_QVector_0100QgsPoint, 0, SIP_NOT_NONE, &state, &sipIsErr ) );
1151 PyObject *o0 = sipConvertFromEnum(
static_cast<int>( result ), sipType_Qgis_GeometryOperationResult );
1152 PyObject *o1 = sipConvertFromType( &newGeometries, sipType_QVector_0100QgsGeometry, Py_None );
1153 PyObject *o2 = sipConvertFromType( &topologyTestPoints, sipType_QVector_0100QgsPoint, Py_None );
1155 sipRes = PyTuple_New( 3 );
1156 PyTuple_SET_ITEM( sipRes, 0, o0 );
1157 PyTuple_SET_ITEM( sipRes, 1, o1 );
1158 PyTuple_SET_ITEM( sipRes, 2, o2 );
1160 sipReleaseType( splitLine, sipType_QVector_0100QgsPoint, state );
1165 PyErr_SetString( PyExc_TypeError, QStringLiteral(
"Could not convert first argument to a list of QgsPoint or QgsPointXY." ).toUtf8().constData() );
1171 PyErr_SetString( PyExc_TypeError, QStringLiteral(
"First argument is not a list of points or is empty." ).toUtf8().constData() );
1201 int makeDifferenceInPlace(
const QgsGeometry &other )
SIP_SKIP;
1209 QgsGeometry makeDifference(
const QgsGeometry &other )
const;
1215 QgsRectangle boundingBox()
const;
1222 QgsBox3D boundingBox3D()
const;
1236 QgsGeometry orientedMinimumBoundingBox(
double &area
SIP_OUT,
double &angle
SIP_OUT,
double &width
SIP_OUT,
double &height
SIP_OUT )
const;
1247 QgsGeometry orientedMinimumBoundingBox() const
SIP_SKIP;
1256 QgsGeometry minimalEnclosingCircle( QgsPointXY ¢er
SIP_OUT,
double &radius
SIP_OUT,
unsigned int segments = 36 ) const;
1262 QgsGeometry minimalEnclosingCircle(
unsigned int segments = 36 ) const
SIP_SKIP;
1271 QgsGeometry orthogonalize(
double tolerance = 1.0E-8,
int maxIterations = 1000,
double angleThreshold = 15.0 ) const;
1285 QgsGeometry triangularWaves(
double wavelength,
double amplitude,
bool strictWavelength = false ) const;
1305 QgsGeometry triangularWavesRandomized(
double minimumWavelength,
double maximumWavelength,
double minimumAmplitude,
double maximumAmplitude,
unsigned long seed = 0 ) const;
1319 QgsGeometry squareWaves(
double wavelength,
double amplitude,
bool strictWavelength = false ) const;
1339 QgsGeometry squareWavesRandomized(
double minimumWavelength,
double maximumWavelength,
double minimumAmplitude,
double maximumAmplitude,
unsigned long seed = 0 ) const;
1353 QgsGeometry roundWaves(
double wavelength,
double amplitude,
bool strictWavelength = false ) const;
1373 QgsGeometry roundWavesRandomized(
double minimumWavelength,
double maximumWavelength,
double minimumAmplitude,
double maximumAmplitude,
unsigned long seed = 0 ) const;
1388 QgsGeometry applyDashPattern( const QVector<
double > &pattern,
1389 Qgis::DashPatternLineEndingRule startRule = Qgis::DashPatternLineEndingRule::NoRule,
1390 Qgis::DashPatternLineEndingRule endRule = Qgis::DashPatternLineEndingRule::NoRule,
1391 Qgis::DashPatternSizeAdjustment adjustment = Qgis::DashPatternSizeAdjustment::ScaleBothDashAndGap,
1392 double patternOffset = 0 ) const;
1405 QgsGeometry snappedToGrid(
double hSpacing,
double vSpacing,
double dSpacing = 0,
double mSpacing = 0 ) const;
1426 bool removeDuplicateNodes(
double epsilon = 4 * std::numeric_limits<
double>::epsilon(),
bool useZValues = false );
1437 bool intersects( const QgsRectangle &rectangle ) const;
1453 bool intersects( const QgsGeometry &geometry ) const;
1463 bool boundingBoxIntersects( const QgsRectangle &rectangle ) const;
1473 bool boundingBoxIntersects( const QgsGeometry &geometry ) const;
1478 bool contains( const QgsPointXY *p ) const;
1485 bool contains(
double x,
double y ) const;
1496 bool contains( const QgsGeometry &geometry ) const;
1507 bool disjoint( const QgsGeometry &geometry ) const;
1518 bool touches( const QgsGeometry &geometry ) const;
1529 bool overlaps( const QgsGeometry &geometry ) const;
1540 bool within( const QgsGeometry &geometry ) const;
1551 bool crosses( const QgsGeometry &geometry ) const;
1560 QgsGeometry buffer(
double distance,
int segments ) const;
1573 QgsGeometry buffer(
double distance,
int segments, Qgis::EndCapStyle endCapStyle, Qgis::JoinStyle joinStyle,
double miterLimit ) const;
1582 QgsGeometry offsetCurve(
double distance,
int segments, Qgis::JoinStyle joinStyle,
double miterLimit ) const;
1598 QgsGeometry singleSidedBuffer(
double distance,
int segments, Qgis::BufferSide side,
1599 Qgis::JoinStyle joinStyle = Qgis::JoinStyle::Round,
1600 double miterLimit = 2.0 ) const;
1619 QgsGeometry taperedBuffer(
double startWidth,
double endWidth,
int segments ) const;
1635 QgsGeometry variableWidthBufferByM(
int segments ) const;
1642 QgsGeometry extendLine(
double startDistance,
double endDistance ) const;
1645 QgsGeometry simplify(
double tolerance ) const;
1655 QgsGeometry densifyByCount(
int extraNodesPerSegment ) const;
1670 QgsGeometry densifyByDistance(
double distance ) const;
1687 QgsGeometry convertToCurves(
double distanceTolerance = 1e-8,
double angleTolerance = 1e-8 ) const;
1702 QgsGeometry centroid() const;
1717 QgsGeometry pointOnSurface() const;
1730 QgsGeometry poleOfInaccessibility(
double precision,
double *distanceToBoundary
SIP_OUT =
nullptr ) const;
1755 QgsGeometry largestEmptyCircle(
double tolerance, const QgsGeometry &boundary = QgsGeometry() ) const
SIP_THROW( QgsNotSupportedException );
1771 QgsGeometry minimumWidth() const
SIP_THROW( QgsNotSupportedException );
1794 double minimumClearance() const
SIP_THROW( QgsNotSupportedException );
1807 QgsGeometry minimumClearanceLine() const
SIP_THROW( QgsNotSupportedException );
1817 QgsGeometry convexHull() const;
1832 QgsGeometry concaveHull(
double targetPercent,
bool allowHoles = false ) const
SIP_THROW( QgsNotSupportedException );
1848 QgsGeometry voronoiDiagram( const QgsGeometry &extent = QgsGeometry(),
double tolerance = 0.0,
bool edgesOnly = false ) const;
1860 QgsGeometry delaunayTriangulation(
double tolerance = 0.0,
bool edgesOnly = false ) const;
1874 QgsGeometry constrainedDelaunayTriangulation() const
SIP_THROW( QgsNotSupportedException );
1893 Qgis::CoverageValidityResult validateCoverage(
double gapWidth, QgsGeometry *invalidEdges
SIP_OUT =
nullptr ) const
SIP_THROW( QgsNotSupportedException );
1915 QgsGeometry simplifyCoverageVW(
double tolerance,
bool preserveBoundary ) const
SIP_THROW( QgsNotSupportedException );
1928 QgsGeometry unionCoverage() const;
1940 QgsGeometry node() const;
1956 QgsGeometry sharedPaths( const QgsGeometry &other ) const;
1979 QgsGeometry subdivide(
int maxNodes = 256, const QgsGeometryParameters ¶meters = QgsGeometryParameters() ) const;
1995 QgsGeometry interpolate(
double distance ) const;
2007 double lineLocatePoint( const QgsGeometry &point ) const;
2017 double interpolateAngle(
double distance ) const;
2030 QgsGeometry intersection( const QgsGeometry &geometry, const QgsGeometryParameters ¶meters = QgsGeometryParameters() ) const;
2038 QgsGeometry clipped( const QgsRectangle &rectangle );
2054 QgsGeometry combine( const QgsGeometry &geometry, const QgsGeometryParameters ¶meters = QgsGeometryParameters() ) const;
2066 QgsGeometry mergeLines( const QgsGeometryParameters ¶meters = QgsGeometryParameters() ) const;
2079 QgsGeometry difference( const QgsGeometry &geometry, const QgsGeometryParameters ¶meters = QgsGeometryParameters() ) const;
2092 QgsGeometry symDifference( const QgsGeometry &geometry, const QgsGeometryParameters ¶meters = QgsGeometryParameters() ) const;
2095 QgsGeometry extrude(
double x,
double y );
2157 PyErr_SetString( PyExc_ValueError, QStringLiteral(
"Cannot generate points inside a null geometry." ).toUtf8().constData() );
2162 PyErr_SetString( PyExc_TypeError, QStringLiteral(
"Cannot generate points inside a %1 geometry. Only Polygon types are permitted." ).arg(
QgsWkbTypes::displayString( sipCpp->wkbType() ) ).toUtf8().constData() );
2167 const sipTypeDef *qvector_type = sipFindType(
"QVector<QgsPointXY>" );
2168 sipRes = sipConvertFromNewType(
new QVector< QgsPointXY >( sipCpp->randomPointsInPolygon( a0, a1 ) ), qvector_type, Py_None );
2198 Q_INVOKABLE QString asWkt(
int precision = 17 )
const;
2201 SIP_PYOBJECT __repr__();
2204 if ( sipCpp->isNull() )
2205 str = QStringLiteral(
"<QgsGeometry: null>" );
2208 QString wkt = sipCpp->asWkt();
2209 if ( wkt.length() > 1000 )
2210 wkt = wkt.left( 1000 ) + QStringLiteral(
"..." );
2211 str = QStringLiteral(
"<QgsGeometry: %1>" ).arg( wkt );
2213 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
2220 QString asJson(
int precision = 17 )
const;
2227 virtual json asJsonObject(
int precision = 17 ) const
SIP_SKIP;
2259 QVector< QgsGeometry > coerceToType( Qgis::WkbType type,
double defaultZ = 0,
double defaultM = 0,
bool avoidDuplicates = true ) const;
2272 QgsGeometry convertToType( Qgis::GeometryType destType,
bool destMultipart = false ) const;
2286 QgsPointXY asPoint()
const;
2299 SIP_PYOBJECT asPoint() const
SIP_TYPEHINT( QgsPointXY );
2301 if ( sipCpp->isNull() )
2303 PyErr_SetString( PyExc_ValueError, QStringLiteral(
"Null geometry cannot be converted to a point." ).toUtf8().constData() );
2308 const QgsAbstractGeometry *geom = sipCpp->constGet();
2311 PyErr_SetString( PyExc_TypeError, QStringLiteral(
"%1 geometry cannot be converted to a point. Only Point types are permitted." ).arg(
QgsWkbTypes::displayString( geom->
wkbType() ) ).toUtf8().constData() );
2316 sipRes = sipConvertFromNewType(
new QgsPointXY( sipCpp->asPoint() ), sipType_QgsPointXY, Py_None );
2348 const Qgis::WkbType type = sipCpp->wkbType();
2349 if ( sipCpp->isNull() )
2351 PyErr_SetString( PyExc_ValueError, QStringLiteral(
"Null geometry cannot be converted to a polyline." ).toUtf8().constData() );
2356 PyErr_SetString( PyExc_TypeError, QStringLiteral(
"%1 geometry cannot be converted to a polyline. Only single line or curve types are permitted." ).arg(
QgsWkbTypes::displayString( type ) ).toUtf8().constData() );
2361 const sipTypeDef *qvector_type = sipFindType(
"QVector< QgsPointXY >" );
2362 sipRes = sipConvertFromNewType(
new QgsPolylineXY( sipCpp->asPolyline() ), qvector_type, Py_None );
2393 const Qgis::WkbType type = sipCpp->wkbType();
2394 if ( sipCpp->isNull() )
2396 PyErr_SetString( PyExc_ValueError, QStringLiteral(
"Null geometry cannot be converted to a polygon." ).toUtf8().constData() );
2401 PyErr_SetString( PyExc_TypeError, QStringLiteral(
"%1 geometry cannot be converted to a polygon. Only single polygon or curve polygon types are permitted." ).arg(
QgsWkbTypes::displayString( type ) ).toUtf8().constData() );
2406 const sipTypeDef *qvector_type = sipFindType(
"QVector<QVector<QgsPointXY>>" );
2407 sipRes = sipConvertFromNewType(
new QgsPolygonXY( sipCpp->asPolygon() ), qvector_type, Py_None );
2436 const Qgis::WkbType type = sipCpp->wkbType();
2437 if ( sipCpp->isNull() )
2439 PyErr_SetString( PyExc_ValueError, QStringLiteral(
"Null geometry cannot be converted to a multipoint." ).toUtf8().constData() );
2444 PyErr_SetString( PyExc_TypeError, QStringLiteral(
"%1 geometry cannot be converted to a multipoint. Only multipoint types are permitted." ).arg(
QgsWkbTypes::displayString( type ) ).toUtf8().constData() );
2449 const sipTypeDef *qvector_type = sipFindType(
"QVector< QgsPointXY >" );
2450 sipRes = sipConvertFromNewType(
new QgsPolylineXY( sipCpp->asMultiPoint() ), qvector_type, Py_None );
2481 const Qgis::WkbType type = sipCpp->wkbType();
2482 if ( sipCpp->isNull() )
2484 PyErr_SetString( PyExc_ValueError, QStringLiteral(
"Null geometry cannot be converted to a multilinestring." ).toUtf8().constData() );
2489 PyErr_SetString( PyExc_TypeError, QStringLiteral(
"%1 geometry cannot be converted to a multilinestring. Only multi linestring or curves are permitted." ).arg(
QgsWkbTypes::displayString( type ) ).toUtf8().constData() );
2494 const sipTypeDef *qvector_type = sipFindType(
"QVector<QVector<QgsPointXY>>" );
2495 sipRes = sipConvertFromNewType(
new QgsMultiPolylineXY( sipCpp->asMultiPolyline() ), qvector_type, Py_None );
2526 const Qgis::WkbType type = sipCpp->wkbType();
2527 if ( sipCpp->isNull() )
2529 PyErr_SetString( PyExc_ValueError, QStringLiteral(
"Null geometry cannot be converted to a multipolygon." ).toUtf8().constData() );
2534 PyErr_SetString( PyExc_TypeError, QStringLiteral(
"%1 geometry cannot be converted to a multipolygon. Only multi polygon or curves are permitted." ).arg(
QgsWkbTypes::displayString( type ) ).toUtf8().constData() );
2539 const sipTypeDef *qvector_type = sipFindType(
"QVector<QVector<QVector<QgsPointXY>>>" );
2540 sipRes = sipConvertFromNewType(
new QgsMultiPolygonXY( sipCpp->asMultiPolygon() ), qvector_type, Py_None );
2548 QVector<QgsGeometry> asGeometryCollection()
const;
2574 bool deleteRing(
int ringNum,
int partNum = 0 );
2580 bool deletePart(
int partNum );
2590 bool convertToMultiType();
2607 bool convertToCurvedMultiType();
2618 bool convertToSingleType();
2629 bool convertGeometryCollectionToSubclass( Qgis::GeometryType geomType );
2642 Q_DECL_DEPRECATED
int avoidIntersections( const QList<QgsVectorLayer *> &avoidIntersectionsLayers,
2656 Qgis::GeometryOperationResult avoidIntersectionsV2( const QList<QgsVectorLayer *> &avoidIntersectionsLayers,
2679 QgsGeometry makeValid( Qgis::MakeValidMethod method = Qgis::MakeValidMethod::Linework,
bool keepCollapsed = false ) const
SIP_THROW( QgsNotSupportedException );
2690 Qgis::AngularDirection polygonOrientation() const;
2771 : mMessage( QStringLiteral(
"none" ) )
2781 , mHasLocation( true ) {}
2786 QString what()
const;
2796 bool hasWhere()
const;
2799 SIP_PYOBJECT __repr__();
2801 QString str = QStringLiteral(
"<QgsGeometry.Error: %1>" ).arg( sipCpp->what() );
2802 sipRes = PyUnicode_FromString( str.toUtf8().data() );
2809 return other.mMessage == mMessage && other.mHasLocation == mHasLocation && other.mLocation == mLocation;
2815 bool mHasLocation =
false;
2855 static QgsGeometry polygonize(
const QVector<QgsGeometry> &geometries );
2870 bool requiresConversionToStraightSegments()
const;
2882 void draw( QPainter &p )
const;
2924 void filterVertices( const std::function<
bool( const
QgsPoint & ) > &filter )
SIP_SKIP;
2954 static
QgsGeometry fromQPolygonF( const QPolygonF &polygon );
2985 double epsilon = 4 * std::numeric_limits<double>::epsilon() );
2996 double epsilon = 4 * std::numeric_limits<double>::epsilon() );
3008 double epsilon = 4 * std::numeric_limits<double>::epsilon() );
3029 static bool compare( PyObject *obj1, PyObject *obj2,
double epsilon = 4 * std::numeric_limits<double>::epsilon() );
3037 if ( PyList_Check( a0 ) && PyList_Check( a1 ) &&
3038 PyList_GET_SIZE( a0 ) && PyList_GET_SIZE( a1 ) )
3040 PyObject *o0 = PyList_GetItem( a0, 0 );
3041 PyObject *o1 = PyList_GetItem( a1, 0 );
3045 if ( sipCanConvertToType( o0, sipType_QgsPointXY, SIP_NOT_NONE ) &&
3046 sipCanConvertToType( o1, sipType_QgsPointXY, SIP_NOT_NONE ) &&
3047 sipCanConvertToType( a0, sipType_QVector_0100QgsPointXY, SIP_NOT_NONE ) &&
3048 sipCanConvertToType( a1, sipType_QVector_0100QgsPointXY, SIP_NOT_NONE ) )
3052 p0 =
reinterpret_cast<QgsPolylineXY *
>( sipConvertToType( a0, sipType_QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state0, &sipIsErr ) );
3053 p1 =
reinterpret_cast<QgsPolylineXY *
>( sipConvertToType( a1, sipType_QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state1, &sipIsErr ) );
3058 sipReleaseType( p0, sipType_QVector_0100QgsPointXY, state0 );
3059 sipReleaseType( p1, sipType_QVector_0100QgsPointXY, state1 );
3061 else if ( PyList_Check( o0 ) && PyList_Check( o1 ) &&
3062 PyList_GET_SIZE( o0 ) && PyList_GET_SIZE( o1 ) )
3064 PyObject *oo0 = PyList_GetItem( o0, 0 );
3065 PyObject *oo1 = PyList_GetItem( o1, 0 );
3069 if ( sipCanConvertToType( oo0, sipType_QgsPointXY, SIP_NOT_NONE ) &&
3070 sipCanConvertToType( oo1, sipType_QgsPointXY, SIP_NOT_NONE ) &&
3071 sipCanConvertToType( a0, sipType_QVector_0600QVector_0100QgsPointXY, SIP_NOT_NONE ) &&
3072 sipCanConvertToType( a1, sipType_QVector_0600QVector_0100QgsPointXY, SIP_NOT_NONE ) )
3076 p0 =
reinterpret_cast<QgsPolygonXY *
>( sipConvertToType( a0, sipType_QVector_0600QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state0, &sipIsErr ) );
3077 p1 =
reinterpret_cast<QgsPolygonXY *
>( sipConvertToType( a1, sipType_QVector_0600QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state1, &sipIsErr ) );
3082 sipReleaseType( p0, sipType_QVector_0600QVector_0100QgsPointXY, state0 );
3083 sipReleaseType( p1, sipType_QVector_0600QVector_0100QgsPointXY, state1 );
3085 else if ( PyList_Check( oo0 ) && PyList_Check( oo1 ) &&
3086 PyList_GET_SIZE( oo0 ) && PyList_GET_SIZE( oo1 ) )
3088 PyObject *ooo0 = PyList_GetItem( oo0, 0 );
3089 PyObject *ooo1 = PyList_GetItem( oo1, 0 );
3093 if ( sipCanConvertToType( ooo0, sipType_QgsPointXY, SIP_NOT_NONE ) &&
3094 sipCanConvertToType( ooo1, sipType_QgsPointXY, SIP_NOT_NONE ) &&
3095 sipCanConvertToType( a0, sipType_QVector_0600QVector_0600QVector_0100QgsPointXY, SIP_NOT_NONE ) &&
3096 sipCanConvertToType( a1, sipType_QVector_0600QVector_0600QVector_0100QgsPointXY, SIP_NOT_NONE ) )
3100 p0 =
reinterpret_cast<QgsMultiPolygonXY *
>( sipConvertToType( a0, sipType_QVector_0600QVector_0600QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state0, &sipIsErr ) );
3101 p1 =
reinterpret_cast<QgsMultiPolygonXY *
>( sipConvertToType( a1, sipType_QVector_0600QVector_0600QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state1, &sipIsErr ) );
3106 sipReleaseType( p0, sipType_QVector_0600QVector_0600QVector_0100QgsPointXY, state0 );
3107 sipReleaseType( p1, sipType_QVector_0600QVector_0600QVector_0100QgsPointXY, state1 );
3134 QgsGeometry smooth(
unsigned int iterations = 1,
double offset = 0.25,
3135 double minimumDistance = -1.0,
double maxAngle = 180.0 )
const;
3183 static void convertPointList(
const QVector<QgsPointXY> &input,
QgsPointSequence &output );
3190 static void convertPointList(
const QgsPointSequence &input, QVector<QgsPointXY> &output );
3193 operator QVariant()
const
3195 return QVariant::fromValue( *
this );
3208 Q_ENUM( ChamferFilletOperationType )
3227 QgsGeometry fillet(
int vertexIndex,
double radius,
int segments = 8 )
const;
3262 QgsGeometry chamfer(
int vertexIndex,
double distance1,
double distance2 = -1.0 ) const;
3290 mutable QString mLastError;
3307 QgsGeometry convertToPoint(
bool destMultipart ) const;
3309 QgsGeometry convertToLine(
bool destMultipart ) const;
3311 QgsGeometry convertToPolygon(
bool destMultipart ) const;
3325 double minimumDistance = -1,
double maxAngle = 180.0 ) const;
3338 std::unique_ptr<
QgsPolygon > smoothPolygon( const
QgsPolygon &polygon,
unsigned int iterations = 1,
double offset = 0.25,
3339 double minimumDistance = -1,
double maxAngle = 180.0 ) const;
3341 QgsGeometry doChamferFillet( ChamferFilletOperationType op,
int vertexIndex,
double distance1,
double distance2,
int segments ) const;