35
35
QgsMessageLog ,
36
36
QgsMapLayer ,
37
37
QgsApplication ,
38
+ QgsProcessing ,
38
39
QgsProcessingAlgorithm ,
39
40
QgsProcessingParameterMultipleLayers ,
40
41
QgsProcessingParameterDefinition ,
43
44
QgsProcessingParameterString ,
44
45
QgsProcessingParameterRasterLayer ,
45
46
QgsProcessingParameterVectorLayer ,
47
+ QgsProcessingParameterBoolean ,
48
+ QgsProcessingParameterFile ,
49
+ QgsProcessingParameterNumber ,
50
+ QgsProcessingParameterRasterDestination ,
51
+ QgsProcessingParameterVectorDestination ,
46
52
QgsProcessingParameterEnum )
47
53
48
54
from processing .core .parameters import getParameterFromString
@@ -190,15 +196,13 @@ def preprocessParameters(self, parameters):
190
196
return valid_params
191
197
192
198
def processAlgorithm (self , parameters , context , feedback ):
193
-
194
199
otb_cli_file = OtbUtils .cliPath ()
195
200
command = '"{}" {} {}' .format (otb_cli_file , self .name (), OtbUtils .appFolder ())
196
201
outputPixelType = None
197
202
for k , v in parameters .items ():
198
203
# if value is None for a parameter we don't have any businees with this key
199
204
if v is None :
200
205
continue
201
-
202
206
# for 'outputpixeltype' parameter we find the pixeltype string from self.pixelTypes
203
207
if k == 'outputpixeltype' :
204
208
outputPixelType = self .pixelTypes [int (parameters ['outputpixeltype' ])]
@@ -207,31 +211,41 @@ def processAlgorithm(self, parameters, context, feedback):
207
211
param = self .parameterDefinition (k )
208
212
if param .isDestination ():
209
213
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 ):
225
215
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 ()])
226
237
else :
227
- value = self .parameterAsString (parameters , param .name (), context )
238
+ # Use whatever is given
239
+ value = '"{}"' .format (parameters [param .name ()])
228
240
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 )
230
244
231
245
output_files = {}
246
+
232
247
for out in self .destinationParameterDefinitions ():
233
248
filePath = self .parameterAsOutputLayer (parameters , out .name (), context )
234
-
235
249
output_files [out .name ()] = filePath
236
250
if outputPixelType is not None :
237
251
command += ' -{} "{}" {}' .format (out .name (), filePath , outputPixelType )
0 commit comments