def accept(self): description = self.nameTextBox.text() if description.strip() == '': QMessageBox.warning(self, self.tr('Unable to define parameter'), self.tr('Invalid parameter name')) return if self.param is None: validChars = \ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' safeName = ''.join(c for c in description if c in validChars) name = safeName.lower() i = 2 while self.alg.parameterDefinition(name): name = safeName.lower() + str(i) i += 1 else: name = self.param.name() if (self.paramType == parameters.PARAMETER_BOOLEAN or isinstance(self.param, QgsProcessingParameterBoolean)): self.param = QgsProcessingParameterBoolean(name, description, self.state.isChecked()) elif (self.paramType == parameters.PARAMETER_TABLE_FIELD or isinstance(self.param, QgsProcessingParameterField)): if self.parentCombo.currentIndex() < 0: QMessageBox.warning( self, self.tr('Unable to define parameter'), self.tr('Wrong or missing parameter values')) return parent = self.parentCombo.currentData() datatype = self.datatypeCombo.currentData() default = self.defaultTextBox.text() if not default: default = None self.param = QgsProcessingParameterField( name, description, defaultValue=default, parentLayerParameterName=parent, type=datatype, allowMultiple=self.multipleCheck.isChecked()) elif (self.paramType == parameters.PARAMETER_BAND or isinstance(self.param, QgsProcessingParameterBand)): if self.parentCombo.currentIndex() < 0: QMessageBox.warning( self, self.tr('Unable to define parameter'), self.tr('Wrong or missing parameter values')) return parent = self.parentCombo.currentData() self.param = QgsProcessingParameterBand(name, description, None, parent) elif (self.paramType == parameters.PARAMETER_LAYOUTITEM or isinstance(self.param, QgsProcessingParameterLayoutItem)): if self.parentCombo.currentIndex() < 0: QMessageBox.warning( self, self.tr('Unable to define parameter'), self.tr('Wrong or missing parameter values')) return parent = self.parentCombo.currentData() self.param = QgsProcessingParameterLayoutItem( name, description, None, parent) elif (self.paramType == parameters.PARAMETER_MAP_LAYER or isinstance(self.param, QgsProcessingParameterMapLayer)): self.param = QgsProcessingParameterMapLayer(name, description) elif (self.paramType == parameters.PARAMETER_RASTER or isinstance(self.param, QgsProcessingParameterRasterLayer)): self.param = QgsProcessingParameterRasterLayer(name, description) elif (self.paramType == parameters.PARAMETER_TABLE or isinstance(self.param, QgsProcessingParameterVectorLayer)): self.param = QgsProcessingParameterVectorLayer( name, description, [self.shapetypeCombo.currentData()]) elif (self.paramType == parameters.PARAMETER_VECTOR or isinstance(self.param, QgsProcessingParameterFeatureSource)): self.param = QgsProcessingParameterFeatureSource( name, description, [self.shapetypeCombo.currentData()]) elif (self.paramType == parameters.PARAMETER_MULTIPLE or isinstance(self.param, QgsProcessingParameterMultipleLayers)): self.param = QgsProcessingParameterMultipleLayers( name, description, self.datatypeCombo.currentData()) elif (self.paramType == parameters.PARAMETER_DISTANCE or isinstance(self.param, QgsProcessingParameterDistance)): self.param = QgsProcessingParameterDistance( name, description, self.defaultTextBox.text()) try: vmin = self.minTextBox.text().strip() if not vmin == '': self.param.setMinimum(float(vmin)) vmax = self.maxTextBox.text().strip() if not vmax == '': self.param.setMaximum(float(vmax)) except: QMessageBox.warning( self, self.tr('Unable to define parameter'), self.tr('Wrong or missing parameter values')) return if self.parentCombo.currentIndex() < 0: QMessageBox.warning( self, self.tr('Unable to define parameter'), self.tr('Wrong or missing parameter values')) return parent = self.parentCombo.currentData() if parent: self.param.setParentParameterName(parent) elif (self.paramType == parameters.PARAMETER_SCALE or isinstance(self.param, QgsProcessingParameterScale)): self.param = QgsProcessingParameterScale( name, description, self.defaultTextBox.text()) elif (self.paramType == parameters.PARAMETER_NUMBER or isinstance(self.param, QgsProcessingParameterNumber)): type = self.type_combo.currentData() self.param = QgsProcessingParameterNumber( name, description, type, self.defaultTextBox.text()) try: vmin = self.minTextBox.text().strip() if not vmin == '': self.param.setMinimum(float(vmin)) vmax = self.maxTextBox.text().strip() if not vmax == '': self.param.setMaximum(float(vmax)) except: QMessageBox.warning( self, self.tr('Unable to define parameter'), self.tr('Wrong or missing parameter values')) return elif (self.paramType == parameters.PARAMETER_EXPRESSION or isinstance(self.param, QgsProcessingParameterExpression)): parent = self.parentCombo.currentData() self.param = QgsProcessingParameterExpression( name, description, str(self.defaultEdit.expression()), parent) elif (self.paramType == parameters.PARAMETER_STRING or isinstance(self.param, QgsProcessingParameterString)): self.param = QgsProcessingParameterString( name, description, str(self.defaultTextBox.text())) elif (self.paramType == parameters.PARAMETER_EXTENT or isinstance(self.param, QgsProcessingParameterExtent)): self.param = QgsProcessingParameterExtent(name, description) elif (self.paramType == parameters.PARAMETER_FILE or isinstance(self.param, QgsProcessingParameterFile)): isFolder = self.fileFolderCombo.currentIndex() == 1 self.param = QgsProcessingParameterFile( name, description, QgsProcessingParameterFile.Folder if isFolder else QgsProcessingParameterFile.File) elif (self.paramType == parameters.PARAMETER_POINT or isinstance(self.param, QgsProcessingParameterPoint)): self.param = QgsProcessingParameterPoint( name, description, str(self.defaultTextBox.text())) elif (self.paramType == parameters.PARAMETER_CRS or isinstance(self.param, QgsProcessingParameterCrs)): self.param = QgsProcessingParameterCrs( name, description, self.selector.crs().authid()) elif (self.paramType == parameters.PARAMETER_ENUM or isinstance(self.param, QgsProcessingParameterEnum)): self.param = QgsProcessingParameterEnum( name, description, self.widget.options(), self.widget.allowMultiple(), self.widget.defaultOptions()) elif (self.paramType == parameters.PARAMETER_MATRIX or isinstance(self.param, QgsProcessingParameterMatrix)): self.param = QgsProcessingParameterMatrix( name, description, hasFixedNumberRows=self.widget.fixedRows(), headers=self.widget.headers(), defaultValue=self.widget.value()) # Destination parameter elif (isinstance(self.param, QgsProcessingParameterFeatureSink)): self.param = QgsProcessingParameterFeatureSink( name=name, description=self.param.description(), type=self.param.dataType(), defaultValue=self.defaultWidget.getValue()) elif (isinstance(self.param, QgsProcessingParameterFileDestination)): self.param = QgsProcessingParameterFileDestination( name=name, description=self.param.description(), fileFilter=self.param.fileFilter(), defaultValue=self.defaultWidget.getValue()) elif (isinstance(self.param, QgsProcessingParameterFolderDestination)): self.param = QgsProcessingParameterFolderDestination( name=name, description=self.param.description(), defaultValue=self.defaultWidget.getValue()) elif (isinstance(self.param, QgsProcessingParameterRasterDestination)): self.param = QgsProcessingParameterRasterDestination( name=name, description=self.param.description(), defaultValue=self.defaultWidget.getValue()) elif (isinstance(self.param, QgsProcessingParameterVectorDestination)): self.param = QgsProcessingParameterVectorDestination( name=name, description=self.param.description(), type=self.param.dataType(), defaultValue=self.defaultWidget.getValue()) else: if self.paramType: typeId = self.paramType else: typeId = self.param.type() paramTypeDef = QgsApplication.instance().processingRegistry( ).parameterType(typeId) if not paramTypeDef: msg = self.tr( 'The parameter `{}` is not registered, are you missing a required plugin?' .format(typeId)) raise UndefinedParameterException(msg) self.param = paramTypeDef.create(name) self.param.setDescription(description) self.param.setMetadata(paramTypeDef.metadata()) if not self.requiredCheck.isChecked(): self.param.setFlags( self.param.flags() | QgsProcessingParameterDefinition.FlagOptional) else: self.param.setFlags( self.param.flags() & ~QgsProcessingParameterDefinition.FlagOptional) settings = QgsSettings() settings.setValue( "/Processing/modelParametersDefinitionDialogGeometry", self.saveGeometry()) QDialog.accept(self)
def okPressed(self): description = str(self.nameTextBox.text()) if description.strip() == '': QMessageBox.warning(self, self.tr('Unable to define parameter'), self.tr('Invalid parameter name')) return if self.param is None: validChars = \ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' safeName = ''.join(c for c in description if c in validChars) name = safeName.lower() i = 2 while self.alg.parameterDefinition(name): name = safeName.lower() + str(i) i += 1 else: name = self.param.name() if (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_BOOLEAN or isinstance(self.param, QgsProcessingParameterBoolean)): self.param = QgsProcessingParameterBoolean(name, description, self.state.isChecked()) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_TABLE_FIELD or isinstance(self.param, QgsProcessingParameterField)): if self.parentCombo.currentIndex() < 0: QMessageBox.warning( self, self.tr('Unable to define parameter'), self.tr('Wrong or missing parameter values')) return parent = self.parentCombo.currentData() datatype = self.datatypeCombo.currentData() self.param = QgsProcessingParameterField( name, description, None, parent, datatype, self.multipleCheck.isChecked()) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_RASTER or isinstance(self.param, QgsProcessingParameterRasterLayer)): self.param = QgsProcessingParameterRasterLayer(name, description) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_TABLE or isinstance(self.param, QgsProcessingParameterVectorLayer)): self.param = QgsProcessingParameterVectorLayer(name, description) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_VECTOR or isinstance(self.param, QgsProcessingParameterFeatureSource)): self.param = QgsProcessingParameterFeatureSource( name, description, [self.shapetypeCombo.currentIndex() - 1]) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_MULTIPLE or isinstance(self.param, QgsProcessingParameterMultipleLayers)): self.param = QgsProcessingParameterMultipleLayers( name, description, self.datatypeCombo.currentIndex() - 1) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_NUMBER or isinstance(self.param, QgsProcessingParameterNumber)): try: self.param = QgsProcessingParameterNumber( name, description, QgsProcessingParameterNumber.Double, self.defaultTextBox.text()) vmin = self.minTextBox.text().strip() if not vmin == '': self.param.setMinimum(float(vmin)) vmax = self.maxTextBox.text().strip() if not vmax == '': self.param.setMaximum(float(vmax)) except: QMessageBox.warning( self, self.tr('Unable to define parameter'), self.tr('Wrong or missing parameter values')) return elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_EXPRESSION or isinstance(self.param, QgsProcessingParameterExpression)): parent = self.parentCombo.currentData() self.param = QgsProcessingParameterExpression( name, description, str(self.defaultEdit.expression()), parent) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_STRING or isinstance(self.param, QgsProcessingParameterString)): self.param = QgsProcessingParameterString( name, description, str(self.defaultTextBox.text())) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_EXTENT or isinstance(self.param, QgsProcessingParameterExtent)): self.param = QgsProcessingParameterExtent(name, description) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_FILE or isinstance(self.param, QgsProcessingParameterFile)): isFolder = self.fileFolderCombo.currentIndex() == 1 self.param = QgsProcessingParameterFile( name, description, QgsProcessingParameterFile.Folder if isFolder else QgsProcessingParameterFile.File) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_POINT or isinstance(self.param, QgsProcessingParameterPoint)): self.param = QgsProcessingParameterPoint( name, description, str(self.defaultTextBox.text())) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_CRS or isinstance(self.param, QgsProcessingParameterCrs)): self.param = QgsProcessingParameterCrs( name, description, self.selector.crs().authid()) if not self.requiredCheck.isChecked(): self.param.setFlags( self.param.flags() | QgsProcessingParameterDefinition.FlagOptional) self.close()
def initAlgorithm(self, config=None): self.addParameter(QgsProcessingParameterRasterLayer(self.INPUT, self.tr('Raster layer'))) self.addParameter(QgsProcessingParameterFile(self.STYLE, self.tr('Style file'), extension='qml')) self.addOutput(QgsProcessingOutputRasterLayer(self.INPUT, self.tr('Styled')))
def initAlgorithm(self, config=None): self.addParameter(QgsProcessingParameterFile( self.ILI, self.tr('Interlis model file'), optional=False)) self.addParameter(QgsProcessingParameterFileDestination( self.IMD, description="IlisMeta XML model output file"))
def initAlgorithm(self, config): currentPath = getCurrentPath(self) self.CURRENT_PATH = currentPath FULL_PATH = buildFullPathName( currentPath, nameWithOuputExtension(NAMES_INDEX['IC09'][1])) self.addParameter( QgsProcessingParameterFeatureSource( self.BLOCKS, self.tr('Manzanas'), [QgsProcessing.TypeVectorPolygon])) self.addParameter( QgsProcessingParameterField(self.DPA_MAN, self.tr('DPA Manzanas'), 'dpa_manzan', 'BLOCKS')) # self.addParameter( # QgsProcessingParameterFile( # self.CENSO_POBLACION, # self.tr('Censo población'), # extension='csv', # defaultValue="/Users/terra/llactalab/data/SHAPES_PARA_INDICADORES/Azuay_Pob_Manz.csv" # ) # ) self.addParameter( QgsProcessingParameterFile(self.CENSO_HOGAR, self.tr('Censo hogar'), extension='csv', defaultValue="")) self.addParameter( QgsProcessingParameterFile(self.CENSO_VIVIENDA, self.tr('Censo vivienda'), extension='csv', defaultValue='')) self.addParameter( QgsProcessingParameterFeatureSource( self.STUDY_AREA_GRID, self.tr(TEXT_GRID_INPUT), [QgsProcessing.TypeVectorPolygon], '', OPTIONAL_GRID_INPUT)) if OPTIONAL_GRID_INPUT: self.addParameter( QgsProcessingParameterNumber( self.CELL_SIZE, self.tr('Tamaño de la malla'), QgsProcessingParameterNumber.Integer, P_CELL_SIZE, False, 1, 99999999)) # self.addParameter( # QgsProcessingParameterNumber( # self.NUMBER_HABITANTS, # self.tr('Por cada número de habitantes'), # QgsProcessingParameterNumber.Integer, # 100000, False, 1, 99999999 # ) # ) self.addParameter( QgsProcessingParameterFeatureSink( self.OUTPUT, self.tr('Salida'), QgsProcessing.TypeVectorAnyGeometry, str(FULL_PATH)))
def initAlgorithm(self, config=None): """! Inputs and output of the algorithm """ project = QgsProject.instance() # Get project crs project_crs = project.crs() # Check if project crs changed prev_project_crs_desc, _ = project.readEntry("qgis2fds", "project_crs", None) project_crs_changed = False if prev_project_crs_desc != project_crs.description(): project_crs_changed = True defaultValue, _ = project.readEntry("qgis2fds", "chid", "terrain") self.addParameter( QgsProcessingParameterString( "chid", "FDS case identificator (CHID)", multiLine=False, defaultValue=defaultValue, )) defaultValue, _ = project.readEntry( "qgis2fds", "path", QgsProject.instance().readPath("./")) self.addParameter( QgsProcessingParameterFile( "path", "Save in folder", behavior=QgsProcessingParameterFile.Folder, fileFilter="All files (*.*)", defaultValue=defaultValue, )) # QGIS issue #37447, solved in QGIS 3.14.1 defaultValue, _ = project.readEntry("qgis2fds", "extent", None) self.addParameter( QgsProcessingParameterExtent( "extent", "Terrain extent", defaultValue=defaultValue, )) defaultValue, _ = project.readEntry("qgis2fds", "dem_layer", None) if not defaultValue: try: # first layer name containing "dem" defaultValue = [ layer.name() for layer in QgsProject.instance().mapLayers().values() if "DEM" in layer.name() or "dem" in layer.name() ][0] except IndexError: pass self.addParameter( QgsProcessingParameterRasterLayer( "dem_layer", "DEM layer", defaultValue=defaultValue, )) defaultValue, _ = project.readEntry("qgis2fds", "dem_sampling", "1") param = QgsProcessingParameterNumber( "dem_sampling", "DEM layer sampling factor", defaultValue=defaultValue, minValue=1, ) self.addParameter(param) param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) defaultValue, _ = project.readEntry("qgis2fds", "landuse_layer", None) self.addParameter( QgsProcessingParameterRasterLayer( "landuse_layer", "Landuse layer (if not set, landuse is not exported)", optional=True, defaultValue=defaultValue, )) defaultValue, _ = project.readNumEntry("qgis2fds", "landuse_type", 0) self.addParameter( QgsProcessingParameterEnum( "landuse_type", "Landuse layer type", options=fds.landuse_types, allowMultiple=False, defaultValue=defaultValue, )) if project_crs_changed: defaultValue = None else: defaultValue, _ = project.readEntry("qgis2fds", "origin", None) param = QgsProcessingParameterPoint( "origin", "Domain origin (if not set, use Terrain Extent centroid)", optional=True, defaultValue=defaultValue, ) self.addParameter(param) param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) if project_crs_changed: defaultValue = None else: defaultValue, _ = project.readEntry("qgis2fds", "fire_origin", None) param = QgsProcessingParameterPoint( "fire_origin", "Fire origin (if not set, use Domain Origin)", optional=True, defaultValue=defaultValue, ) self.addParameter(param) param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) defaultValue, _ = project.readEntry("qgis2fds", "tex_layer", None) param = QgsProcessingParameterRasterLayer( "tex_layer", "Texture layer (if not set, current view is exported)", optional=True, defaultValue=defaultValue, ) self.addParameter(param) param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) defaultValue, _ = project.readNumEntry("qgis2fds", "tex_pixel_size", 5) param = QgsProcessingParameterNumber( "tex_pixel_size", "Texture layer pixels size (in meters)", type=QgsProcessingParameterNumber.Double, defaultValue=defaultValue, minValue=0.1, ) self.addParameter(param) param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) param = QgsProcessingParameterFeatureSink( "sampling_layer", "Sampling grid output layer", type=QgsProcessing.TypeVectorAnyGeometry, createByDefault=True, defaultValue=None, ) self.addParameter(param)