@@ -88,7 +88,7 @@ def processAlgorithm(self, parameters, context, feedback):
88
88
# Delaunay triangulation from input point layer
89
89
feedback .setProgressText (self .tr ('Creating Delaunay triangles...' ))
90
90
delone_triangles = processing .run ("qgis:delaunaytriangulation" , {'INPUT' : parameters [ConcaveHull .INPUT ], 'OUTPUT' : 'memory:' }, feedback = feedback , context = context )['OUTPUT' ]
91
- delaunay_layer = QgsProcessingUtils . mapLayerFromString (delone_triangles , context )
91
+ delaunay_layer = context . takeResultLayer (delone_triangles )
92
92
93
93
# Get max edge length from Delaunay triangles
94
94
feedback .setProgressText (self .tr ('Computing edges max length...' ))
@@ -127,48 +127,45 @@ def processAlgorithm(self, parameters, context, feedback):
127
127
i += 1
128
128
129
129
# Remove features
130
- delaunay_layer .selectByIds (ids )
131
- delaunay_layer .startEditing ()
132
- delaunay_layer .deleteSelectedFeatures ()
133
- delaunay_layer .commitChanges ()
130
+ delaunay_layer .dataProvider ().deleteFeatures (ids )
134
131
135
132
# Dissolve all Delaunay triangles
136
133
feedback .setProgressText (self .tr ('Dissolving Delaunay triangles...' ))
137
- dissolved = processing .run ("native:dissolve" , {'INPUT' : delaunay_layer . id () , 'OUTPUT' : 'memory:' }, feedback = feedback , context = context )['OUTPUT' ]
138
- dissolved_layer = QgsProcessingUtils . mapLayerFromString (dissolved , context )
134
+ dissolved = processing .run ("native:dissolve" , {'INPUT' : delaunay_layer , 'OUTPUT' : 'memory:' }, feedback = feedback , context = context )['OUTPUT' ]
135
+ dissolved_layer = context . takeResultLayer (dissolved )
139
136
140
137
# Save result
141
138
feedback .setProgressText (self .tr ('Saving data...' ))
142
139
feat = QgsFeature ()
143
140
dissolved_layer .getFeatures ().nextFeature (feat )
144
141
142
+ # Not needed anymore, free up some resources
143
+ del delaunay_layer
144
+ del dissolved_layer
145
+
145
146
(sink , dest_id ) = self .parameterAsSink (parameters , self .OUTPUT , context ,
146
147
layer .fields (), QgsWkbTypes .Polygon , layer .sourceCrs ())
147
148
148
149
geom = feat .geometry ()
149
150
if no_multigeom and geom .isMultipart ():
150
151
# Only singlepart geometries are allowed
151
- geom_list = geom .asMultiPolygon ()
152
- for single_geom_list in geom_list :
152
+ geom_list = geom .asGeometryCollection ()
153
+ for single_geom in geom_list :
153
154
if feedback .isCanceled ():
154
155
break
155
156
156
157
single_feature = QgsFeature ()
157
- single_geom = QgsGeometry .fromPolygon (single_geom_list )
158
158
if not holes :
159
159
# Delete holes
160
- deleted = True
161
- while deleted :
162
- deleted = single_geom .deleteRing (1 )
160
+ single_geom = single_geom .removeInteriorRings ()
163
161
single_feature .setGeometry (single_geom )
164
162
sink .addFeature (single_feature , QgsFeatureSink .FastInsert )
165
163
else :
166
164
# Multipart geometries are allowed
167
165
if not holes :
168
166
# Delete holes
169
- deleted = True
170
- while deleted :
171
- deleted = geom .deleteRing (1 )
167
+ geom = geom .removeInteriorRings ()
168
+ feat .setGeometry (geom )
172
169
sink .addFeature (feat , QgsFeatureSink .FastInsert )
173
170
174
171
return {self .OUTPUT : dest_id }
0 commit comments