Skip to content

Commit a72eea2

Browse files
committedJun 26, 2017
Fix auto creation of variables when running script algorithms
1 parent 94619d0 commit a72eea2

File tree

4 files changed

+76
-24
lines changed

4 files changed

+76
-24
lines changed
 

‎python/plugins/processing/algs/qgis/scripts/Frequency_analysis.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
##Table=group
2-
##Input=vector
3-
##Fields=Field Input
2+
3+
#inputs
4+
5+
##Input=source
6+
##Fields=field Input
47
##Frequency=output table
58

9+
#outputs
10+
11+
612
from processing.tools.vector import TableWriter
713
from collections import defaultdict
814
from qgis.core import QgsProcessingUtils

‎python/plugins/processing/algs/qgis/scripts/Keep_n_biggest_parts.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,12 @@
1919
feedback.pushInfo("'To keep' value has been modified to be at least 1.")
2020
To_keep = 1
2121

22-
23-
source = self.parameterAsSource(parameters, 'Polygons', context)
24-
count = source.featureCount()
22+
count = Polygons.featureCount()
2523
(sink, Biggest_parts) = self.parameterAsSink(parameters, 'Biggest parts', context,
26-
source.fields(), QgsWkbTypes.MultiPolygon, source.sourceCrs())
24+
Polygons.fields(), QgsWkbTypes.MultiPolygon, Polygons.sourceCrs())
2725

2826

29-
for n, feat in enumerate(source.getFeatures()):
27+
for n, feat in enumerate(Polygons.getFeatures()):
3028
if feedback.isCanceled():
3129
break
3230
feedback.setProgress(int(100 * n / count))
Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,36 @@
11
##Vector table tools=group
2-
##input=vector
2+
3+
# inputs
4+
5+
6+
##input=source
37
##class_field=field input
48
##value_field=field input
5-
##N_unique_values=output vector
9+
##N_unique_values=sink
10+
11+
#outputs
12+
##N_unique_values=output outputVector
613

714
from qgis.PyQt.QtCore import QVariant
815
from qgis.core import QgsFeature, QgsField, QgsProcessingUtils
916

10-
layer = QgsProcessingUtils.mapLayerFromString(input, context)
11-
fields = layer.fields()
17+
fields = input.fields()
1218
fields.append(QgsField('UNIQ_COUNT', QVariant.Int))
13-
writer, writer_dest = QgsProcessingUtils.createFeatureSink(N_unique_values, context, fields, layer.wkbType(), layer.crs())
1419

15-
class_field_index = layer.fields().lookupField(class_field)
16-
value_field_index = layer.fields().lookupField(value_field)
20+
(sink, N_unique_values) = self.parameterAsSink(parameters, 'N_unique_values', context,
21+
fields, input.wkbType(), input.sourceCrs())
22+
23+
24+
class_field_index = input.fields().lookupField(class_field)
25+
value_field_index = input.fields().lookupField(value_field)
1726

1827
outFeat = QgsFeature()
1928
classes = {}
20-
feats = QgsProcessingUtils.getFeatures(layer, context)
21-
nFeat = QgsProcessingUtils.featureCount(layer, context)
29+
feats = input.getFeatures()
30+
nFeat = input.featureCount()
2231
for n, inFeat in enumerate(feats):
32+
if feedback.isCanceled():
33+
break
2334
feedback.setProgress(int(100 * n / nFeat))
2435
attrs = inFeat.attributes()
2536
clazz = attrs[class_field_index]
@@ -29,15 +40,15 @@
2940
if value not in classes[clazz]:
3041
classes[clazz].append(value)
3142

32-
feats = processing.features(layer)
43+
feats = input.getFeatures()
3344
for n, inFeat in enumerate(feats):
45+
if feedback.isCanceled():
46+
break
3447
feedback.setProgress(int(100 * n / nFeat))
3548
inGeom = inFeat.geometry()
3649
outFeat.setGeometry(inGeom)
3750
attrs = inFeat.attributes()
3851
clazz = attrs[class_field_index]
3952
attrs.append(len(classes[clazz]))
4053
outFeat.setAttributes(attrs)
41-
writer.addFeature(outFeat)
42-
43-
del writer
54+
sink.addFeature(outFeat)

‎python/plugins/processing/script/ScriptAlgorithm.py

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,16 +181,53 @@ def processAlgorithm(self, parameters, context, feedback):
181181
ns['scriptDescriptionFile'] = self.descriptionFile
182182

183183
for param in self.parameterDefinitions():
184-
ns[param.name()] = parameters[param.name()]
184+
method = None
185+
if param.type() == "boolean":
186+
method = self.parameterAsBool
187+
elif param.type() == "crs":
188+
method = self.parameterAsCrs
189+
elif param.type() == "layer":
190+
method = self.parameterAsLayer
191+
elif param.type() == "extent":
192+
method = self.parameterAsExtent
193+
elif param.type() == "point":
194+
method = self.parameterAsPoint
195+
elif param.type() == "file":
196+
method = self.parameterAsFile
197+
elif param.type() == "matrix":
198+
method = self.parameterAsMatrix
199+
elif param.type() == "multilayer":
200+
method = self.parameterAsLayerList
201+
elif param.type() == "number":
202+
method = self.parameterAsDouble
203+
elif param.type() == "range":
204+
method = self.parameterAsRange
205+
elif param.type() == "raster":
206+
method = self.parameterAsRasterLayer
207+
elif param.type() == "enum":
208+
method = self.parameterAsEnum
209+
elif param.type() == "string":
210+
method = self.parameterAsString
211+
elif param.type() == "expression":
212+
method = self.parameterAsString
213+
elif param.type() == "vector":
214+
method = self.parameterAsVectorLayer
215+
elif param.type() == "field":
216+
method = self.parameterAsString
217+
elif param.type() == "source":
218+
method = self.parameterAsSource
219+
220+
if method:
221+
ns[param.name()] = method(parameters, param.name(), context)
222+
223+
for out in self.outputDefinitions():
224+
ns[out.name()] = None
185225

186226
ns['self'] = self
187227
ns['parameters'] = parameters
188228
ns['feedback'] = feedback
189229
ns['context'] = context
190230

191-
# for out in self.outputDefinitions():
192-
# ns[out.name()] = out.value
193-
194231
variables = re.findall('@[a-zA-Z0-9_]*', self.script)
195232
script = 'import processing\n'
196233
script += self.script

0 commit comments

Comments
 (0)
Please sign in to comment.