diff --git a/.ci/test_blocklist_qt6.txt b/.ci/test_blocklist_qt6.txt index cdd16bc81ac2..2399d018f6f5 100644 --- a/.ci/test_blocklist_qt6.txt +++ b/.ci/test_blocklist_qt6.txt @@ -57,7 +57,6 @@ PyQgsShapefileProvider PyQgsSpatialiteProvider PyQgsSymbolLayerReadSld PyQgsVectorLayerEditBuffer -PyQgsVectorLayerEditUtils PyQgsLayerDefinition PyQgsSettings PyQgsSettingsEntry diff --git a/python/PyQt6/core/auto_generated/vector/qgsvectorlayereditutils.sip.in b/python/PyQt6/core/auto_generated/vector/qgsvectorlayereditutils.sip.in index e813ba05168a..7a158d17fd58 100644 --- a/python/PyQt6/core/auto_generated/vector/qgsvectorlayereditutils.sip.in +++ b/python/PyQt6/core/auto_generated/vector/qgsvectorlayereditutils.sip.in @@ -103,7 +103,7 @@ Adds a ring to polygon/multipolygon features .. versionadded:: 3.28 %End - Qgis::GeometryOperationResult addRing( QgsCurve *ring, const QgsFeatureIds &targetFeatureIds = QgsFeatureIds(), QgsFeatureId *modifiedFeatureId = 0 ) /PyName=addCurvedRing/; + Qgis::GeometryOperationResult addRing( QgsCurve *ring /Transfer/, const QgsFeatureIds &targetFeatureIds = QgsFeatureIds(), QgsFeatureId *modifiedFeatureId = 0 ) /PyName=addCurvedRing/; %Docstring Adds a ring to polygon/multipolygon features @@ -151,7 +151,7 @@ Adds a new part polygon to a multipart feature available in python bindings as addPartV2 %End - Qgis::GeometryOperationResult addPart( QgsCurve *ring, QgsFeatureId featureId ) /PyName=addCurvedPart/; + Qgis::GeometryOperationResult addPart( QgsCurve *ring /Transfer/, QgsFeatureId featureId ) /PyName=addCurvedPart/; %Docstring Adds a new part polygon to a multipart feature diff --git a/python/core/auto_generated/vector/qgsvectorlayereditutils.sip.in b/python/core/auto_generated/vector/qgsvectorlayereditutils.sip.in index e813ba05168a..7a158d17fd58 100644 --- a/python/core/auto_generated/vector/qgsvectorlayereditutils.sip.in +++ b/python/core/auto_generated/vector/qgsvectorlayereditutils.sip.in @@ -103,7 +103,7 @@ Adds a ring to polygon/multipolygon features .. versionadded:: 3.28 %End - Qgis::GeometryOperationResult addRing( QgsCurve *ring, const QgsFeatureIds &targetFeatureIds = QgsFeatureIds(), QgsFeatureId *modifiedFeatureId = 0 ) /PyName=addCurvedRing/; + Qgis::GeometryOperationResult addRing( QgsCurve *ring /Transfer/, const QgsFeatureIds &targetFeatureIds = QgsFeatureIds(), QgsFeatureId *modifiedFeatureId = 0 ) /PyName=addCurvedRing/; %Docstring Adds a ring to polygon/multipolygon features @@ -151,7 +151,7 @@ Adds a new part polygon to a multipart feature available in python bindings as addPartV2 %End - Qgis::GeometryOperationResult addPart( QgsCurve *ring, QgsFeatureId featureId ) /PyName=addCurvedPart/; + Qgis::GeometryOperationResult addPart( QgsCurve *ring /Transfer/, QgsFeatureId featureId ) /PyName=addCurvedPart/; %Docstring Adds a new part polygon to a multipart feature diff --git a/src/core/vector/qgsvectorlayereditutils.cpp b/src/core/vector/qgsvectorlayereditutils.cpp index 59bbc7f106e3..349065d00fc6 100644 --- a/src/core/vector/qgsvectorlayereditutils.cpp +++ b/src/core/vector/qgsvectorlayereditutils.cpp @@ -232,9 +232,10 @@ Qgis::GeometryOperationResult QgsVectorLayerEditUtils::addRing( QgsCurve *ring, std::unique_ptr uniquePtrRing( ring ); if ( modifiedFeatureId ) { - QgsFeatureIds *modifiedFeatureIds = new QgsFeatureIds; - Qgis::GeometryOperationResult result = staticAddRing( mLayer, uniquePtrRing, targetFeatureIds, modifiedFeatureIds, true ); - *modifiedFeatureId = *modifiedFeatureIds->begin(); + QgsFeatureIds modifiedFeatureIds; + Qgis::GeometryOperationResult result = staticAddRing( mLayer, uniquePtrRing, targetFeatureIds, &modifiedFeatureIds, true ); + if ( modifiedFeatureId && !modifiedFeatureIds.empty() ) + *modifiedFeatureId = *modifiedFeatureIds.begin(); return result; } return staticAddRing( mLayer, uniquePtrRing, targetFeatureIds, nullptr, true ); diff --git a/src/core/vector/qgsvectorlayereditutils.h b/src/core/vector/qgsvectorlayereditutils.h index a68a615f57dd..c2443c4d241e 100644 --- a/src/core/vector/qgsvectorlayereditutils.h +++ b/src/core/vector/qgsvectorlayereditutils.h @@ -111,7 +111,7 @@ class CORE_EXPORT QgsVectorLayerEditUtils * \return OperationResult result code: success or reason of failure * \note available in python bindings as addCurvedRing */ - Qgis::GeometryOperationResult addRing( QgsCurve *ring, const QgsFeatureIds &targetFeatureIds = QgsFeatureIds(), QgsFeatureId *modifiedFeatureId = nullptr ) SIP_PYNAME( addCurvedRing ); + Qgis::GeometryOperationResult addRing( QgsCurve *ring SIP_TRANSFER, const QgsFeatureIds &targetFeatureIds = QgsFeatureIds(), QgsFeatureId *modifiedFeatureId = nullptr ) SIP_PYNAME( addCurvedRing ); /** * Adds a new part polygon to a multipart feature @@ -152,7 +152,7 @@ class CORE_EXPORT QgsVectorLayerEditUtils * * \note available in python bindings as addCurvedPart */ - Qgis::GeometryOperationResult addPart( QgsCurve *ring, QgsFeatureId featureId ) SIP_PYNAME( addCurvedPart ); + Qgis::GeometryOperationResult addPart( QgsCurve *ring SIP_TRANSFER, QgsFeatureId featureId ) SIP_PYNAME( addCurvedPart ); /** * Translates feature by dx, dy diff --git a/tests/src/python/test_qgsvectorlayereditutils.py b/tests/src/python/test_qgsvectorlayereditutils.py index 99af765f4374..36b691b48f8c 100644 --- a/tests/src/python/test_qgsvectorlayereditutils.py +++ b/tests/src/python/test_qgsvectorlayereditutils.py @@ -798,14 +798,24 @@ def test_split_policy_polygon(self): split_curve = QgsGeometry.fromWkt("LineString (-2.7 4.3, 5.5 11.8, 5.28 -5.57)") temp_layer.splitFeatures(split_curve.constGet(), preserveCircular=False) + def round_attributes(_attributes, places): + res = [] + for a in _attributes: + if isinstance(a, float): + res.append(round(a, places)) + else: + res.append(a) + + return res + features = list(temp_layer.getFeatures()) - attributes = [f.attributes() for f in features] + attributes = [round_attributes(f.attributes(), 4) for f in features] self.assertCountEqual( attributes, [ - [None, 3301.0, 302.0, 303.0, 147.23845863746018], - [None, 301, 302.0, QgsUnsetAttributeValue(), 17.343326048780483], - [None, 301, 302.0, QgsUnsetAttributeValue(), 139.41821531375936], + [None, 3301.0, 302.0, 303.0, 147.2385], + [None, 301, 302.0, QgsUnsetAttributeValue(), 17.3433], + [None, 301, 302.0, QgsUnsetAttributeValue(), 139.4182], ], )