diff --git a/python/plugins/processing/algs/qgis/scripts/Frequency_analysis.py b/python/plugins/processing/algs/qgis/scripts/Frequency_analysis.py index 4f4954e8d1d..1bd4917d15e 100644 --- a/python/plugins/processing/algs/qgis/scripts/Frequency_analysis.py +++ b/python/plugins/processing/algs/qgis/scripts/Frequency_analysis.py @@ -1,8 +1,14 @@ ##Table=group -##Input=vector -##Fields=Field Input + +#inputs + +##Input=source +##Fields=field Input ##Frequency=output table +#outputs + + from processing.tools.vector import TableWriter from collections import defaultdict from qgis.core import QgsProcessingUtils diff --git a/python/plugins/processing/algs/qgis/scripts/Keep_n_biggest_parts.py b/python/plugins/processing/algs/qgis/scripts/Keep_n_biggest_parts.py index 12a32266e54..68b703460ef 100644 --- a/python/plugins/processing/algs/qgis/scripts/Keep_n_biggest_parts.py +++ b/python/plugins/processing/algs/qgis/scripts/Keep_n_biggest_parts.py @@ -19,14 +19,12 @@ if To_keep < 1: feedback.pushInfo("'To keep' value has been modified to be at least 1.") To_keep = 1 - -source = self.parameterAsSource(parameters, 'Polygons', context) -count = source.featureCount() +count = Polygons.featureCount() (sink, Biggest_parts) = self.parameterAsSink(parameters, 'Biggest parts', context, - source.fields(), QgsWkbTypes.MultiPolygon, source.sourceCrs()) + Polygons.fields(), QgsWkbTypes.MultiPolygon, Polygons.sourceCrs()) -for n, feat in enumerate(source.getFeatures()): +for n, feat in enumerate(Polygons.getFeatures()): if feedback.isCanceled(): break feedback.setProgress(int(100 * n / count)) diff --git a/python/plugins/processing/algs/qgis/scripts/Number_of_unique_values_in_classes.py b/python/plugins/processing/algs/qgis/scripts/Number_of_unique_values_in_classes.py index 513a306d821..6e3b6d2d784 100644 --- a/python/plugins/processing/algs/qgis/scripts/Number_of_unique_values_in_classes.py +++ b/python/plugins/processing/algs/qgis/scripts/Number_of_unique_values_in_classes.py @@ -1,25 +1,36 @@ ##Vector table tools=group -##input=vector + +# inputs + + +##input=source ##class_field=field input ##value_field=field input -##N_unique_values=output vector +##N_unique_values=sink + +#outputs +##N_unique_values=output outputVector from qgis.PyQt.QtCore import QVariant from qgis.core import QgsFeature, QgsField, QgsProcessingUtils -layer = QgsProcessingUtils.mapLayerFromString(input, context) -fields = layer.fields() +fields = input.fields() fields.append(QgsField('UNIQ_COUNT', QVariant.Int)) -writer, writer_dest = QgsProcessingUtils.createFeatureSink(N_unique_values, context, fields, layer.wkbType(), layer.crs()) -class_field_index = layer.fields().lookupField(class_field) -value_field_index = layer.fields().lookupField(value_field) +(sink, N_unique_values) = self.parameterAsSink(parameters, 'N_unique_values', context, + fields, input.wkbType(), input.sourceCrs()) + + +class_field_index = input.fields().lookupField(class_field) +value_field_index = input.fields().lookupField(value_field) outFeat = QgsFeature() classes = {} -feats = QgsProcessingUtils.getFeatures(layer, context) -nFeat = QgsProcessingUtils.featureCount(layer, context) +feats = input.getFeatures() +nFeat = input.featureCount() for n, inFeat in enumerate(feats): + if feedback.isCanceled(): + break feedback.setProgress(int(100 * n / nFeat)) attrs = inFeat.attributes() clazz = attrs[class_field_index] @@ -29,8 +40,10 @@ for n, inFeat in enumerate(feats): if value not in classes[clazz]: classes[clazz].append(value) -feats = processing.features(layer) +feats = input.getFeatures() for n, inFeat in enumerate(feats): + if feedback.isCanceled(): + break feedback.setProgress(int(100 * n / nFeat)) inGeom = inFeat.geometry() outFeat.setGeometry(inGeom) @@ -38,6 +51,4 @@ for n, inFeat in enumerate(feats): clazz = attrs[class_field_index] attrs.append(len(classes[clazz])) outFeat.setAttributes(attrs) - writer.addFeature(outFeat) - -del writer + sink.addFeature(outFeat) diff --git a/python/plugins/processing/script/ScriptAlgorithm.py b/python/plugins/processing/script/ScriptAlgorithm.py index 5cf7eaa563a..40b253403a2 100644 --- a/python/plugins/processing/script/ScriptAlgorithm.py +++ b/python/plugins/processing/script/ScriptAlgorithm.py @@ -181,16 +181,53 @@ class ScriptAlgorithm(QgsProcessingAlgorithm): ns['scriptDescriptionFile'] = self.descriptionFile for param in self.parameterDefinitions(): - ns[param.name()] = parameters[param.name()] + method = None + if param.type() == "boolean": + method = self.parameterAsBool + elif param.type() == "crs": + method = self.parameterAsCrs + elif param.type() == "layer": + method = self.parameterAsLayer + elif param.type() == "extent": + method = self.parameterAsExtent + elif param.type() == "point": + method = self.parameterAsPoint + elif param.type() == "file": + method = self.parameterAsFile + elif param.type() == "matrix": + method = self.parameterAsMatrix + elif param.type() == "multilayer": + method = self.parameterAsLayerList + elif param.type() == "number": + method = self.parameterAsDouble + elif param.type() == "range": + method = self.parameterAsRange + elif param.type() == "raster": + method = self.parameterAsRasterLayer + elif param.type() == "enum": + method = self.parameterAsEnum + elif param.type() == "string": + method = self.parameterAsString + elif param.type() == "expression": + method = self.parameterAsString + elif param.type() == "vector": + method = self.parameterAsVectorLayer + elif param.type() == "field": + method = self.parameterAsString + elif param.type() == "source": + method = self.parameterAsSource + + if method: + ns[param.name()] = method(parameters, param.name(), context) + + for out in self.outputDefinitions(): + ns[out.name()] = None ns['self'] = self ns['parameters'] = parameters ns['feedback'] = feedback ns['context'] = context -# for out in self.outputDefinitions(): -# ns[out.name()] = out.value - variables = re.findall('@[a-zA-Z0-9_]*', self.script) script = 'import processing\n' script += self.script