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_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_NUMBER or isinstance(self.param, (QgsProcessingParameterNumber, QgsProcessingParameterDistance))): 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 == 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()) 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) settings = QgsSettings() settings.setValue("/Processing/modelParametersDefinitionDialogGeometry", self.saveGeometry()) QDialog.accept(self)
def initAlgorithm(self, config): x_min = -100e3 x_max = 200e3 y_min = -150e3 y_max = 150e3 dx = 750 dy = 750 x0 = -25e3 y0 = 0.0 sigma_x = 15e3 sigma_y = 15e3 self.addParameter( QgsProcessingParameterCrs(self.TARGET_CRS, self.tr('Target CRS'), 'ProjectCrs')) self.addParameter( QgsProcessingParameterExtent( self.EXTENT, self.tr('Extent'), "{}, {}, {}, {}".format(x_min, x_max, y_min, y_max))) self.addParameter( QgsProcessingParameterNumber(self.DX, self.tr("Grid spacing (dx, meters)"), QgsProcessingParameterNumber.Double, defaultValue=dx, minValue=0.0)) self.addParameter( QgsProcessingParameterNumber(self.DY, self.tr("Grid spacing (dy, meters)"), QgsProcessingParameterNumber.Double, defaultValue=dy, minValue=0.0)) self.addParameter( QgsProcessingParameterPoint(self.CENTER, self.tr("Center"), "{}, {}".format(x0, y0))) s_x = QgsProcessingParameterNumber( self.SIGMA_X, self.tr("Spread in the X direction (sigma_x)"), QgsProcessingParameterNumber.Double, defaultValue=sigma_x, minValue=0.0) s_x.setFlags(s_x.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(s_x) s_y = QgsProcessingParameterNumber( self.SIGMA_Y, self.tr("Spread in the Y direction (sigma_y)"), QgsProcessingParameterNumber.Double, defaultValue=sigma_y, minValue=0.0) s_y.setFlags(s_y.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(s_y) self.addParameter( QgsProcessingParameterRasterDestination(self.OUTPUT, self.tr('Testing DEM')))
def initAlgorithm(self, config=None): self.DIRECTIONS = OrderedDict([ (self.tr('Forward direction'), QgsVectorLayerDirector.DirectionForward), (self.tr('Backward direction'), QgsVectorLayerDirector.DirectionBackward), (self.tr('Both directions'), QgsVectorLayerDirector.DirectionBoth) ]) self.STRATEGIES = [self.tr('Shortest'), self.tr('Fastest')] self.addParameter( QgsProcessingParameterFeatureSource( self.INPUT, self.tr('Vector layer representing network'), [QgsProcessing.TypeVectorLine])) self.addParameter( QgsProcessingParameterPoint(self.START_POINT, self.tr('Start point'))) self.addParameter( QgsProcessingParameterFeatureSource( self.END_POINTS, self.tr('Vector layer with end points'), [QgsProcessing.TypeVectorPoint])) self.addParameter( QgsProcessingParameterEnum(self.STRATEGY, self.tr('Path type to calculate'), self.STRATEGIES, defaultValue=0)) params = [] params.append( QgsProcessingParameterField(self.DIRECTION_FIELD, self.tr('Direction field'), None, self.INPUT, optional=True)) params.append( QgsProcessingParameterString( self.VALUE_FORWARD, self.tr('Value for forward direction'), optional=True)) params.append( QgsProcessingParameterString( self.VALUE_BACKWARD, self.tr('Value for backward direction'), optional=True)) params.append( QgsProcessingParameterString(self.VALUE_BOTH, self.tr('Value for both directions'), optional=True)) params.append( QgsProcessingParameterEnum(self.DEFAULT_DIRECTION, self.tr('Default direction'), list(self.DIRECTIONS.keys()), defaultValue=2)) params.append( QgsProcessingParameterField(self.SPEED_FIELD, self.tr('Speed field'), None, self.INPUT, optional=True)) params.append( QgsProcessingParameterNumber(self.DEFAULT_SPEED, self.tr('Default speed (km/h)'), QgsProcessingParameterNumber.Double, 5.0, False, 0, 99999999.99)) params.append( QgsProcessingParameterNumber(self.TOLERANCE, self.tr('Topology tolerance'), QgsProcessingParameterNumber.Double, 0.0, False, 0, 99999999.99)) for p in params: p.setFlags(p.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(p) self.addParameter( QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr('Shortest path'), QgsProcessing.TypeVectorLine))
def initAlgorithm(self, config=None): self.DIRECTIONS = OrderedDict([ (self.tr('Forward direction'), QgsVectorLayerDirector.DirectionForward), (self.tr('Backward direction'), QgsVectorLayerDirector.DirectionBackward), (self.tr('Both directions'), QgsVectorLayerDirector.DirectionBoth)]) self.STRATEGIES = [self.tr('Shortest Path (distance optimization)'), self.tr('Fastest Path (time optimization)') ] self.ENTRY_COST_CALCULATION_METHODS = [self.tr('Ellipsoidal'), self.tr('Planar (only use with projected CRS)')] self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT, self.tr('Network Layer'), [QgsProcessing.TypeVectorLine])) self.addParameter(QgsProcessingParameterPoint(self.START_POINT, self.tr('Start Point'))) self.addParameter(QgsProcessingParameterNumber(self.MAX_DIST, self.tr('Size of Iso-Area (distance or seconds depending on strategy)'), QgsProcessingParameterNumber.Double, 2500.0, False, 0, 99999999.99)) self.addParameter(QgsProcessingParameterEnum(self.STRATEGY, self.tr('Optimization Criterion'), self.STRATEGIES, defaultValue=0)) params = [] params.append(QgsProcessingParameterEnum(self.ENTRY_COST_CALCULATION_METHOD, self.tr('Entry Cost calculation method'), self.ENTRY_COST_CALCULATION_METHODS, defaultValue=0)) params.append(QgsProcessingParameterField(self.DIRECTION_FIELD, self.tr('Direction field'), None, self.INPUT, optional=True)) params.append(QgsProcessingParameterString(self.VALUE_FORWARD, self.tr('Value for forward direction'), optional=True)) params.append(QgsProcessingParameterString(self.VALUE_BACKWARD, self.tr('Value for backward direction'), optional=True)) params.append(QgsProcessingParameterString(self.VALUE_BOTH, self.tr('Value for both directions'), optional=True)) params.append(QgsProcessingParameterEnum(self.DEFAULT_DIRECTION, self.tr('Default direction'), list(self.DIRECTIONS.keys()), defaultValue=2)) params.append(QgsProcessingParameterField(self.SPEED_FIELD, self.tr('Speed field'), None, self.INPUT, optional=True)) params.append(QgsProcessingParameterNumber(self.DEFAULT_SPEED, self.tr('Default speed (km/h)'), QgsProcessingParameterNumber.Double, 5.0, False, 0, 99999999.99)) params.append(QgsProcessingParameterNumber(self.TOLERANCE, self.tr('Topology tolerance'), QgsProcessingParameterNumber.Double, 0.0, False, 0, 99999999.99)) for p in params: p.setFlags(p.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(p) self.addParameter(QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr('Output Pointcloud'), QgsProcessing.TypeVectorPoint))
def initAlgorithm(self, config=None): self.DIRECTIONS = OrderedDict([ (self.tr('Forward direction'), QgsVectorLayerDirector.DirectionForward), (self.tr('Backward direction'), QgsVectorLayerDirector.DirectionBackward), (self.tr('Both directions'), QgsVectorLayerDirector.DirectionBoth)]) self.STRATEGIES = [self.tr('Shortest'), self.tr('Fastest') ] self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT, self.tr('Vector layer representing network'), [QgsProcessing.TypeVectorLine])) self.addParameter(QgsProcessingParameterPoint(self.START_POINT, self.tr('Start point'))) self.addParameter(QgsProcessingParameterEnum(self.STRATEGY, self.tr('Path type to calculate'), self.STRATEGIES, defaultValue=0)) self.addParameter(QgsProcessingParameterNumber(self.TRAVEL_COST, self.tr('Travel cost (distance for "Shortest", time for "Fastest")'), QgsProcessingParameterNumber.Double, 0.0, False, 0, 99999999.99)) params = [] params.append(QgsProcessingParameterField(self.DIRECTION_FIELD, self.tr('Direction field'), None, self.INPUT, optional=True)) params.append(QgsProcessingParameterString(self.VALUE_FORWARD, self.tr('Value for forward direction'), optional=True)) params.append(QgsProcessingParameterString(self.VALUE_BACKWARD, self.tr('Value for backward direction'), optional=True)) params.append(QgsProcessingParameterString(self.VALUE_BOTH, self.tr('Value for both directions'), optional=True)) params.append(QgsProcessingParameterEnum(self.DEFAULT_DIRECTION, self.tr('Default direction'), list(self.DIRECTIONS.keys()), defaultValue=2)) params.append(QgsProcessingParameterField(self.SPEED_FIELD, self.tr('Speed field'), None, self.INPUT, optional=True)) params.append(QgsProcessingParameterNumber(self.DEFAULT_SPEED, self.tr('Default speed (km/h)'), QgsProcessingParameterNumber.Double, 5.0, False, 0, 99999999.99)) params.append(QgsProcessingParameterNumber(self.TOLERANCE, self.tr('Topology tolerance'), QgsProcessingParameterNumber.Double, 0.0, False, 0, 99999999.99)) params.append(QgsProcessingParameterBoolean(self.INCLUDE_BOUNDS, self.tr('Include upper/lower bound points'), defaultValue=False)) for p in params: p.setFlags(p.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(p) lines_output = QgsProcessingParameterFeatureSink(self.OUTPUT_LINES, self.tr('Service area (lines)'), QgsProcessing.TypeVectorLine, optional=True) lines_output.setCreateByDefault(True) self.addParameter(lines_output) nodes_output = QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr('Service area (boundary nodes)'), QgsProcessing.TypeVectorPoint, optional=True) nodes_output.setCreateByDefault(False) self.addParameter(nodes_output)
def initAlgorithm(self, config=None): self.DIRECTIONS = OrderedDict([ (self.tr('Forward direction'), QgsVectorLayerDirector.DirectionForward), (self.tr('Backward direction'), QgsVectorLayerDirector.DirectionBackward), (self.tr('Both directions'), QgsVectorLayerDirector.DirectionBoth) ]) self.STRATEGIES = [ self.tr('Shortest distance'), self.tr('Fastest time') ] self.addParameter( QgsProcessingParameterFeatureSource( self.INPUT, self.tr('Network Layer'), [QgsProcessing.TypeVectorLine])) self.addParameter( QgsProcessingParameterPoint(self.START_POINT, self.tr('Start point'))) self.addParameter( QgsProcessingParameterNumber( self.MAX_DIST, self.tr('Maximum cost level of Iso-Area'), QgsProcessingParameterNumber.Double, 2500.0, False, 0, 99999999.99)) self.addParameter( QgsProcessingParameterNumber( self.CELL_SIZE, self.tr('Cellsize of interpolation raster'), QgsProcessingParameterNumber.Integer, 10, False, 1, 99999999)) self.addParameter( QgsProcessingParameterEnum(self.STRATEGY, self.tr('Path type to calculate'), self.STRATEGIES, defaultValue=0)) params = [] params.append( QgsProcessingParameterField(self.DIRECTION_FIELD, self.tr('Direction field'), None, self.INPUT, optional=True)) params.append( QgsProcessingParameterString( self.VALUE_FORWARD, self.tr('Value for forward direction'), optional=True)) params.append( QgsProcessingParameterString( self.VALUE_BACKWARD, self.tr('Value for backward direction'), optional=True)) params.append( QgsProcessingParameterString(self.VALUE_BOTH, self.tr('Value for both directions'), optional=True)) params.append( QgsProcessingParameterEnum(self.DEFAULT_DIRECTION, self.tr('Default direction'), list(self.DIRECTIONS.keys()), defaultValue=2)) params.append( QgsProcessingParameterField(self.SPEED_FIELD, self.tr('Speed field (km/h)'), None, self.INPUT, optional=True)) params.append( QgsProcessingParameterNumber(self.DEFAULT_SPEED, self.tr('Default speed (km/h)'), QgsProcessingParameterNumber.Double, 5.0, False, 0, 99999999.99)) params.append( QgsProcessingParameterNumber(self.TOLERANCE, self.tr('Topology tolerance'), QgsProcessingParameterNumber.Double, 0.00001, False, 0, 99999999.99)) for p in params: p.setFlags(p.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(p) self.addParameter( QgsProcessingParameterRasterDestination( self.OUTPUT, self.tr('Output Interpolation')))
def initAlgorithm(self, config=None): self.addParameter( QgsProcessingParameterRasterLayer(self.INPUT, self.tr('Input layer'))) self.addParameter( QgsProcessingParameterBand(self.BAND, self.tr('Band number'), 1, parentLayerParameterName=self.INPUT)) self.addParameter( QgsProcessingParameterPoint(self.OBSERVER, self.tr('Observer location'))) self.addParameter( QgsProcessingParameterNumber( self.OBSERVER_HEIGHT, self.tr('Observer height, DEM units'), type=QgsProcessingParameterNumber.Double, minValue=0.0, defaultValue=1.0)) self.addParameter( QgsProcessingParameterNumber( self.TARGET_HEIGHT, self.tr('Target height, DEM units'), type=QgsProcessingParameterNumber.Double, minValue=0.0, defaultValue=1.0)) self.addParameter( QgsProcessingParameterDistance( self.MAX_DISTANCE, self.tr( 'Maximum distance from observer to compute visibility'), parentParameterName=self.INPUT, minValue=0.0, defaultValue=100.0)) options_param = QgsProcessingParameterString( self.OPTIONS, self.tr('Additional creation options'), defaultValue='', optional=True) options_param.setFlags(options_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) options_param.setMetadata({ 'widget_wrapper': { 'class': 'processing.algs.gdal.ui.RasterOptionsWidget.RasterOptionsWidgetWrapper' } }) self.addParameter(options_param) extra_param = QgsProcessingParameterString( self.EXTRA, self.tr('Additional command-line parameters'), defaultValue=None, optional=True) extra_param.setFlags(extra_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(extra_param) self.addParameter( QgsProcessingParameterRasterDestination(self.OUTPUT, self.tr('Output')))
def initAlgorithm(self, configuration, p_str=None, Any=None, *args, **kwargs): providers = [provider['name'] for provider in configmanager.read_config()['providers']] self.addParameter( QgsProcessingParameterEnum( self.IN_PROVIDER, "Provider", providers, defaultValue=providers[0] ) ) self.addParameter( QgsProcessingParameterPoint( name=self.IN_POINT, description="Input Point from map canvas (mutually exclusive with layer option)", optional=True ) ) self.addParameter( QgsProcessingParameterEnum( self.IN_PROFILE, "Travel mode", PROFILES, defaultValue=PROFILES[0] ) ) self.addParameter( QgsProcessingParameterEnum( name=self.IN_METRIC, description="Dimension", options=DIMENSIONS, defaultValue=DIMENSIONS[0] ) ) self.addParameter( QgsProcessingParameterString( name=self.IN_RANGES, description="Comma-separated ranges [mins or m]", defaultValue="5, 10" ) ) self.addParameter( QgsProcessingParameterString( name=self.IN_INTERVAL, description="Interval range in seconds or meters", optional=True ) ) self.addParameter( QgsProcessingParameterString( name=self.IN_SMOOTH, description="Applies a level of generalisation to the isochrone polygons generated as a smoothing_factor between 0 and 100.0", optional=True ) ) self.addParameter( QgsProcessingParameterFeatureSink( name=self.OUT, description="Isochrones", createByDefault=False ) )
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): """! 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)