Skip to content

Commit e7ce84c

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

File tree

1 file changed

+34
-20
lines changed

1 file changed

+34
-20
lines changed
 

‎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)
Please sign in to comment.