Skip to content

Commit e7ce84c

Browse files
Rashad Kanavathnyalldawson
authored andcommitted
Use parameterAs methods in OtbAlgorithm
This will accept stuff other than string type if needed by a user.
1 parent 5666db2 commit e7ce84c

1 file changed

Lines changed: 34 additions & 20 deletions

File tree

‎python/plugins/processing/algs/otb/OtbAlgorithm.py‎

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
QgsMessageLog,
3636
QgsMapLayer,
3737
QgsApplication,
38+
QgsProcessing,
3839
QgsProcessingAlgorithm,
3940
QgsProcessingParameterMultipleLayers,
4041
QgsProcessingParameterDefinition,
@@ -43,6 +44,11 @@
4344
QgsProcessingParameterString,
4445
QgsProcessingParameterRasterLayer,
4546
QgsProcessingParameterVectorLayer,
47+
QgsProcessingParameterBoolean,
48+
QgsProcessingParameterFile,
49+
QgsProcessingParameterNumber,
50+
QgsProcessingParameterRasterDestination,
51+
QgsProcessingParameterVectorDestination,
4652
QgsProcessingParameterEnum)
4753

4854
from processing.core.parameters import getParameterFromString
@@ -190,15 +196,13 @@ def preprocessParameters(self, parameters):
190196
return valid_params
191197

192198
def processAlgorithm(self, parameters, context, feedback):
193-
194199
otb_cli_file = OtbUtils.cliPath()
195200
command = '"{}" {} {}'.format(otb_cli_file, self.name(), OtbUtils.appFolder())
196201
outputPixelType = None
197202
for k, v in parameters.items():
198203
# if value is None for a parameter we don't have any businees with this key
199204
if v is None:
200205
continue
201-
202206
# for 'outputpixeltype' parameter we find the pixeltype string from self.pixelTypes
203207
if k == 'outputpixeltype':
204208
outputPixelType = self.pixelTypes[int(parameters['outputpixeltype'])]
@@ -207,31 +211,41 @@ def processAlgorithm(self, parameters, context, feedback):
207211
param = self.parameterDefinition(k)
208212
if param.isDestination():
209213
continue
210-
211-
if isinstance(param, (QgsProcessingParameterRasterLayer, QgsProcessingParameterVectorLayer)):
212-
if isinstance(v, QgsMapLayer):
213-
value = '"{}"'.format(v.source())
214-
else:
215-
value = '"{}"'.format(v)
216-
elif isinstance(param, QgsProcessingParameterMultipleLayers):
217-
value = ''
218-
for item in v:
219-
value += '"{}" '.format(item)
220-
elif isinstance(param, QgsProcessingParameterCrs):
221-
crs = self.parameterAsCrs(parameters, param.name(), context)
222-
value = crs.authid().split('EPSG:')[1]
223-
224-
elif isinstance(param, QgsProcessingParameterEnum):
214+
if isinstance(param, QgsProcessingParameterEnum):
225215
value = self.parameterAsEnum(parameters, param.name(), context)
216+
elif isinstance(param, QgsProcessingParameterBoolean):
217+
value = self.parameterAsBool(parameters, param.name(), context)
218+
elif isinstance(param, QgsProcessingParameterCrs):
219+
crsValue = self.parameterAsCrs(parameters, param.name(), context)
220+
value = crsValue.authid().split('EPSG:')[1]
221+
elif isinstance(param, QgsProcessingParameterFile):
222+
value = self.parameterAsFile(parameters, param.name(), context)
223+
elif isinstance(param, QgsProcessingParameterMultipleLayers):
224+
layers = self.parameterAsLayerList(parameters, param.name(), context)
225+
if layers is None or len(layers) == 0:
226+
continue
227+
value = ' '.join(['"{}"'.format(layer.source()) for layer in layers])
228+
elif isinstance(param, QgsProcessingParameterNumber):
229+
if param.dataType() == QgsProcessingParameterNumber.Integer:
230+
value = self.parameterAsInt(parameters, param.name(), context)
231+
else:
232+
value = self.parameterAsDouble(parameters, param.name(), context)
233+
elif isinstance(param, (QgsProcessingParameterRasterLayer, QgsProcessingParameterVectorLayer)):
234+
value = '"{}"'.format(self.parameterAsLayer(parameters, param.name(), context).source())
235+
elif isinstance(param, QgsProcessingParameterString):
236+
value = '"{}"'.format(parameters[param.name()])
226237
else:
227-
value = self.parameterAsString(parameters, param.name(), context)
238+
# Use whatever is given
239+
value = '"{}"'.format(parameters[param.name()])
228240

229-
command += ' -{} {}'.format(k, value)
241+
# Check if value is set in above if elif ladder and update command string
242+
if value and value is not None:
243+
command += ' -{} {}'.format(k, value)
230244

231245
output_files = {}
246+
232247
for out in self.destinationParameterDefinitions():
233248
filePath = self.parameterAsOutputLayer(parameters, out.name(), context)
234-
235249
output_files[out.name()] = filePath
236250
if outputPixelType is not None:
237251
command += ' -{} "{}" {}'.format(out.name(), filePath, outputPixelType)

0 commit comments

Comments
 (0)