def initAlgorithm(self, config=None): self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT, self.tr('Input layer'), [QgsProcessing.TypeVectorLine])) self.addParameter(QgsProcessingParameterString(self.GEOMETRY, self.tr('Geometry column name'), defaultValue='geometry')) self.addParameter(QgsProcessingParameterNumber(self.DISTANCE, self.tr('Distance from line start represented as fraction of line length'), type=QgsProcessingParameterNumber.Double, minValue=0, maxValue=1, defaultValue=0.5)) options_param = QgsProcessingParameterString(self.OPTIONS, self.tr('Additional creation options'), defaultValue='', optional=True) options_param.setFlags(options_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(options_param) self.addParameter(QgsProcessingParameterVectorDestination(self.OUTPUT, self.tr('Points along lines'), QgsProcessing.TypeVectorPoint))
def initAlgorithm(self, config=None): """ Here we define the inputs and output of the algorithm, along with some other properties. """ # We add the input vector features source. It can have any kind of # geometry. self.addParameter( QgsProcessingParameterFeatureSource( self.INPUT, self.tr('Input layer'), [QgsProcessing.TypeVectorLine])) self.addParameter( QgsProcessingParameterNumber(self.INPUT_CELLSIZE, self.tr("Input Cell Size"), QgsProcessingParameterNumber.Double, 1000)) self.addParameter( QgsProcessingParameterVectorDestination( self.OUTPUT, self.tr('Output Density Grid'), ))
def initAlgorithm(self, config=None): self.addParameter( QgsProcessingParameterFeatureSource( self.INPUT, self.tr('Input layer'), types=[QgsProcessing.TypeVectorAnyGeometry])) self.addParameter( QgsProcessingParameterFeatureSource( self.LINE, self.tr('Line layer'), types=[QgsProcessing.TypeVectorLine])) self.addParameter( QgsProcessingParameterNumber( self.CELL_SIZE, self.tr('Cell size for rasterizing line layer'), defaultValue=30, type=QgsProcessingParameterNumber.Double)) self.addParameter( QgsProcessingParameterEnum(self.METHOD, self.tr('Distance method'), options=[m[1] for m in self.method], defaultValue=0)) self.addParameter( QgsProcessingParameterEnum( self.DATA_TYPE, self.tr('Output data type'), options=[dtype[1] for dtype in self.data_type], defaultValue=1)) self.addParameter( QgsProcessingParameterString( name=self.OUTPUT_COLUMN, description=self.tr('Output column name'), )) self.addParameter( QgsProcessingParameterVectorDestination(self.OUTPUT, self.tr('Output layer')))
def initAlgorithm(self, config=None): """ Here we define the inputs and output of the algorithm, along with some other properties. """ # We add the input vector features source. It can have any kind of # geometry. self.addParameter( QgsProcessingParameterFeatureSource( self.INPUT, self.tr('Input layer (connection)'), [QgsProcessing.TypeVectorPolygon])) # We add a feature sink in which to store our processed features (this # usually takes the form of a newly created vector layer when the # algorithm is run in QGIS). self.addParameter( QgsProcessingParameterVectorDestination(self.OUTPUT, self.tr('Output layer'))) self.addParameter( QgsProcessingParameterString(self.TABLE, self.tr('Table'), defaultValue=''))
def initAlgorithm(self, config=None, clip_flag=False, out_sink=True): self.addParameter( QgsProcessingParameterFeatureSource( self.INPUT, self.tr("Input layer"), [QgsProcessing.TypeVectorPolygon])) self.addParameter( QgsProcessingParameterFeatureSource( self.REPORTING, self.tr("Reporting layer"), [QgsProcessing.TypeVectorPolygon])) self.addParameter( QgsProcessingParameterCrs(self.CRS, description=self.tr("Output CRS"), defaultValue=params.defaultCrs)) self.addParameter( QgsProcessingParameterBoolean( self.INCLUDE_CBC, self.tr("Include Cross-boundary connection metrics"))) self.addParameter( QgsProcessingParameterEnum( self.UNIT, description=self.tr("Report areas unit"), options=self.getUnitOptions())) if clip_flag: self.addParameter( QgsProcessingParameterBoolean( self.CLIP_FLAG, self.tr("Clip input layer at reporting boundaries"), defaultValue=False)) if out_sink: self.addParameter( QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr("Output layer"))) else: self.addParameter( QgsProcessingParameterVectorDestination( self.OUTPUT, self.tr("Output layer")))
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 validChars = \ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' safeName = ''.join(c for c in description if c in validChars) name = safeName.lower() # Destination parameter if (isinstance(self.param, QgsProcessingParameterFeatureSink)): self.param = QgsProcessingParameterFeatureSink( name=name, description=description, type=self.param.dataType(), defaultValue=self.defaultWidget.value()) elif (isinstance(self.param, QgsProcessingParameterFileDestination)): self.param = QgsProcessingParameterFileDestination( name=name, description=description, fileFilter=self.param.fileFilter(), defaultValue=self.defaultWidget.value()) elif (isinstance(self.param, QgsProcessingParameterFolderDestination)): self.param = QgsProcessingParameterFolderDestination( name=name, description=description, defaultValue=self.defaultWidget.value()) elif (isinstance(self.param, QgsProcessingParameterRasterDestination)): self.param = QgsProcessingParameterRasterDestination( name=name, description=description, defaultValue=self.defaultWidget.value()) elif (isinstance(self.param, QgsProcessingParameterVectorDestination)): self.param = QgsProcessingParameterVectorDestination( name=name, description=description, type=self.param.dataType(), defaultValue=self.defaultWidget.value()) 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) if self.advancedCheck.isChecked(): self.param.setFlags( self.param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) else: self.param.setFlags( self.param.flags() & ~QgsProcessingParameterDefinition.FlagAdvanced) settings = QgsSettings() settings.setValue( "/Processing/modelParametersDefinitionDialogGeometry", self.saveGeometry()) QDialog.accept(self)
def initAlgorithm(self, config=None): self.cap_styles = [self.tr('Round'), 'Flat', 'Square'] self.addParameter( QgsProcessingParameterFeatureSource( self.ROADS, self.tr('Roads layer'), [QgsProcessing.TypeVectorLine])) self.addParameter( QgsProcessingParameterExpression( self.SELECT_EXPR, self.tr( 'Expression to select features (all features if empty)'), defaultValue=RoadsExtentGrpAlg.DEFAULT_EXPR, optional=True, parentLayerParameterName=self.ROADS)) self.addParameter( QgsProcessingParameterExpression( self.BUFFER_EXPR, self.tr('Roads buffer value'), defaultValue=self.DEFAULT_BUFFER_EXPR, parentLayerParameterName=self.ROADS)) self.addParameter( QgsProcessingParameterEnum(self.END_CAP_STYLE, self.tr('End cap style'), options=self.cap_styles, defaultValue=0)) # Join parameters self.addParameter( QgsProcessingParameterBoolean(self.DISSOLVE, self.tr('Join roads by name'), defaultValue=True)) paramNameField = QgsProcessingParameterField( self.NAME_FIELD, self.tr('Roads name field'), defaultValue=self.DEFAULT_NAME_FIELD, parentLayerParameterName=self.ROADS) # paramIncludeNull = self.addParameter( # QgsProcessingParameterBoolean( # self.INCLUDE_NULL, # self.tr('Include roads with NULL name'), # defaultValue=True)) paramJoinExpr = QgsProcessingParameterExpression( self.JOIN_EXPR, self.tr('Expression to select entities to join'), defaultValue=self.DEFAULT_JOIN_EXPR, parentLayerParameterName=self.ROADS) paramsJoin = [paramNameField, paramJoinExpr] for param in paramsJoin: param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(param) # self.addParameter( # QgsProcessingParameterMultipleLayers( # self.POLYGON_LAYERS, # self.tr('Polygon layers to include'), # layerType=QgsProcessing.TypeVectorPolygon, # optional=True)) self.addParameter( QgsProcessingParameterVectorDestination(self.OUTPUT, self.tr('Output layer'))) self.addParameter( QgsProcessingParameterVectorDestination(self.OUTPUT_LINEAR, self.tr('Linear output'), optional=True))
def initAlgorithm(self, config): #분석지역 self.addParameter( QgsProcessingParameterFeatureSource( self.IN_SITE, '❖ ' + self.tr('Analysis Site'), [QgsProcessing.TypeVectorPolygon], optional=False)) # # 세생활권 인구 레이어 # self.addParameter( # QgsProcessingParameterFeatureSource( # self.IN_LIVINGAREA, # '❖ ' + self.tr('Sub-Neighborhood Unit'), # [QgsProcessing.TypeVectorPolygon], # optional=debugging) # ) # 세생활권 인구 레이어 self.addParameter( QgsProcessingParameterNumber( self.IN_LIVINGAREA, # "❖ " + self.tr('Facility Effective Service Coverage : If you input 0, it is regarded as the whole area'), "❖ " + self.tr('Sub-Neighborhood Unit(m)'), QgsProcessingParameterNumber.Integer, 200, False, 10, 10000) # 디폴트, 옵션, 미니멈, 맥시멈 ) # 기존 SOC 시설 레이어 self.addParameter( QgsProcessingParameterFeatureSource( self.IN_CURSOC, '❖ ' + self.tr('Located Neighborhood Facility'), [QgsProcessing.TypeVectorPoint], optional=False)) # 거주 인구 레이어 self.addParameter( QgsProcessingParameterFeatureSource( self.IN_POP, '❖ ' + self.tr('Resident Population'), [QgsProcessing.TypeVectorPoint], optional=False)) # 인구 필드 self.addParameter( QgsProcessingParameterField(self.IN_POP_CNTFID, self.tr('Population Field'), None, self.IN_POP, QgsProcessingParameterField.Numeric, optional=False)) # 거리 조날 self.addParameter( QgsProcessingParameterNumber( self.IN_LIMIT_DIST, # "❖ " + self.tr('Facility Effective Service Coverage : If you input 0, it is regarded as the whole area'), "❖ " + self.tr('Facility Effective Service Coverage'), QgsProcessingParameterNumber.Integer, 1000, False, 0, 1000000) #디폴트, 옵션, 미니멈, 맥시멈 ) # 등급 self.addParameter( QgsProcessingParameterNumber(self.IN_CALSSIFYNUM, '❖ ' + self.tr( 'Analysis result grade number of sections: configurable range (2 ~ 100)' ), QgsProcessingParameterNumber.Integer, 10, False, 2, 100) # 디폴트, 옵션, 미니멈, 맥시멈 ) # 최종 결과 self.addParameter( QgsProcessingParameterVectorDestination( self.OUTPUT, self.tr('Accessibility Analysis Results(Euclidean)')))
def initAlgorithm(self, config=None): self.addParameter( QgsProcessingParameterFeatureSource( self.INPUT, self.tr('Input layer'), types=[QgsProcessing.TypeVectorAnyGeometry] ) ) self.addParameter( QgsProcessingParameterFeatureSource( self.INTERPOLATE, self.tr('Interpolation layer'), types=[QgsProcessing.TypeVectorAnyGeometry] ) ) self.addParameter( QgsProcessingParameterField( self.INTERPOLATE_FIELD, self.tr('Interpolating field'), parentLayerParameterName=self.INTERPOLATE, type=QgsProcessingParameterField.Numeric ) ) power = QgsProcessingParameterNumber( self.POWER, self.tr('Power parameter for interpolation'), type=QgsProcessingParameterNumber.Double, defaultValue=2, optional=True ) power.setMetadata({ 'widget_wrapper': { 'decimals': 2 } }) self.addParameter(power) self.addParameter( QgsProcessingParameterNumber( self.NUMBER_NEIGHBOR, self.tr('Number of neighbors'), type=QgsProcessingParameterNumber.Integer, defaultValue=12, optional=True ) ) search_radius = QgsProcessingParameterDistance( self.SEARCH_RADIUS, self.tr('Search radius'), defaultValue=None, parentParameterName=self.INTERPOLATE, optional=True ) search_radius.setMetadata({ 'widget_wrapper': { 'decimals': 2 } }) self.addParameter(search_radius) self.addParameter( QgsProcessingParameterEnum( self.DATA_TYPE, self.tr('Output data type'), options=[dtype[1] for dtype in self.data_type], defaultValue=1, optional=True ) ) self.addParameter( QgsProcessingParameterString( name=self.OUTPUT_FIELD, description=self.tr('Output field name'), ) ) self.addParameter( QgsProcessingParameterVectorDestination( self.OUTPUT, self.tr('Output layer') ) )
class ModelerParameterDefinitionDialog(QDialog): def __init__(self, alg, paramType=None, param=None): self.alg = alg self.paramType = paramType self.param = param QDialog.__init__(self) self.setModal(True) self.setupUi() settings = QgsSettings() self.restoreGeometry( settings.value( "/Processing/modelParametersDefinitionDialogGeometry", QByteArray())) def closeEvent(self, event): settings = QgsSettings() settings.setValue( "/Processing/modelParametersDefinitionDialogGeometry", self.saveGeometry()) super(ModelerParameterDefinitionDialog, self).closeEvent(event) def setupUi(self): self.setWindowTitle(self.tr('Parameter Definition')) self.setMinimumWidth(300) self.verticalLayout = QVBoxLayout(self) self.verticalLayout.setMargin(20) self.label = QLabel(self.tr('Parameter name')) self.verticalLayout.addWidget(self.label) self.nameTextBox = QLineEdit() self.verticalLayout.addWidget(self.nameTextBox) if isinstance(self.param, QgsProcessingParameterDefinition): self.nameTextBox.setText(self.param.description()) if self.paramType == parameters.PARAMETER_BOOLEAN or \ isinstance(self.param, QgsProcessingParameterBoolean): self.state = QCheckBox() self.state.setText(self.tr('Checked')) self.state.setChecked(False) if self.param is not None: self.state.setChecked(bool(self.param.defaultValue())) self.verticalLayout.addWidget(self.state) elif self.paramType == parameters.PARAMETER_TABLE_FIELD or \ isinstance(self.param, QgsProcessingParameterField): self.verticalLayout.addWidget(QLabel(self.tr('Parent layer'))) self.parentCombo = QComboBox() idx = 0 for param in list(self.alg.parameterComponents().values()): definition = self.alg.parameterDefinition( param.parameterName()) if isinstance(definition, (QgsProcessingParameterFeatureSource, QgsProcessingParameterVectorLayer)): self.parentCombo.addItem(definition.description(), definition.name()) if self.param is not None: if self.param.parentLayerParameterName( ) == definition.name(): self.parentCombo.setCurrentIndex(idx) idx += 1 self.verticalLayout.addWidget(self.parentCombo) # add the datatype selector self.verticalLayout.addWidget(QLabel(self.tr('Allowed data type'))) self.datatypeCombo = QComboBox() self.datatypeCombo.addItem(self.tr('Any'), -1) self.datatypeCombo.addItem(self.tr('Number'), 0) self.datatypeCombo.addItem(self.tr('String'), 1) self.datatypeCombo.addItem(self.tr('Date/time'), 2) self.verticalLayout.addWidget(self.datatypeCombo) if self.param is not None and self.param.dataType() is not None: # QComboBoxes indexes start at 0, # self.param.datatype start with -1 that is why I need to do +1 datatypeIndex = self.param.dataType() + 1 self.datatypeCombo.setCurrentIndex(datatypeIndex) self.multipleCheck = QCheckBox() self.multipleCheck.setText(self.tr('Accept multiple fields')) self.multipleCheck.setChecked(False) if self.param is not None: self.multipleCheck.setChecked(self.param.allowMultiple()) self.verticalLayout.addWidget(self.multipleCheck) self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultTextBox = QLineEdit() self.defaultTextBox.setToolTip( self. tr('Default field name, or ; separated list of field names for multiple field parameters' )) if self.param is not None: default = self.param.defaultValue() if default is not None: self.defaultTextBox.setText(str(default)) self.verticalLayout.addWidget(self.defaultTextBox) elif self.paramType == parameters.PARAMETER_BAND or \ isinstance(self.param, QgsProcessingParameterBand): self.verticalLayout.addWidget(QLabel(self.tr('Parent layer'))) self.parentCombo = QComboBox() idx = 0 for param in list(self.alg.parameterComponents().values()): definition = self.alg.parameterDefinition( param.parameterName()) if isinstance(definition, (QgsProcessingParameterRasterLayer)): self.parentCombo.addItem(definition.description(), definition.name()) if self.param is not None: if self.param.parentLayerParameterName( ) == definition.name(): self.parentCombo.setCurrentIndex(idx) idx += 1 self.verticalLayout.addWidget(self.parentCombo) elif (self.paramType in (parameters.PARAMETER_VECTOR, parameters.PARAMETER_TABLE) or isinstance(self.param, (QgsProcessingParameterFeatureSource, QgsProcessingParameterVectorLayer))): self.verticalLayout.addWidget(QLabel(self.tr('Geometry type'))) self.shapetypeCombo = QComboBox() self.shapetypeCombo.addItem(self.tr('Geometry Not Required'), QgsProcessing.TypeVector) self.shapetypeCombo.addItem(self.tr('Point'), QgsProcessing.TypeVectorPoint) self.shapetypeCombo.addItem(self.tr('Line'), QgsProcessing.TypeVectorLine) self.shapetypeCombo.addItem(self.tr('Polygon'), QgsProcessing.TypeVectorPolygon) self.shapetypeCombo.addItem(self.tr('Any Geometry Type'), QgsProcessing.TypeVectorAnyGeometry) if self.param is not None: self.shapetypeCombo.setCurrentIndex( self.shapetypeCombo.findData(self.param.dataTypes()[0])) self.verticalLayout.addWidget(self.shapetypeCombo) elif (self.paramType == parameters.PARAMETER_MULTIPLE or isinstance(self.param, QgsProcessingParameterMultipleLayers)): self.verticalLayout.addWidget(QLabel(self.tr('Data type'))) self.datatypeCombo = QComboBox() self.datatypeCombo.addItem(self.tr('Any Map Layer'), QgsProcessing.TypeMapLayer) self.datatypeCombo.addItem( self.tr('Vector (No Geometry Required)'), QgsProcessing.TypeVector) self.datatypeCombo.addItem(self.tr('Vector (Point)'), QgsProcessing.TypeVectorPoint) self.datatypeCombo.addItem(self.tr('Vector (Line)'), QgsProcessing.TypeVectorLine) self.datatypeCombo.addItem(self.tr('Vector (Polygon)'), QgsProcessing.TypeVectorPolygon) self.datatypeCombo.addItem(self.tr('Vector (Any Geometry Type)'), QgsProcessing.TypeVectorAnyGeometry) self.datatypeCombo.addItem(self.tr('Raster'), QgsProcessing.TypeRaster) self.datatypeCombo.addItem(self.tr('File'), QgsProcessing.TypeFile) if self.param is not None: self.datatypeCombo.setCurrentIndex( self.datatypeCombo.findData(self.param.layerType())) self.verticalLayout.addWidget(self.datatypeCombo) elif (self.paramType == parameters.PARAMETER_NUMBER or self.paramType == parameters.PARAMETER_DISTANCE or isinstance(self.param, (QgsProcessingParameterNumber, QgsProcessingParameterDistance))): self.verticalLayout.addWidget(QLabel(self.tr('Min value'))) self.minTextBox = QLineEdit() self.verticalLayout.addWidget(self.minTextBox) self.verticalLayout.addWidget(QLabel(self.tr('Max value'))) self.maxTextBox = QLineEdit() self.verticalLayout.addWidget(self.maxTextBox) if self.param is not None: self.minTextBox.setText(str(self.param.minimum())) self.maxTextBox.setText(str(self.param.maximum())) self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultTextBox = QLineEdit() self.defaultTextBox.setText(self.tr('0')) if self.param is not None: default = self.param.defaultValue() if self.param.dataType( ) == QgsProcessingParameterNumber.Integer: default = int(math.floor(default)) if default: self.defaultTextBox.setText(str(default)) self.verticalLayout.addWidget(self.defaultTextBox) elif (self.paramType == parameters.PARAMETER_EXPRESSION or isinstance(self.param, QgsProcessingParameterExpression)): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultEdit = QgsExpressionLineEdit() if self.param is not None: self.defaultEdit.setExpression(self.param.defaultValue()) self.verticalLayout.addWidget(self.defaultEdit) self.verticalLayout.addWidget(QLabel(self.tr('Parent layer'))) self.parentCombo = QComboBox() self.parentCombo.addItem(self.tr("None"), None) idx = 1 for param in list(self.alg.parameterComponents().values()): definition = self.alg.parameterDefinition( param.parameterName()) if isinstance(definition, (QgsProcessingParameterFeatureSource, QgsProcessingParameterVectorLayer)): self.parentCombo.addItem(definition.description(), definition.name()) if self.param is not None: if self.param.parentLayerParameterName( ) == definition.name(): self.parentCombo.setCurrentIndex(idx) idx += 1 self.verticalLayout.addWidget(self.parentCombo) elif (self.paramType == parameters.PARAMETER_STRING or isinstance(self.param, QgsProcessingParameterString)): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultTextBox = QLineEdit() if self.param is not None: self.defaultTextBox.setText(self.param.defaultValue()) self.verticalLayout.addWidget(self.defaultTextBox) elif (self.paramType == parameters.PARAMETER_FILE or isinstance(self.param, QgsProcessingParameterFile)): self.verticalLayout.addWidget(QLabel(self.tr('Type'))) self.fileFolderCombo = QComboBox() self.fileFolderCombo.addItem(self.tr('File')) self.fileFolderCombo.addItem(self.tr('Folder')) if self.param is not None: self.fileFolderCombo.setCurrentIndex(1 if self.param.behavior( ) == QgsProcessingParameterFile.Folder else 0) self.verticalLayout.addWidget(self.fileFolderCombo) elif (self.paramType == parameters.PARAMETER_POINT or isinstance(self.param, QgsProcessingParameterPoint)): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultTextBox = QLineEdit() if self.param is not None: self.defaultTextBox.setText(self.param.defaultValue()) self.verticalLayout.addWidget(self.defaultTextBox) elif (self.paramType == parameters.PARAMETER_CRS or isinstance(self.param, QgsProcessingParameterCrs)): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.selector = QgsProjectionSelectionWidget() if self.param is not None: self.selector.setCrs( QgsCoordinateReferenceSystem(self.param.defaultValue())) else: self.selector.setCrs(QgsCoordinateReferenceSystem('EPSG:4326')) self.verticalLayout.addWidget(self.selector) elif self.paramType == parameters.PARAMETER_ENUM or \ isinstance(self.param, QgsProcessingParameterEnum): self.widget = EnumModelerWidget(self) if self.param is not None: self.widget.setAllowMultiple(bool(self.param.allowMultiple())) self.widget.setOptions(self.param.options()) self.widget.setDefault(self.param.defaultValue()) self.verticalLayout.addWidget(self.widget) elif self.paramType == parameters.PARAMETER_MATRIX or \ isinstance(self.param, QgsProcessingParameterMatrix): self.widget = MatrixModelerWidget(self) if self.param is not None: self.widget.setValue(self.param.headers(), self.param.defaultValue()) self.widget.setFixedRows(self.param.hasFixedNumberRows()) self.verticalLayout.addWidget(self.widget) elif isinstance(self.param, QgsProcessingDestinationParameter): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultWidget = DestinationSelectionPanel( self.param, self.alg, default_selection=True) self.verticalLayout.addWidget(self.defaultWidget) self.verticalLayout.addSpacing(20) self.requiredCheck = QCheckBox() self.requiredCheck.setText(self.tr('Mandatory')) self.requiredCheck.setChecked(True) if self.param is not None: self.requiredCheck.setChecked( not self.param.flags() & QgsProcessingParameterDefinition.FlagOptional) self.verticalLayout.addWidget(self.requiredCheck) # If child algorithm output is mandatory, disable checkbox if isinstance(self.param, QgsProcessingDestinationParameter): provider_name, child_name, output_name = self.param.name().split( ':') child = self.alg.childAlgorithms()['{}:{}'.format( provider_name, child_name)] model_output = child.modelOutput(output_name) param_def = child.algorithm().parameterDefinition( model_output.childOutputName()) if not (param_def.flags() & QgsProcessingParameterDefinition.FlagOptional): self.requiredCheck.setEnabled(False) self.requiredCheck.setChecked(True) self.buttonBox = QDialogButtonBox(self) self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) self.buttonBox.setObjectName('buttonBox') self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) self.verticalLayout.addStretch() self.verticalLayout.addWidget(self.buttonBox) self.setLayout(self.verticalLayout) 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()) 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 reject(self): self.param = None settings = QgsSettings() settings.setValue( "/Processing/modelParametersDefinitionDialogGeometry", self.saveGeometry()) QDialog.reject(self)
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_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, types=[self.datatypeCombo.currentData()]) 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 # Destination parameter elif (isinstance(self.param, QgsProcessingParameterFeatureSink)): self.param = QgsProcessingParameterFeatureSink( name=name, description=self.param.description(), type=self.param.dataType(), defaultValue=self.defaultWidget.value()) elif (isinstance(self.param, QgsProcessingParameterFileDestination)): self.param = QgsProcessingParameterFileDestination( name=name, description=self.param.description(), fileFilter=self.param.fileFilter(), defaultValue=self.defaultWidget.value()) elif (isinstance(self.param, QgsProcessingParameterFolderDestination)): self.param = QgsProcessingParameterFolderDestination( name=name, description=self.param.description(), defaultValue=self.defaultWidget.value()) elif (isinstance(self.param, QgsProcessingParameterRasterDestination)): self.param = QgsProcessingParameterRasterDestination( name=name, description=self.param.description(), defaultValue=self.defaultWidget.value()) elif (isinstance(self.param, QgsProcessingParameterVectorDestination)): self.param = QgsProcessingParameterVectorDestination( name=name, description=self.param.description(), type=self.param.dataType(), defaultValue=self.defaultWidget.value()) 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) if self.advancedCheck.isChecked(): self.param.setFlags( self.param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) else: self.param.setFlags( self.param.flags() & ~QgsProcessingParameterDefinition.FlagAdvanced) settings = QgsSettings() settings.setValue( "/Processing/modelParametersDefinitionDialogGeometry", self.saveGeometry()) QDialog.accept(self)
def initAlgorithm(self, config=None): self.rules = ( (self.tr('Single pixel'), 'point'), (self.tr('All pixels'), 'allpoints'), (self.tr('Centroid of the polygon'), 'centroid'), (self.tr('Average within polygon'), 'mean'), (self.tr('Standard deviation within polygon'), 'stdev'), (self.tr('Median within polygon'), 'median'), (self.tr('Minimum within polygon'), 'min'), (self.tr('Maximum within polygon'), 'max'), (self.tr('Sum within polygon'), 'sum'), (self.tr('Mode of classes within polygon'), 'mode'), (self.tr('Proportion of classes within polygon'), 'proportion'), (self.tr('Count of classes within polygon'), 'count'), (self.tr('Percentile of values within polygon'), 'percentile'), ) self.addParameter( QgsProcessingParameterRasterLayer(self.INPUT, self.tr('Input layer'))) self.addParameter( QgsProcessingParameterEnum(self.RULE, self.tr('Sampling rule'), options=[i[0] for i in self.rules], defaultValue=2)) self.addParameter( QgsProcessingParameterNumber( self.COUNT, self.tr('Number of points to generate'), type=QgsProcessingParameterNumber.Integer, minValue=0, defaultValue=100)) params = [] params.append( QgsProcessingParameterNumber( self.BUFFER, self.tr('Buffer for point features, pixels'), type=QgsProcessingParameterNumber.Integer, minValue=0, defaultValue=3)) params.append( QgsProcessingParameterString( self.CLASSES, self.tr('Classes to extract from raster'), defaultValue=None, optional=True)) params.append( QgsProcessingParameterNumber( self.THRESHOLD, self.tr('Probability threshold for selecting samples'), type=QgsProcessingParameterNumber.Double, minValue=0, maxValue=100, defaultValue=None, optional=True)) params.append( QgsProcessingParameterNumber( self.PERCENTILE, self.tr('Percentile'), type=QgsProcessingParameterNumber.Double, minValue=0, maxValue=100, defaultValue=None, optional=True)) params.append( QgsProcessingParameterString(self.ARGUMENTS, self.tr('Additional arguments'), defaultValue=None, optional=True)) for p in params: p.setFlags(p.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(p) self.addParameter( QgsProcessingParameterVectorDestination(self.OUTPUT, self.tr('Output file')))
def create_output_from_token(name: str, description: str, token: str): # pylint: disable=too-many-branches """ Creates an output (or destination parameter) definition from a token string """ no_prompt = False if 'noprompt' in token: no_prompt = True token = token.replace(' noprompt', '') output_type = token.lower().strip() out = None if output_type.startswith('vector'): vector_type = QgsProcessing.TypeVectorAnyGeometry if output_type == 'vector point': vector_type = QgsProcessing.TypeVectorPoint elif output_type == 'vector line': vector_type = QgsProcessing.TypeVectorLine elif output_type == 'vector polygon': vector_type = QgsProcessing.TypeVectorPolygon if no_prompt: out = QgsProcessingOutputVectorLayer(name, description, vector_type) else: out = QgsProcessingParameterVectorDestination(name, description, type=vector_type) elif output_type.startswith('table'): if no_prompt: out = QgsProcessingOutputVectorLayer(name, description, QgsProcessing.TypeVector) else: out = QgsProcessingParameterVectorDestination( name, description, type=QgsProcessing.TypeVector) elif output_type == 'multilayers': # out = QgsProcessingOutputMultipleLayers(name, description) # elif token.lower().strip() == 'vector point': # out = OutputVector(datatype=[dataobjects.TYPE_VECTOR_POINT]) # elif token.lower().strip() == 'vector line': # out = OutputVector(datatype=[OutputVector.TYPE_VECTOR_LINE]) # elif token.lower().strip() == 'vector polygon': # out = OutputVector(datatype=[OutputVector.TYPE_VECTOR_POLYGON]) # elif token.lower().strip().startswith('table'): # out = OutputTable() # elif token.lower().strip().startswith('file'): # out = OutputFile() # ext = token.strip()[len('file') + 1:] # if ext: # out.ext = ext # elif token.lower().strip().startswith('extent'): # out = OutputExtent() pass elif not no_prompt: if output_type.startswith('raster'): out = QgsProcessingParameterRasterDestination(name, description) elif output_type.startswith('folder'): out = QgsProcessingParameterFolderDestination(name, description) elif output_type.startswith('html'): out = QgsProcessingParameterFileDestination( name, description, 'HTML Files (*.html)') if not out and output_type in OUTPUT_FACTORY: return OUTPUT_FACTORY[output_type](name, description) return out
class ModelerParameterDefinitionDialog(QDialog): @staticmethod def use_legacy_dialog(param=None, paramType=None): if isinstance(param, QgsProcessingDestinationParameter): return True # yay, use new API! return False def __init__(self, alg, paramType=None, param=None): self.alg = alg self.paramType = paramType self.param = param QDialog.__init__(self) self.setModal(True) self.setupUi() settings = QgsSettings() self.restoreGeometry( settings.value( "/Processing/modelParametersDefinitionDialogGeometry", QByteArray())) def closeEvent(self, event): settings = QgsSettings() settings.setValue( "/Processing/modelParametersDefinitionDialogGeometry", self.saveGeometry()) super(ModelerParameterDefinitionDialog, self).closeEvent(event) def switchToCommentTab(self): self.tab.setCurrentIndex(1) self.commentEdit.setFocus() self.commentEdit.selectAll() def setupUi(self): type_metadata = QgsApplication.processingRegistry().parameterType( self.param.type() if self.param else self.paramType) self.setWindowTitle( self.tr('{} Parameter Definition').format(type_metadata.name())) self.mainLayout = QVBoxLayout() self.tab = QTabWidget() self.mainLayout.addWidget(self.tab) self.setMinimumWidth(300) self.verticalLayout = QVBoxLayout() self.label = QLabel(self.tr('Parameter name')) self.verticalLayout.addWidget(self.label) self.nameTextBox = QLineEdit() self.verticalLayout.addWidget(self.nameTextBox) if isinstance(self.param, QgsProcessingParameterDefinition): self.nameTextBox.setText(self.param.description()) if isinstance(self.param, QgsProcessingDestinationParameter): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultWidget = QgsProcessingLayerOutputDestinationWidget( self.param, defaultSelection=True) self.verticalLayout.addWidget(self.defaultWidget) self.verticalLayout.addSpacing(20) self.requiredCheck = QCheckBox() self.requiredCheck.setText(self.tr('Mandatory')) self.requiredCheck.setChecked(True) if self.param is not None: self.requiredCheck.setChecked( not self.param.flags() & QgsProcessingParameterDefinition.FlagOptional) self.verticalLayout.addWidget(self.requiredCheck) self.advancedCheck = QCheckBox() self.advancedCheck.setText(self.tr('Advanced')) self.advancedCheck.setChecked(False) if self.param is not None: self.advancedCheck.setChecked( self.param.flags() & QgsProcessingParameterDefinition.FlagAdvanced) self.verticalLayout.addWidget(self.advancedCheck) # If child algorithm output is mandatory, disable checkbox if isinstance(self.param, QgsProcessingDestinationParameter): child = self.alg.childAlgorithms()[self.param.metadata() ['_modelChildId']] model_output = child.modelOutput( self.param.metadata()['_modelChildOutputName']) param_def = child.algorithm().parameterDefinition( model_output.childOutputName()) if not (param_def.flags() & QgsProcessingParameterDefinition.FlagOptional): self.requiredCheck.setEnabled(False) self.requiredCheck.setChecked(True) self.advancedCheck.setEnabled(False) self.advancedCheck.setChecked(False) self.verticalLayout.addStretch() w = QWidget() w.setLayout(self.verticalLayout) self.tab.addTab(w, self.tr('Properties')) self.commentLayout = QVBoxLayout() self.commentEdit = QTextEdit() self.commentEdit.setAcceptRichText(False) self.commentLayout.addWidget(self.commentEdit, 1) hl = QHBoxLayout() hl.setContentsMargins(0, 0, 0, 0) hl.addWidget(QLabel(self.tr('Color'))) self.comment_color_button = QgsColorButton() self.comment_color_button.setAllowOpacity(True) self.comment_color_button.setWindowTitle(self.tr('Comment Color')) self.comment_color_button.setShowNull(True, self.tr('Default')) hl.addWidget(self.comment_color_button) self.commentLayout.addLayout(hl) w2 = QWidget() w2.setLayout(self.commentLayout) self.tab.addTab(w2, self.tr('Comments')) self.buttonBox = QDialogButtonBox(self) self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) self.buttonBox.setObjectName('buttonBox') self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) self.mainLayout.addWidget(self.buttonBox) self.setLayout(self.mainLayout) def setComments(self, text): self.commentEdit.setPlainText(text) def comments(self): return self.commentEdit.toPlainText() def setCommentColor(self, color): if color.isValid(): self.comment_color_button.setColor(color) else: self.comment_color_button.setToNull() def commentColor(self): return self.comment_color_button.color( ) if not self.comment_color_button.isNull() else QColor() 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 validChars = \ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' safeName = ''.join(c for c in description if c in validChars) name = safeName.lower() # Destination parameter if (isinstance(self.param, QgsProcessingParameterFeatureSink)): self.param = QgsProcessingParameterFeatureSink( name=name, description=description, type=self.param.dataType(), defaultValue=self.defaultWidget.value()) elif (isinstance(self.param, QgsProcessingParameterFileDestination)): self.param = QgsProcessingParameterFileDestination( name=name, description=description, fileFilter=self.param.fileFilter(), defaultValue=self.defaultWidget.value()) elif (isinstance(self.param, QgsProcessingParameterFolderDestination)): self.param = QgsProcessingParameterFolderDestination( name=name, description=description, defaultValue=self.defaultWidget.value()) elif (isinstance(self.param, QgsProcessingParameterRasterDestination)): self.param = QgsProcessingParameterRasterDestination( name=name, description=description, defaultValue=self.defaultWidget.value()) elif (isinstance(self.param, QgsProcessingParameterVectorDestination)): self.param = QgsProcessingParameterVectorDestination( name=name, description=description, type=self.param.dataType(), defaultValue=self.defaultWidget.value()) 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) if self.advancedCheck.isChecked(): self.param.setFlags( self.param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) else: self.param.setFlags( self.param.flags() & ~QgsProcessingParameterDefinition.FlagAdvanced) settings = QgsSettings() settings.setValue( "/Processing/modelParametersDefinitionDialogGeometry", self.saveGeometry()) QDialog.accept(self) def reject(self): self.param = None settings = QgsSettings() settings.setValue( "/Processing/modelParametersDefinitionDialogGeometry", self.saveGeometry()) QDialog.reject(self)
def initAlgorithm(self, config): # 분석지역 self.addParameter( QgsProcessingParameterFeatureSource( self.IN_SITE, "❖ " + self.tr('Analysis Site'), [QgsProcessing.TypeVectorPolygon], optional=False)) # # 세생활권 인구 레이어 # self.addParameter( # QgsProcessingParameterFeatureSource( # self.IN_LIVINGAREA, # "❖ " + self.tr('Sub-Neighborhood Unit'), # [QgsProcessing.TypeVectorPolygon], # optional=debugging) # ) # # 세생활권 인구 레이어 self.addParameter( QgsProcessingParameterNumber( self.IN_LIVINGAREA, # "❖ " + self.tr('Facility Effective Service Coverage : If you input 0, it is regarded as the whole area'), "❖ " + self.tr('Sub-Neighborhood Unit(m)'), QgsProcessingParameterNumber.Integer, 200, False, 10, 10000) # 디폴트, 옵션, 미니멈, 맥시멈 ) # 기존 SOC 시설 레이어 self.addParameter( QgsProcessingParameterFeatureSource( self.IN_CURSOC, "❖ " + self.tr('Located Neighborhood Facility'), [QgsProcessing.TypeVectorPoint], optional=False)) # # 세생활권 ID # self.addParameter( # QgsProcessingParameterField( # self.IN_LIVINGAREA_ID, # self.tr('세생활권 고유 필드'), # None, # self.IN_LIVINGAREA, # QgsProcessingParameterField.Any, # optional=debugging) # ) # 세생활권 인구 레이어 self.addParameter( QgsProcessingParameterFeatureSource( self.IN_POP, "❖ " + self.tr('Resident Population'), [QgsProcessing.TypeVectorPoint], optional=False)) # 인구 필드 self.addParameter( QgsProcessingParameterField(self.IN_POP_CNTFID, "❖ " + self.tr('Population Field'), None, self.IN_POP, QgsProcessingParameterField.Numeric, optional=False)) # 거리 조락 self.addParameter( QgsProcessingParameterNumber( self.IN_LIMIT_DIST, # "❖ " + self.tr('Facility Effective Service Coverage : If you input 0, it is regarded as the whole area'), "❖ " + self.tr('Facility Effective Service Coverage'), QgsProcessingParameterNumber.Integer, 1000, False, 0, 1000000) # 디폴트, 옵션, 미니멈, 맥시멈 ) # 노드레이어 self.addParameter( QgsProcessingParameterFeatureSource( self.IN_NODE, self.tr('Node Layer'), [QgsProcessing.TypeVectorPoint], optional=False)) # 노드레이어 PK self.addParameter( QgsProcessingParameterField(self.IN_NODE_ID, self.tr('Node ID FIELD'), None, self.IN_NODE, QgsProcessingParameterField.Any, optional=False)) # 링크레이어 self.addParameter( QgsProcessingParameterFeatureSource(self.IN_LINK, "❖ " + self.tr('Link Layer'), [QgsProcessing.TypeVectorLine], optional=False)) self.addParameter( QgsProcessingParameterEnum( self.IN_LINK_TYPE, self.tr('Network direction'), options=[self.tr('One-way'), self.tr('Bidirectional')], defaultValue=1, optional=False)) # 기점 노드 필드 self.addParameter( QgsProcessingParameterField(self.IN_LINK_FNODE, self.tr('Origin field'), None, self.IN_LINK, QgsProcessingParameterField.Any, optional=False)) self.addParameter( QgsProcessingParameterField(self.IN_LINK_TNODE, self.tr('Destination'), None, self.IN_LINK, QgsProcessingParameterField.Any, optional=False)) self.addParameter( QgsProcessingParameterField(self.IN_LINK_LENGTH, self.tr('Link Length Field'), None, self.IN_LINK, QgsProcessingParameterField.Numeric, optional=False)) self.addParameter( QgsProcessingParameterField( self.IN_LINK_SPEED, self. tr('Speed Field : If the speed value is zero, it is replaced by the minimum value' ), None, self.IN_LINK, QgsProcessingParameterField.Numeric, optional=True)) # 등급 self.addParameter( QgsProcessingParameterNumber(self.IN_CALSSIFYNUM, "❖ " + self.tr( 'Analysis result grade number of sections: configurable range (2 ~ 100)' ), QgsProcessingParameterNumber.Integer, 10, False, 2, 100) # 디폴트, 옵션, 미니멈, 맥시멈 ) # 최종 결과 self.addParameter( QgsProcessingParameterVectorDestination( self.OUTPUT, self.tr('Accessibility Analysis Results(Network)')))
def initAlgorithm(self, config): """ Here we define the inputs and output of the algorithm, along with some other properties. """ self.addParameter( QgsProcessingParameterRasterLayer( self.INPUT, self.tr('Raster layer') ) ) self.addParameter( QgsProcessingParameterEnum( self.INPUT_METHOD_ECH, self.tr("Sampling method"), ['Random sampling', 'Stratified sampling'] ) ) self.addParameter( QgsProcessingParameterEnum( self.INPUT_METHOD_CLASS, self.tr('Classification method (for stratified sampling)'), ['Quantiles', 'Equal intervals','K-means'] ) ) self.addParameter( QgsProcessingParameterNumber( self.INPUT_N_CLASS, self.tr('Number of classes'), QgsProcessingParameterNumber.Integer, 4, False, 2, 10 ) ) self.addParameter( QgsProcessingParameterNumber( self.INPUT_ECHANTILLON, self.tr("Number of samples"), QgsProcessingParameterNumber.Integer, 10, False, 2, 100 ) ) self.addParameter( QgsProcessingParameterVectorDestination( self.OUTPUT, self.tr('Sampling points') ) )
def initOutput(self): self.addParameter( QgsProcessingParameterVectorDestination(self.OUTPUT, self.tr('Output layer')))
def initAlgorithm(self, config): for par in self.param: pl = par.split('|') if pl[0] == 'ParameterRaster': self.addParameter( QgsProcessingParameterRasterLayer(pl[1], self.tr(pl[2]), '', bool(strtobool(pl[3])))) if pl[0] == 'ParameterVector': self.addParameter( QgsProcessingParameterVectorLayer(pl[1], self.tr( pl[2]), [QgsProcessing.TypeVector], '', bool(strtobool(pl[4])))) if pl[0] == 'ParameterNumber': try: int(pl[5]) if pl[4] != 'None': self.addParameter( QgsProcessingParameterNumber( pl[1], self.tr(pl[2]), 0, int(pl[5]), False, int(pl[3]), int(pl[4]))) else: self.addParameter( QgsProcessingParameterNumber( pl[1], self.tr(pl[2]), 0, int(pl[5]), False, int(pl[3]))) except ValueError: if pl[4] != 'None': self.addParameter( QgsProcessingParameterNumber( pl[1], self.tr(pl[2]), 1, float(pl[5]), False, float(pl[3]), float(pl[4]))) else: self.addParameter( QgsProcessingParameterNumber( pl[1], self.tr(pl[2]), 1, float(pl[5]), False, float(pl[3]))) if pl[0] == 'ParameterBoolean': self.addParameter( QgsProcessingParameterBoolean(pl[1], self.tr(pl[2]), bool(strtobool(pl[3])), False)) if pl[0] == 'ParameterEnum': self.addParameter( QgsProcessingParameterEnum(pl[1], self.tr(pl[2]), literal_eval(pl[3]), False, pl[4], False)) for out in self.outputline: ol = out.split('|') if ol[0] == 'OutputRaster': self.addParameter( QgsProcessingParameterRasterDestination( ol[1][1:], self.tr(ol[2]))) if ol[0] == 'OutputVector': self.addParameter( QgsProcessingParameterVectorDestination( ol[1][1:], self.tr(ol[2]))) if ol[0] == 'OutputFile': self.addParameter( QgsProcessingParameterFileDestination( ol[1][1:], self.tr(ol[2])))
def initAlgorithm(self, config=None): self.addParameter( QgsProcessingParameterRasterLayer(self.INPUT, self.tr('Input image')) ) self.addParameter( QgsProcessingParameterVectorDestination ( self.OUTPUT_FOOTPRINT, self.tr('Image footprint'), QgsProcessing.TypeVectorPolygon ) ) self.addParameter( QgsProcessingParameterFeatureSink ( self.OUTPUT_NADIR, self.tr('Drone nadir point'), QgsProcessing.TypeVectorPoint ) ) self.addParameter( QgsProcessingParameterCrs( self.SOURCE_CRS, self.tr('Source CRS'), defaultValue='EPSG:4326' ) ) self.addParameter( QgsProcessingParameterCrs( self.DESTINATION_CRS, self.tr('Destination CRS'), optional = True, defaultValue='ProjectCrs' ) ) # horizontar referred to flight direction => means wide angle self.addParameter( QgsProcessingParameterNumber( self.HORIZONTAL_FOV, self.tr('Wide camera angle'), type = QgsProcessingParameterNumber.Double, defaultValue = 84.0, minValue = 0, maxValue = 360 ) ) # vertical referred to flight direction => means tall angle parameter = QgsProcessingParameterBoolean(self.USE_IMAGE_RATIO_FOR_VERTICAL_FOV, self.tr('Calc vertical FOV using image ratio'), defaultValue = True) parameter.setFlags(parameter.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(parameter) parameter = QgsProcessingParameterNumber(self.VERTICAL_FOV, self.tr('Tall camera angle'), type = QgsProcessingParameterNumber.Double, defaultValue = 54.0, minValue = 0, maxValue = 360) parameter.setFlags(parameter.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(parameter) parameter = QgsProcessingParameterNumber(self.VERTICAL_FOV_MULTIPLIER, self.tr('Empiric multiplier to fix tall FOV basing on image ratio'), type = QgsProcessingParameterNumber.Double, defaultValue = 0.855) parameter.setFlags(parameter.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(parameter) parameter = QgsProcessingParameterNumber(self.NADIR_TO_BOTTOM_OFFSET, self.tr('Offset to add to bottom distance result'), type = QgsProcessingParameterNumber.Double) parameter.setFlags(parameter.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(parameter) parameter = QgsProcessingParameterNumber(self.NADIR_TO_UPPPER_OFFSET, self.tr('Offset to add to upper distance result'), type = QgsProcessingParameterNumber.Double) parameter.setFlags(parameter.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(parameter)
class ModelerParameterDefinitionDialog(QDialog): @staticmethod def use_legacy_dialog(param=None, paramType=None): if paramType in (parameters.PARAMETER_TABLE_FIELD, parameters.PARAMETER_BAND, parameters.PARAMETER_VECTOR, parameters.PARAMETER_TABLE, parameters.PARAMETER_MULTIPLE, parameters.PARAMETER_NUMBER, parameters.PARAMETER_DISTANCE, parameters.PARAMETER_SCALE, parameters.PARAMETER_MAP_LAYER): return True elif isinstance( param, (QgsProcessingParameterField, QgsProcessingParameterBand, QgsProcessingParameterFeatureSource, QgsProcessingParameterVectorLayer, QgsProcessingParameterMultipleLayers, QgsProcessingParameterNumber, QgsProcessingParameterDistance, QgsProcessingParameterScale, QgsProcessingParameterMapLayer, QgsProcessingDestinationParameter)): return True # yay, use new API! return False def __init__(self, alg, paramType=None, param=None): self.alg = alg self.paramType = paramType self.param = param QDialog.__init__(self) self.setModal(True) self.setupUi() settings = QgsSettings() self.restoreGeometry( settings.value( "/Processing/modelParametersDefinitionDialogGeometry", QByteArray())) def closeEvent(self, event): settings = QgsSettings() settings.setValue( "/Processing/modelParametersDefinitionDialogGeometry", self.saveGeometry()) super(ModelerParameterDefinitionDialog, self).closeEvent(event) def switchToCommentTab(self): self.tab.setCurrentIndex(1) self.commentEdit.setFocus() self.commentEdit.selectAll() def setupUi(self): type_metadata = QgsApplication.processingRegistry().parameterType( self.param.type() if self.param else self.paramType) self.setWindowTitle( self.tr('{} Parameter Definition').format(type_metadata.name())) self.mainLayout = QVBoxLayout() self.tab = QTabWidget() self.mainLayout.addWidget(self.tab) self.setMinimumWidth(300) self.verticalLayout = QVBoxLayout() self.label = QLabel(self.tr('Parameter name')) self.verticalLayout.addWidget(self.label) self.nameTextBox = QLineEdit() self.verticalLayout.addWidget(self.nameTextBox) if isinstance(self.param, QgsProcessingParameterDefinition): self.nameTextBox.setText(self.param.description()) if self.paramType == parameters.PARAMETER_TABLE_FIELD or \ isinstance(self.param, QgsProcessingParameterField): self.verticalLayout.addWidget(QLabel(self.tr('Parent layer'))) self.parentCombo = QComboBox() idx = 0 for param in list(self.alg.parameterComponents().values()): definition = self.alg.parameterDefinition( param.parameterName()) if isinstance(definition, (QgsProcessingParameterFeatureSource, QgsProcessingParameterVectorLayer)): self.parentCombo.addItem(definition.description(), definition.name()) if self.param is not None: if self.param.parentLayerParameterName( ) == definition.name(): self.parentCombo.setCurrentIndex(idx) idx += 1 self.verticalLayout.addWidget(self.parentCombo) # add the datatype selector self.verticalLayout.addWidget(QLabel(self.tr('Allowed data type'))) self.datatypeCombo = QComboBox() self.datatypeCombo.addItem(self.tr('Any'), -1) self.datatypeCombo.addItem(self.tr('Number'), 0) self.datatypeCombo.addItem(self.tr('String'), 1) self.datatypeCombo.addItem(self.tr('Date/time'), 2) self.verticalLayout.addWidget(self.datatypeCombo) if self.param is not None and self.param.dataType() is not None: # QComboBoxes indexes start at 0, # self.param.datatype start with -1 that is why I need to do +1 datatypeIndex = self.param.dataType() + 1 self.datatypeCombo.setCurrentIndex(datatypeIndex) self.multipleCheck = QCheckBox() self.multipleCheck.setText(self.tr('Accept multiple fields')) self.multipleCheck.setChecked(False) if self.param is not None: self.multipleCheck.setChecked(self.param.allowMultiple()) self.verticalLayout.addWidget(self.multipleCheck) self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultTextBox = QLineEdit() self.defaultTextBox.setToolTip( self. tr('Default field name, or ; separated list of field names for multiple field parameters' )) if self.param is not None: default = self.param.defaultValue() if default is not None: self.defaultTextBox.setText(str(default)) self.verticalLayout.addWidget(self.defaultTextBox) elif self.paramType == parameters.PARAMETER_BAND or \ isinstance(self.param, QgsProcessingParameterBand): self.verticalLayout.addWidget(QLabel(self.tr('Parent layer'))) self.parentCombo = QComboBox() idx = 0 for param in list(self.alg.parameterComponents().values()): definition = self.alg.parameterDefinition( param.parameterName()) if isinstance(definition, (QgsProcessingParameterRasterLayer)): self.parentCombo.addItem(definition.description(), definition.name()) if self.param is not None: if self.param.parentLayerParameterName( ) == definition.name(): self.parentCombo.setCurrentIndex(idx) idx += 1 self.verticalLayout.addWidget(self.parentCombo) elif (self.paramType in (parameters.PARAMETER_VECTOR, parameters.PARAMETER_TABLE) or isinstance(self.param, (QgsProcessingParameterFeatureSource, QgsProcessingParameterVectorLayer))): self.verticalLayout.addWidget(QLabel(self.tr('Geometry type'))) self.shapetypeCombo = QComboBox() self.shapetypeCombo.addItem(self.tr('Geometry Not Required'), QgsProcessing.TypeVector) self.shapetypeCombo.addItem(self.tr('Point'), QgsProcessing.TypeVectorPoint) self.shapetypeCombo.addItem(self.tr('Line'), QgsProcessing.TypeVectorLine) self.shapetypeCombo.addItem(self.tr('Polygon'), QgsProcessing.TypeVectorPolygon) self.shapetypeCombo.addItem(self.tr('Any Geometry Type'), QgsProcessing.TypeVectorAnyGeometry) if self.param is not None: self.shapetypeCombo.setCurrentIndex( self.shapetypeCombo.findData(self.param.dataTypes()[0])) self.verticalLayout.addWidget(self.shapetypeCombo) elif (self.paramType == parameters.PARAMETER_MULTIPLE or isinstance(self.param, QgsProcessingParameterMultipleLayers)): self.verticalLayout.addWidget(QLabel(self.tr('Data type'))) self.datatypeCombo = QComboBox() self.datatypeCombo.addItem(self.tr('Any Map Layer'), QgsProcessing.TypeMapLayer) self.datatypeCombo.addItem( self.tr('Vector (No Geometry Required)'), QgsProcessing.TypeVector) self.datatypeCombo.addItem(self.tr('Vector (Point)'), QgsProcessing.TypeVectorPoint) self.datatypeCombo.addItem(self.tr('Vector (Line)'), QgsProcessing.TypeVectorLine) self.datatypeCombo.addItem(self.tr('Vector (Polygon)'), QgsProcessing.TypeVectorPolygon) self.datatypeCombo.addItem(self.tr('Vector (Any Geometry Type)'), QgsProcessing.TypeVectorAnyGeometry) self.datatypeCombo.addItem(self.tr('Raster'), QgsProcessing.TypeRaster) self.datatypeCombo.addItem(self.tr('File'), QgsProcessing.TypeFile) if self.param is not None: self.datatypeCombo.setCurrentIndex( self.datatypeCombo.findData(self.param.layerType())) self.verticalLayout.addWidget(self.datatypeCombo) elif (self.paramType == parameters.PARAMETER_MAP_LAYER or isinstance(self.param, QgsProcessingParameterMapLayer)): self.verticalLayout.addWidget(QLabel(self.tr('Data type'))) self.datatypeCombo = QComboBox() self.datatypeCombo.addItem(self.tr('Any Map Layer'), QgsProcessing.TypeMapLayer) self.datatypeCombo.addItem(self.tr('Vector (Point)'), QgsProcessing.TypeVectorPoint) self.datatypeCombo.addItem(self.tr('Vector (Line)'), QgsProcessing.TypeVectorLine) self.datatypeCombo.addItem(self.tr('Vector (Polygon)'), QgsProcessing.TypeVectorPolygon) self.datatypeCombo.addItem(self.tr('Vector (Any Geometry Type)'), QgsProcessing.TypeVectorAnyGeometry) self.datatypeCombo.addItem(self.tr('Raster'), QgsProcessing.TypeRaster) self.datatypeCombo.addItem(self.tr('Mesh'), QgsProcessing.TypeMesh) if self.param is not None: self.datatypeCombo.setCurrentIndex( self.datatypeCombo.findData(self.param.dataTypes()[0])) self.verticalLayout.addWidget(self.datatypeCombo) elif (self.paramType in (parameters.PARAMETER_NUMBER, parameters.PARAMETER_DISTANCE, parameters.PARAMETER_SCALE) or isinstance(self.param, (QgsProcessingParameterNumber, QgsProcessingParameterDistance, QgsProcessingParameterScale))): if (self.paramType == parameters.PARAMETER_DISTANCE or isinstance(self.param, QgsProcessingParameterDistance)): self.verticalLayout.addWidget(QLabel(self.tr('Linked input'))) self.parentCombo = QComboBox() self.parentCombo.addItem('', '') idx = 1 for param in list(self.alg.parameterComponents().values()): definition = self.alg.parameterDefinition( param.parameterName()) if isinstance(definition, (QgsProcessingParameterFeatureSource, QgsProcessingParameterVectorLayer, QgsProcessingParameterMapLayer, QgsProcessingParameterCrs)): self.parentCombo.addItem(definition.description(), definition.name()) if self.param is not None: if self.param.parentParameterName( ) == definition.name(): self.parentCombo.setCurrentIndex(idx) idx += 1 self.verticalLayout.addWidget(self.parentCombo) elif (self.paramType != parameters.PARAMETER_SCALE and not isinstance(self.param, QgsProcessingParameterScale)): self.verticalLayout.addWidget(QLabel(self.tr('Number type'))) self.type_combo = QComboBox() self.type_combo.addItem(self.tr('Float'), QgsProcessingParameterNumber.Double) self.type_combo.addItem(self.tr('Integer'), QgsProcessingParameterNumber.Integer) if self.param: self.type_combo.setCurrentIndex( self.type_combo.findData(self.param.dataType())) self.verticalLayout.addWidget(self.type_combo) if (self.paramType != parameters.PARAMETER_SCALE and not isinstance(self.param, QgsProcessingParameterScale)): self.verticalLayout.addWidget(QLabel(self.tr('Min value'))) self.minTextBox = QLineEdit() self.verticalLayout.addWidget(self.minTextBox) self.verticalLayout.addWidget(QLabel(self.tr('Max value'))) self.maxTextBox = QLineEdit() self.verticalLayout.addWidget(self.maxTextBox) if self.param is not None: self.minTextBox.setText(str(self.param.minimum())) self.maxTextBox.setText(str(self.param.maximum())) self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultTextBox = QLineEdit() self.defaultTextBox.setText(self.tr('0')) if self.param is not None: default = self.param.defaultValue() if self.param.dataType( ) == QgsProcessingParameterNumber.Integer: default = int(math.floor(float(default))) if default: self.defaultTextBox.setText(str(default)) self.verticalLayout.addWidget(self.defaultTextBox) elif isinstance(self.param, QgsProcessingDestinationParameter): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultWidget = QgsProcessingLayerOutputDestinationWidget( self.param, defaultSelection=True) self.verticalLayout.addWidget(self.defaultWidget) self.verticalLayout.addSpacing(20) self.requiredCheck = QCheckBox() self.requiredCheck.setText(self.tr('Mandatory')) self.requiredCheck.setChecked(True) if self.param is not None: self.requiredCheck.setChecked( not self.param.flags() & QgsProcessingParameterDefinition.FlagOptional) self.verticalLayout.addWidget(self.requiredCheck) self.advancedCheck = QCheckBox() self.advancedCheck.setText(self.tr('Advanced')) self.advancedCheck.setChecked(False) if self.param is not None: self.advancedCheck.setChecked( self.param.flags() & QgsProcessingParameterDefinition.FlagAdvanced) self.verticalLayout.addWidget(self.advancedCheck) # If child algorithm output is mandatory, disable checkbox if isinstance(self.param, QgsProcessingDestinationParameter): provider_name, child_name, output_name = self.param.name().split( ':') child = self.alg.childAlgorithms()['{}:{}'.format( provider_name, child_name)] model_output = child.modelOutput(output_name) param_def = child.algorithm().parameterDefinition( model_output.childOutputName()) if not (param_def.flags() & QgsProcessingParameterDefinition.FlagOptional): self.requiredCheck.setEnabled(False) self.requiredCheck.setChecked(True) self.advancedCheck.setEnabled(False) self.advancedCheck.setChecked(False) self.verticalLayout.addStretch() w = QWidget() w.setLayout(self.verticalLayout) self.tab.addTab(w, self.tr('Properties')) self.commentLayout = QVBoxLayout() self.commentEdit = QTextEdit() self.commentEdit.setAcceptRichText(False) self.commentLayout.addWidget(self.commentEdit, 1) hl = QHBoxLayout() hl.setContentsMargins(0, 0, 0, 0) hl.addWidget(QLabel(self.tr('Color'))) self.comment_color_button = QgsColorButton() self.comment_color_button.setAllowOpacity(True) self.comment_color_button.setWindowTitle(self.tr('Comment Color')) self.comment_color_button.setShowNull(True, self.tr('Default')) hl.addWidget(self.comment_color_button) self.commentLayout.addLayout(hl) w2 = QWidget() w2.setLayout(self.commentLayout) self.tab.addTab(w2, self.tr('Comments')) self.buttonBox = QDialogButtonBox(self) self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) self.buttonBox.setObjectName('buttonBox') self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) self.mainLayout.addWidget(self.buttonBox) self.setLayout(self.mainLayout) def setComments(self, text): self.commentEdit.setPlainText(text) def comments(self): return self.commentEdit.toPlainText() def setCommentColor(self, color): if color.isValid(): self.comment_color_button.setColor(color) else: self.comment_color_button.setToNull() def commentColor(self): return self.comment_color_button.color( ) if not self.comment_color_button.isNull() else QColor() 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_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, types=[self.datatypeCombo.currentData()]) 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 # Destination parameter elif (isinstance(self.param, QgsProcessingParameterFeatureSink)): self.param = QgsProcessingParameterFeatureSink( name=name, description=self.param.description(), type=self.param.dataType(), defaultValue=self.defaultWidget.value()) elif (isinstance(self.param, QgsProcessingParameterFileDestination)): self.param = QgsProcessingParameterFileDestination( name=name, description=self.param.description(), fileFilter=self.param.fileFilter(), defaultValue=self.defaultWidget.value()) elif (isinstance(self.param, QgsProcessingParameterFolderDestination)): self.param = QgsProcessingParameterFolderDestination( name=name, description=self.param.description(), defaultValue=self.defaultWidget.value()) elif (isinstance(self.param, QgsProcessingParameterRasterDestination)): self.param = QgsProcessingParameterRasterDestination( name=name, description=self.param.description(), defaultValue=self.defaultWidget.value()) elif (isinstance(self.param, QgsProcessingParameterVectorDestination)): self.param = QgsProcessingParameterVectorDestination( name=name, description=self.param.description(), type=self.param.dataType(), defaultValue=self.defaultWidget.value()) 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) if self.advancedCheck.isChecked(): self.param.setFlags( self.param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) else: self.param.setFlags( self.param.flags() & ~QgsProcessingParameterDefinition.FlagAdvanced) settings = QgsSettings() settings.setValue( "/Processing/modelParametersDefinitionDialogGeometry", self.saveGeometry()) QDialog.accept(self) def reject(self): self.param = None settings = QgsSettings() settings.setValue( "/Processing/modelParametersDefinitionDialogGeometry", self.saveGeometry()) QDialog.reject(self)
def initAlgorithm(self, config): #분석지역 self.addParameter( QgsProcessingParameterFeatureSource( self.IN_SITE, '❖ ' + self.tr('Analysis Site'), [QgsProcessing.TypeVectorPolygon], optional=False)) # 기존 SOC 시설 레이어 self.addParameter( QgsProcessingParameterFeatureSource( self.IN_CURSOC, '❖ ' + self.tr('Located Neighborhood Facility'), [QgsProcessing.TypeVectorPoint], optional=False)) # 인구 레이어 self.addParameter( QgsProcessingParameterFeatureSource( self.IN_POP, '❖ ' + self.tr('Resident Population'), [QgsProcessing.TypeVectorPoint], optional=False)) # 인구 필드 self.addParameter( QgsProcessingParameterField(self.IN_POP_CNTFID, self.tr('Population Field'), None, self.IN_POP, QgsProcessingParameterField.Numeric, optional=False)) # 분석 최소단위(잠재적 위치 격자 사이즈) self.addParameter( QgsProcessingParameterNumber( self.IN_GRID_SIZE, '❖ ' + self.tr('Analysis Unit(Cell size : m)'), QgsProcessingParameterNumber.Integer, 1000, False, 100, 10000) #디폴트, 옵션, 미니멈, 맥시멈 ) # QgsProcessingParameterDefinition : 사용자 레이어 추가하여 잠재적 위치로 사용 paramUsrgridlyr = QgsProcessingParameterFeatureSource( name=self.IN_USERGRID, description=self.tr('New Facility Location Review Area(Point)'), types=[QgsProcessing.TypeVectorPoint], defaultValue='', optional=True) paramUsrgridlyr.setFlags( paramUsrgridlyr.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(paramUsrgridlyr) # 거리 조락 self.addParameter( QgsProcessingParameterNumber( self.IN_LIMIT_DIST, # "❖ " + self.tr('Facility Effective Service Coverage : If you input 0, it is regarded as the whole area'), "❖ " + self.tr('Facility Effective Service Coverage'), QgsProcessingParameterNumber.Integer, 1000, False, 0, 1000000) #디폴트, 옵션, 미니멈, 맥시멈 ) # 노드레이어 self.addParameter( QgsProcessingParameterFeatureSource( self.IN_NODE, '❖ ' + self.tr('Node Layer'), [QgsProcessing.TypeVectorPoint], optional=False)) # 노드레이어 PK self.addParameter( QgsProcessingParameterField(self.IN_NODE_ID, self.tr('Node ID FIELD'), None, self.IN_NODE, QgsProcessingParameterField.Any, optional=False)) # 링크레이어 self.addParameter( QgsProcessingParameterFeatureSource(self.IN_LINK, '❖ ' + self.tr('Link Layer'), [QgsProcessing.TypeVectorLine], optional=False)) self.addParameter( QgsProcessingParameterEnum( self.IN_LINK_TYPE, self.tr('Network direction'), options=[self.tr('One-way'), self.tr('Bidirectional')], defaultValue=1, optional=False)) # 기점 노드 필드 self.addParameter( QgsProcessingParameterField(self.IN_LINK_FNODE, self.tr('Origin field'), None, self.IN_LINK, QgsProcessingParameterField.Any, optional=False)) self.addParameter( QgsProcessingParameterField(self.IN_LINK_TNODE, self.tr('Destination'), None, self.IN_LINK, QgsProcessingParameterField.Any, optional=False)) self.addParameter( QgsProcessingParameterField(self.IN_LINK_LENGTH, self.tr('Link Length Field'), None, self.IN_LINK, QgsProcessingParameterField.Numeric, optional=False)) self.addParameter( QgsProcessingParameterField( self.IN_LINK_SPEED, self. tr('Speed Field : If the speed value is zero, it is replaced by the minimum value' ), None, self.IN_LINK, QgsProcessingParameterField.Numeric, optional=True)) # 기존 SOC 서비스 중인 인구 제외 비율 self.addParameter( QgsProcessingParameterNumber( self.IN_POP_EXCLUSION, '❖ ' + self.tr('Population Exclusion Ratio(%)'), QgsProcessingParameterNumber.Integer, 100, False, 0, 100) # 디폴트, 옵션, 미니멈, 맥시멈 ) # 등급 self.addParameter( QgsProcessingParameterNumber(self.IN_CALSSIFYNUM, '❖' + self.tr( 'Analysis result grade number of sections: configurable range (2 ~ 100)' ), QgsProcessingParameterNumber.Integer, 10, False, 2, 100) # 디폴트, 옵션, 미니멈, 맥시멈 ) # 최종 결과 self.addParameter( QgsProcessingParameterVectorDestination( self.OUTPUT, self.tr('Efficiency Analysis Results(Network)')))
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()) 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 initAlgorithm(self, config=None): """! Inputs and output of the algorithm """ project = QgsProject.instance() # Get project crs project_crs = project.crs() # Check if project crs has 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 pixel size (in meters)", type=QgsProcessingParameterNumber.Double, defaultValue=defaultValue, minValue=0.1, ) self.addParameter(param) param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) param = QgsProcessingParameterVectorDestination( "sampling_layer", "Sampling grid layer", type=QgsProcessing.TypeVectorPoint, createByDefault=True, defaultValue=None, ) self.addParameter(param) param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) if DEBUG: param = QgsProcessingParameterVectorDestination( "tex_extent_layer", # Name "FDS texture", # Description type=QgsProcessing.TypeVectorPolygon, createByDefault=True, defaultValue=None, ) self.addParameter(param) param = QgsProcessingParameterVectorDestination( "dem_extent_layer", # Name "FDS terrain extent layer", # Description type=QgsProcessing.TypeVectorPolygon, createByDefault=True, defaultValue=None, ) self.addParameter(param) param = QgsProcessingParameterVectorDestination( "utm_extent_layer", # Name "FDS domain extent layer", # Description type=QgsProcessing.TypeVectorPolygon, createByDefault=True, defaultValue=None, ) self.addParameter(param)
def initAlgorithm(self, config=None): self.addParameter( QgsProcessingParameterFeatureSource(self.INPUT, self.tr('Input layer'))) self.addParameter( QgsProcessingParameterField(self.FIELD, self.tr('Dissolve field'), None, self.INPUT, QgsProcessingParameterField.Any, optional=True)) self.addParameter( QgsProcessingParameterString(self.GEOMETRY, self.tr('Geometry column name'), defaultValue='geometry')) params = [] params.append( QgsProcessingParameterBoolean( self.EXPLODE_COLLECTIONS, self. tr('Produce one feature for each geometry in any kind of geometry collection in the source file' ), defaultValue=False)) params.append( QgsProcessingParameterBoolean(self.KEEP_ATTRIBUTES, self.tr('Keep input attributes'), defaultValue=False)) params.append( QgsProcessingParameterBoolean(self.COUNT_FEATURES, self.tr('Count dissolved features'), defaultValue=False)) params.append( QgsProcessingParameterBoolean( self.COMPUTE_AREA, self.tr('Compute area and perimeter of dissolved features'), defaultValue=False)) params.append( QgsProcessingParameterBoolean( self.COMPUTE_STATISTICS, self.tr('Compute min/max/sum/mean for attribute'), defaultValue=False)) params.append( QgsProcessingParameterField( self.STATISTICS_ATTRIBUTE, self.tr('Numeric attribute to calculate statistics on'), None, self.INPUT, QgsProcessingParameterField.Numeric, optional=True)) params.append( QgsProcessingParameterString( self.OPTIONS, self.tr('Additional creation options'), defaultValue='', optional=True)) for param in params: param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(param) self.addParameter( QgsProcessingParameterVectorDestination(self.OUTPUT, self.tr('Dissolved')))
def initAlgorithm(self, config=None): self.addParameter( QgsProcessingParameterFeatureSource( self.TRACKS, self.tr("Tracks"), types=[QgsProcessing.TypeVectorLine], defaultValue=None, ) ) self.addParameter( QgsProcessingParameterFeatureSource( self.AXIS, self.tr("Axis"), types=[QgsProcessing.TypeVectorLine], defaultValue=None, ) ) self.addParameter( QgsProcessingParameterNumber( self.FIRST_SECTION_ABS_LONG, self.tr("Abscissa of first section"), type=QgsProcessingParameterNumber.Double, defaultValue=0, optional=True, ) ) self.addParameter( QgsProcessingParameterNumber( self.FIRST_AXIS_POINT_ABS_LONG, self.tr( "Abscissa of axis first point" " (take precedence over abscissa of first section when set)" ), type=QgsProcessingParameterNumber.Double, optional=True, ) ) self.addParameter( QgsProcessingParameterField( self.NAME_FIELD, self.tr("Name field"), optional=True, type=QgsProcessingParameterField.String, parentLayerParameterName=self.TRACKS, allowMultiple=False, defaultValue=None, ) ) self.addParameter( QgsProcessingParameterNumber( self.DISTANCE, self.tr("Maximum distance between two points"), type=QgsProcessingParameterNumber.Double, defaultValue=100, ) ) self.addParameter( QgsProcessingParameterBoolean( self.STRICT_DISTANCE, self.tr("Apply strict distance (do not keep initial points)"), defaultValue=True, ) ) self.addParameter( QgsProcessingParameterRasterLayer( self.DEM, self.tr("Digital Elevation Model"), defaultValue=None ) ) self.addParameter( QgsProcessingParameterVectorDestination( self.OUTPUT, self.tr("Sections"), type=QgsProcessing.TypeVectorAnyGeometry, createByDefault=True, defaultValue=None, ) )
def initAlgorithm(self, config): """ Here we define the inputs and output of the algorithm, along with some other properties. """ self.addParameter( QgsProcessingParameterVectorLayer( self.INPUT_CONTOUR, self.tr('Field contour'), [QgsProcessing.TypeVectorPolygon] ) ) self.addParameter( QgsProcessingParameterRasterLayer( self.INPUT, self.tr('Raster to zone') ) ) self.addParameter( QgsProcessingParameterEnum( self.INPUT_METHOD, self.tr('Classification method'), ['Quantiles', ' Equal-intervals', 'K-means'] ) ) self.addParameter( QgsProcessingParameterNumber( self.INPUT_N_CLASS, self.tr('Number of classes'), QgsProcessingParameterNumber.Integer, 4, False, 2, 10 ) ) self.addParameter( QgsProcessingParameterNumber( self.INPUT_RNEIGHBORS_SIZE, self.tr('Size of modal filter'), QgsProcessingParameterNumber.Double, 3 ) ) self.addParameter( QgsProcessingParameterNumber( self.INPUT_MIN_AREA, self.tr('Minimum areas of zones'), QgsProcessingParameterNumber.Double, 250 ) ) self.addParameter( QgsProcessingParameterEnum( self.INPUT_METHOD_GENERALIZE, self.tr('Smoothing method'), ['Douglas', 'Douglas Reduction', 'Snakes'] #0,1,10 ) ) self.addParameter( QgsProcessingParameterNumber( self.INPUT_ALPHA, self.tr('alpha (for Snakes method)'), QgsProcessingParameterNumber.Double, 1 ) ) self.addParameter( QgsProcessingParameterNumber( self.INPUT_BETA, self.tr('beta (for Snakes method)'), QgsProcessingParameterNumber.Double, 1 ) ) self.addParameter( QgsProcessingParameterNumber( self.INPUT_MAX_TOLERANCE, self.tr('Maximum tolerance value'), QgsProcessingParameterNumber.Double, 1 ) ) self.addParameter( QgsProcessingParameterNumber( self.INPUT_LOOK_AHEAD, self.tr('Look ahead parameter'), QgsProcessingParameterNumber.Double, 7 ) ) self.addParameter( QgsProcessingParameterNumber( self.INPUT_REDUCTION, self.tr('Reduction (for Douglas reduction method)'), QgsProcessingParameterNumber.Double, 50 ) ) self.addParameter( QgsProcessingParameterVectorDestination( self.OUTPUT, self.tr('Within-field zones') ) )
class ModelerParameterDefinitionDialog(QDialog): def __init__(self, alg, paramType=None, param=None): self.alg = alg self.paramType = paramType self.param = param QDialog.__init__(self) self.setModal(True) self.setupUi() settings = QgsSettings() self.restoreGeometry(settings.value("/Processing/modelParametersDefinitionDialogGeometry", QByteArray())) def closeEvent(self, event): settings = QgsSettings() settings.setValue("/Processing/modelParametersDefinitionDialogGeometry", self.saveGeometry()) super(ModelerParameterDefinitionDialog, self).closeEvent(event) def setupUi(self): self.setWindowTitle(self.tr('Parameter Definition')) self.setMinimumWidth(300) self.verticalLayout = QVBoxLayout(self) self.verticalLayout.setMargin(20) self.label = QLabel(self.tr('Parameter name')) self.verticalLayout.addWidget(self.label) self.nameTextBox = QLineEdit() self.verticalLayout.addWidget(self.nameTextBox) if isinstance(self.param, QgsProcessingParameterDefinition): self.nameTextBox.setText(self.param.description()) if self.paramType == parameters.PARAMETER_BOOLEAN or \ isinstance(self.param, QgsProcessingParameterBoolean): self.state = QCheckBox() self.state.setText(self.tr('Checked')) self.state.setChecked(False) if self.param is not None: self.state.setChecked(bool(self.param.defaultValue())) self.verticalLayout.addWidget(self.state) elif self.paramType == parameters.PARAMETER_TABLE_FIELD or \ isinstance(self.param, QgsProcessingParameterField): self.verticalLayout.addWidget(QLabel(self.tr('Parent layer'))) self.parentCombo = QComboBox() idx = 0 for param in list(self.alg.parameterComponents().values()): definition = self.alg.parameterDefinition(param.parameterName()) if isinstance(definition, (QgsProcessingParameterFeatureSource, QgsProcessingParameterVectorLayer)): self.parentCombo.addItem(definition.description(), definition.name()) if self.param is not None: if self.param.parentLayerParameterName() == definition.name(): self.parentCombo.setCurrentIndex(idx) idx += 1 self.verticalLayout.addWidget(self.parentCombo) # add the datatype selector self.verticalLayout.addWidget(QLabel(self.tr('Allowed data type'))) self.datatypeCombo = QComboBox() self.datatypeCombo.addItem(self.tr('Any'), -1) self.datatypeCombo.addItem(self.tr('Number'), 0) self.datatypeCombo.addItem(self.tr('String'), 1) self.datatypeCombo.addItem(self.tr('Date/time'), 2) self.verticalLayout.addWidget(self.datatypeCombo) if self.param is not None and self.param.dataType() is not None: # QComboBoxes indexes start at 0, # self.param.datatype start with -1 that is why I need to do +1 datatypeIndex = self.param.dataType() + 1 self.datatypeCombo.setCurrentIndex(datatypeIndex) self.multipleCheck = QCheckBox() self.multipleCheck.setText(self.tr('Accept multiple fields')) self.multipleCheck.setChecked(False) if self.param is not None: self.multipleCheck.setChecked(self.param.allowMultiple()) self.verticalLayout.addWidget(self.multipleCheck) self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultTextBox = QLineEdit() self.defaultTextBox.setToolTip( self.tr('Default field name, or ; separated list of field names for multiple field parameters')) if self.param is not None: default = self.param.defaultValue() if default is not None: self.defaultTextBox.setText(str(default)) self.verticalLayout.addWidget(self.defaultTextBox) elif self.paramType == parameters.PARAMETER_BAND or \ isinstance(self.param, QgsProcessingParameterBand): self.verticalLayout.addWidget(QLabel(self.tr('Parent layer'))) self.parentCombo = QComboBox() idx = 0 for param in list(self.alg.parameterComponents().values()): definition = self.alg.parameterDefinition(param.parameterName()) if isinstance(definition, (QgsProcessingParameterRasterLayer)): self.parentCombo.addItem(definition.description(), definition.name()) if self.param is not None: if self.param.parentLayerParameterName() == definition.name(): self.parentCombo.setCurrentIndex(idx) idx += 1 self.verticalLayout.addWidget(self.parentCombo) elif (self.paramType in ( parameters.PARAMETER_VECTOR, parameters.PARAMETER_TABLE) or isinstance(self.param, (QgsProcessingParameterFeatureSource, QgsProcessingParameterVectorLayer))): self.verticalLayout.addWidget(QLabel(self.tr('Geometry type'))) self.shapetypeCombo = QComboBox() self.shapetypeCombo.addItem(self.tr('Geometry Not Required'), QgsProcessing.TypeVector) self.shapetypeCombo.addItem(self.tr('Point'), QgsProcessing.TypeVectorPoint) self.shapetypeCombo.addItem(self.tr('Line'), QgsProcessing.TypeVectorLine) self.shapetypeCombo.addItem(self.tr('Polygon'), QgsProcessing.TypeVectorPolygon) self.shapetypeCombo.addItem(self.tr('Any Geometry Type'), QgsProcessing.TypeVectorAnyGeometry) if self.param is not None: self.shapetypeCombo.setCurrentIndex(self.shapetypeCombo.findData(self.param.dataTypes()[0])) self.verticalLayout.addWidget(self.shapetypeCombo) elif (self.paramType == parameters.PARAMETER_MULTIPLE or isinstance(self.param, QgsProcessingParameterMultipleLayers)): self.verticalLayout.addWidget(QLabel(self.tr('Data type'))) self.datatypeCombo = QComboBox() self.datatypeCombo.addItem(self.tr('Any Map Layer'), QgsProcessing.TypeMapLayer) self.datatypeCombo.addItem(self.tr('Vector (No Geometry Required)'), QgsProcessing.TypeVector) self.datatypeCombo.addItem(self.tr('Vector (Point)'), QgsProcessing.TypeVectorPoint) self.datatypeCombo.addItem(self.tr('Vector (Line)'), QgsProcessing.TypeVectorLine) self.datatypeCombo.addItem(self.tr('Vector (Polygon)'), QgsProcessing.TypeVectorPolygon) self.datatypeCombo.addItem(self.tr('Vector (Any Geometry Type)'), QgsProcessing.TypeVectorAnyGeometry) self.datatypeCombo.addItem(self.tr('Raster'), QgsProcessing.TypeRaster) self.datatypeCombo.addItem(self.tr('File'), QgsProcessing.TypeFile) if self.param is not None: self.datatypeCombo.setCurrentIndex(self.datatypeCombo.findData(self.param.layerType())) self.verticalLayout.addWidget(self.datatypeCombo) elif (self.paramType == parameters.PARAMETER_NUMBER or self.paramType == parameters.PARAMETER_DISTANCE or isinstance(self.param, (QgsProcessingParameterNumber, QgsProcessingParameterDistance))): self.verticalLayout.addWidget(QLabel(self.tr('Min value'))) self.minTextBox = QLineEdit() self.verticalLayout.addWidget(self.minTextBox) self.verticalLayout.addWidget(QLabel(self.tr('Max value'))) self.maxTextBox = QLineEdit() self.verticalLayout.addWidget(self.maxTextBox) if self.param is not None: self.minTextBox.setText(str(self.param.minimum())) self.maxTextBox.setText(str(self.param.maximum())) self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultTextBox = QLineEdit() self.defaultTextBox.setText(self.tr('0')) if self.param is not None: default = self.param.defaultValue() if self.param.dataType() == QgsProcessingParameterNumber.Integer: default = int(math.floor(default)) if default: self.defaultTextBox.setText(str(default)) self.verticalLayout.addWidget(self.defaultTextBox) elif (self.paramType == parameters.PARAMETER_EXPRESSION or isinstance(self.param, QgsProcessingParameterExpression)): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultEdit = QgsExpressionLineEdit() if self.param is not None: self.defaultEdit.setExpression(self.param.defaultValue()) self.verticalLayout.addWidget(self.defaultEdit) self.verticalLayout.addWidget(QLabel(self.tr('Parent layer'))) self.parentCombo = QComboBox() self.parentCombo.addItem(self.tr("None"), None) idx = 1 for param in list(self.alg.parameterComponents().values()): definition = self.alg.parameterDefinition(param.parameterName()) if isinstance(definition, (QgsProcessingParameterFeatureSource, QgsProcessingParameterVectorLayer)): self.parentCombo.addItem(definition.description(), definition.name()) if self.param is not None: if self.param.parentLayerParameterName() == definition.name(): self.parentCombo.setCurrentIndex(idx) idx += 1 self.verticalLayout.addWidget(self.parentCombo) elif (self.paramType == parameters.PARAMETER_STRING or isinstance(self.param, QgsProcessingParameterString)): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultTextBox = QLineEdit() if self.param is not None: self.defaultTextBox.setText(self.param.defaultValue()) self.verticalLayout.addWidget(self.defaultTextBox) elif (self.paramType == parameters.PARAMETER_FILE or isinstance(self.param, QgsProcessingParameterFile)): self.verticalLayout.addWidget(QLabel(self.tr('Type'))) self.fileFolderCombo = QComboBox() self.fileFolderCombo.addItem(self.tr('File')) self.fileFolderCombo.addItem(self.tr('Folder')) if self.param is not None: self.fileFolderCombo.setCurrentIndex( 1 if self.param.behavior() == QgsProcessingParameterFile.Folder else 0) self.verticalLayout.addWidget(self.fileFolderCombo) elif (self.paramType == parameters.PARAMETER_POINT or isinstance(self.param, QgsProcessingParameterPoint)): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultTextBox = QLineEdit() if self.param is not None: self.defaultTextBox.setText(self.param.defaultValue()) self.verticalLayout.addWidget(self.defaultTextBox) elif (self.paramType == parameters.PARAMETER_CRS or isinstance(self.param, QgsProcessingParameterCrs)): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.selector = QgsProjectionSelectionWidget() if self.param is not None: self.selector.setCrs(QgsCoordinateReferenceSystem(self.param.defaultValue())) else: self.selector.setCrs(QgsCoordinateReferenceSystem('EPSG:4326')) self.verticalLayout.addWidget(self.selector) elif self.paramType == parameters.PARAMETER_ENUM or \ isinstance(self.param, QgsProcessingParameterEnum): self.widget = EnumModelerWidget(self) if self.param is not None: self.widget.setAllowMultiple(bool(self.param.allowMultiple())) self.widget.setOptions(self.param.options()) self.widget.setDefault(self.param.defaultValue()) self.verticalLayout.addWidget(self.widget) elif self.paramType == parameters.PARAMETER_MATRIX or \ isinstance(self.param, QgsProcessingParameterMatrix): self.widget = MatrixModelerWidget(self) if self.param is not None: self.widget.setValue(self.param.defaultValue()) self.widget.setHeaders(self.param.headers()) self.widget.setFixedRows(self.param.hasFixedNumberRows()) self.verticalLayout.addWidget(self.widget) elif isinstance(self.param, QgsProcessingDestinationParameter): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultWidget = DestinationSelectionPanel(self.param, self.alg, default_selection=True) self.verticalLayout.addWidget(self.defaultWidget) self.verticalLayout.addSpacing(20) self.requiredCheck = QCheckBox() self.requiredCheck.setText(self.tr('Mandatory')) self.requiredCheck.setChecked(True) if self.param is not None: self.requiredCheck.setChecked(not self.param.flags() & QgsProcessingParameterDefinition.FlagOptional) self.verticalLayout.addWidget(self.requiredCheck) # If child algorithm output is mandatory, disable checkbox if isinstance(self.param, QgsProcessingDestinationParameter): provider_name, child_name, output_name = self.param.name().split(':') child = self.alg.childAlgorithms()['{}:{}'.format(provider_name, child_name)] model_output = child.modelOutput(output_name) param_def = child.algorithm().parameterDefinition(model_output.childOutputName()) if not (param_def.flags() & QgsProcessingParameterDefinition.FlagOptional): self.requiredCheck.setEnabled(False) self.requiredCheck.setChecked(True) self.buttonBox = QDialogButtonBox(self) self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) self.buttonBox.setObjectName('buttonBox') self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) self.verticalLayout.addStretch() self.verticalLayout.addWidget(self.buttonBox) self.setLayout(self.verticalLayout) 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()) 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 reject(self): self.param = None settings = QgsSettings() settings.setValue("/Processing/modelParametersDefinitionDialogGeometry", self.saveGeometry()) QDialog.reject(self)
def initAlgorithm(self, config=None): """ Initialisation de l'algorithme: définition des paramètres en entrée et en sortie """ # Données source self.addParameter( QgsProcessingParameterFeatureSource( self.POI1, self.tr("Couche d'interet 1 (par exemple les gares SNCF) "), [QgsProcessing.TypeVectorAnyGeometry])) # Distance du tampon self.addParameter( QgsProcessingParameterDistance( 'BUFFERDIST1', self.tr('Distance du tampon'), defaultValue=1000.0, # Make distance units match the INPUT layer units: parentParameterName='POI1')) # Données source self.addParameter( QgsProcessingParameterFeatureSource( self.POI2, self.tr( "Couche d'interet 2 ( par exemple les stations de metro)"), [QgsProcessing.TypeVectorAnyGeometry])) # Distance du tampon self.addParameter( QgsProcessingParameterDistance( 'BUFFERDIST2', self.tr('Distance du tampon'), defaultValue=300.0, # Make distance units match the INPUT layer units: parentParameterName='POI2')) # Données source self.addParameter( QgsProcessingParameterFeatureSource( self.POI3, self.tr("Couche d'interet 3 (par exemple les espaces verts)"), [QgsProcessing.TypeVectorAnyGeometry])) # Distance du tampon self.addParameter( QgsProcessingParameterDistance( 'BUFFERDIST3', self.tr('Distance du tampon'), defaultValue=200.0, # Make distance units match the INPUT layer units: parentParameterName='POI3')) # Données source self.addParameter( QgsProcessingParameterFeatureSource( self.POI4, self.tr("Couche d'interet 4 (par exemples les piscines)"), [QgsProcessing.TypeVectorAnyGeometry])) # Distance du tampon self.addParameter( QgsProcessingParameterDistance( 'BUFFERDIST4', self.tr('Distance du tampon'), defaultValue=500.0, # Make distance units match the INPUT layer units: parentParameterName='POI4')) # Récupération de la destination. self.addParameter( QgsProcessingParameterVectorDestination(self.OUTPUT, self.tr('Sortie')))
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()) 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 initAlgorithm(self, config): #분석지역 self.addParameter( QgsProcessingParameterFeatureSource( self.IN_SITE, '❖ ' + self.tr('Analysis Site'), [QgsProcessing.TypeVectorPolygon], optional=False) ) # 기존 SOC 시설 레이어 self.addParameter( QgsProcessingParameterFeatureSource( self.IN_CURSOC, '❖ ' + self.tr('Located Neighborhood Facility'), [QgsProcessing.TypeVectorPoint], optional=False) ) # 인구 레이어 self.addParameter( QgsProcessingParameterFeatureSource( self.IN_POP, '❖ ' + self.tr('Resident Population'), [QgsProcessing.TypeVectorPoint], optional=False) ) # 인구 필드 self.addParameter( QgsProcessingParameterField( self.IN_POP_CNTFID, self.tr('Population Field'), None, self.IN_POP, QgsProcessingParameterField.Numeric, optional=False) ) # 분석 최소단위(잠재적 위치 격자 사이즈) self.addParameter( QgsProcessingParameterNumber( self.IN_GRID_SIZE, '❖ ' + self.tr('Analysis Unit(Cell size : m)'), QgsProcessingParameterNumber.Integer, 1000, False, 100, 10000) #디폴트, 옵션, 미니멈, 맥시멈 ) paramUsrgridlyr = QgsProcessingParameterFeatureSource( name=self.IN_USERGRID, description=self.tr('New Facility Location Review Area(Point)'), types=[QgsProcessing.TypeVectorPoint], defaultValue='', optional=True ) paramUsrgridlyr.setFlags(paramUsrgridlyr.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(paramUsrgridlyr) # 거리 조락 self.addParameter( QgsProcessingParameterNumber( self.IN_LIMIT_DIST, # "❖ " + self.tr('Facility Effective Service Coverage : If you input 0, it is regarded as the whole area'), "❖ " + self.tr('Facility Effective Service Coverage'), QgsProcessingParameterNumber.Integer, 1000, False, 0, 1000000) #디폴트, 옵션, 미니멈, 맥시멈 ) # 기존 SOC 서비스 중인 인구 제외 비율 self.addParameter( QgsProcessingParameterNumber( self.IN_POP_EXCLUSION, '❖ ' + self.tr('Population Exclusion Ratio(%)'), QgsProcessingParameterNumber.Integer, 100, False, 0, 100) # 디폴트, 옵션, 미니멈, 맥시멈 ) # 등급 self.addParameter( QgsProcessingParameterNumber( self.IN_CALSSIFYNUM, '❖ ' + self.tr('Analysis result grade number of sections: configurable range (2 ~ 100)'), QgsProcessingParameterNumber.Integer, 10, False, 2, 100) # 디폴트, 옵션, 미니멈, 맥시멈 ) # 최종 결과 self.addParameter( QgsProcessingParameterVectorDestination( self.OUTPUT, self.tr('Efficiency Analysis Results(Euclidean)') ) )
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( QgsProcessingParameterNumber( self.INTERVAL, self.tr('Interval between contour lines'), type=QgsProcessingParameterNumber.Double, minValue=0.0, defaultValue=10.0)) self.addParameter( QgsProcessingParameterString( self.FIELD_NAME, self. tr('Attribute name (if not set, no elevation attribute is attached)' ), defaultValue='ELEV', optional=True)) create_3d_param = QgsProcessingParameterBoolean( self.CREATE_3D, self.tr('Produce 3D vector'), defaultValue=False) create_3d_param.setFlags( create_3d_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(create_3d_param) ignore_nodata_param = QgsProcessingParameterBoolean( self.IGNORE_NODATA, self.tr('Treat all raster values as valid'), defaultValue=False) ignore_nodata_param.setFlags( ignore_nodata_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(ignore_nodata_param) nodata_param = QgsProcessingParameterNumber( self.NODATA, self.tr('Input pixel value to treat as "nodata"'), type=QgsProcessingParameterNumber.Double, defaultValue=None, optional=True) nodata_param.setFlags(nodata_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(nodata_param) offset_param = QgsProcessingParameterNumber( self.OFFSET, self.tr( 'Offset from zero relative to which to interpret intervals'), type=QgsProcessingParameterNumber.Double, defaultValue=0.0, optional=True) nodata_param.setFlags(offset_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(offset_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) # TODO: remove in QGIS 4 options_param = QgsProcessingParameterString( self.OPTIONS, self.tr('Additional creation options'), defaultValue='', optional=True) options_param.setFlags(options_param.flags() | QgsProcessingParameterDefinition.FlagHidden) self.addParameter(options_param) self.addParameter( QgsProcessingParameterVectorDestination( self.OUTPUT, self.tr('Contours'), QgsProcessing.TypeVectorLine))
def initAlgorithm(self, config=None): # Input the area that will likely be safe from a Tsunami here. The objective will be greater, but this will encourage people to get to moderatly high ground first if possible. self.addParameter( QgsProcessingParameterNumber( '1TeirofSafetyMinvalue', '1rst Teir of Safety Min value', type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=20)) self.addParameter( QgsProcessingParameterNumber( '1TeirofSafetyMinvalue (2)', '1rst Teir of Safety MAX value', type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=999)) self.addParameter( QgsProcessingParameterNumber( '1TeirofSafetyMinvalue (2) (2)', '1rst Teir of Safety New (lower) value', type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=1)) self.addParameter( QgsProcessingParameterNumber( '1TeirofSafetyMinvalue (2) (2) (2)', '1rst Teir of Safety Penalty (outside safety region)', type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=3)) self.addParameter( QgsProcessingParameterRasterLayer('DEM', 'DEM', defaultValue=None)) self.addParameter( QgsProcessingParameterNumber( 'EvacuationElevation', 'Evacuation Elevation', optional=True, type=QgsProcessingParameterNumber.Double, minValue=1, defaultValue=None)) self.addParameter( QgsProcessingParameterRasterLayer( 'InundationAreaorHazardRegion', 'Inundation Area or Hazard Region', optional=True, defaultValue=None)) self.addParameter( QgsProcessingParameterNumber( 'LowBoundHazardRasterReclassify', 'Low Bound Hazard Raster Reclassify', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=9.95)) self.addParameter( QgsProcessingParameterNumber( 'OffRoadDefaultTerrainValue', 'Off Road Default Terrain Value', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=2)) self.addParameter( QgsProcessingParameterVectorLayer( 'RegionofInterest', 'Region of Interest', types=[QgsProcessing.TypeVectorPolygon], defaultValue=None)) self.addParameter( QgsProcessingParameterNumber( 'RoadWeightValue', 'Road Weight Value', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=1)) self.addParameter( QgsProcessingParameterVectorLayer( 'Roads', 'Roads', optional=True, types=[QgsProcessing.TypeVectorLine], defaultValue=None)) self.addParameter( QgsProcessingParameterNumber( 'SlopeRange1MinValue', 'Slope Range 1 Min Value', type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=-1000)) self.addParameter( QgsProcessingParameterNumber( 'SlopeRange1MinValue (2)', 'Slope Range 1 Max Value', type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=30)) self.addParameter( QgsProcessingParameterNumber( 'SlopeRange1MinValue (2) (2)', 'Slope Range 1 New Value', type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=1)) self.addParameter( QgsProcessingParameterNumber( 'SlopeRange1MinValue (2) (2) (2)', 'Slope Range 2 New Value', type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=3)) self.addParameter( QgsProcessingParameterNumber( 'SlopeRange1MinValue (2) (2) (2) (2)', 'Slope Range 3 New Value', type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=1000)) self.addParameter( QgsProcessingParameterNumber( 'SlopeRange1MinValue (2) (3)', 'Slope Range 2 Max Value', type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=50)) self.addParameter( QgsProcessingParameterNumber( 'SlopeRange1MinValue (2) (3) (2)', 'Slope Range 3 Max Value', type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=90)) self.addParameter( QgsProcessingParameterNumber( 'SlopeRange1MinValue (3)', 'Slope Range 2 Min Value', type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=30)) self.addParameter( QgsProcessingParameterNumber( 'SlopeRange1MinValue (3) (2)', 'Slope Range 3 Min Value', type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=50)) self.addParameter( QgsProcessingParameterVectorLayer( 'StartingPoints', 'Starting Points', types=[QgsProcessing.TypeVectorPoint], defaultValue=None)) self.addParameter( QgsProcessingParameterNumber( 'Var1AllOtherRange1Value', 'Var 1 AllOther Range 1 Value', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=1)) self.addParameter( QgsProcessingParameterNumber( 'Var1AllOtherRange1Value (2)', 'Var 2 AllOther Range 1 Value', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=1)) self.addParameter( QgsProcessingParameterNumber( 'Var1AllOtherRange1Value (2) (2)', 'Var 3 AllOther Range 1 Value', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=1)) self.addParameter( QgsProcessingParameterNumber( 'Var1AllOtherRange1Value (2) (2) (2)', 'Var 4 AllOther Range 1 Value', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=1)) self.addParameter( QgsProcessingParameterNumber( 'Var1AllOtherRange1Value (2) (2) (2) (2)', 'Var 5 AllOther Range 1 Value', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=1)) self.addParameter( QgsProcessingParameterNumber( 'Var1MinRange1', 'Var 1 Min Range 1', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=-100000)) self.addParameter( QgsProcessingParameterNumber( 'Var1MinRange1 (2)', 'Var 1 Max Range 1', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=None)) self.addParameter( QgsProcessingParameterNumber( 'Var1MinRange1 (2) (2)', 'Var 2 Max Range 1', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=None)) self.addParameter( QgsProcessingParameterNumber( 'Var1MinRange1 (2) (2) (2)', 'Var 3 Max Range 1', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=None)) self.addParameter( QgsProcessingParameterNumber( 'Var1MinRange1 (2) (2) (2) (2)', 'Var 4 Max Range 1', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=None)) self.addParameter( QgsProcessingParameterNumber( 'Var1MinRange1 (2) (2) (2) (2) (2)', 'Var 5 Max Range 1', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=None)) self.addParameter( QgsProcessingParameterNumber( 'Var1MinRange1 (3)', 'Var 2 Min Range 1', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=-10000)) self.addParameter( QgsProcessingParameterNumber( 'Var1MinRange1 (3) (2)', 'Var 3 Min Range 1', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=None)) self.addParameter( QgsProcessingParameterNumber( 'Var1MinRange1 (3) (2) (2)', 'Var 4 Min Range 1', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=None)) self.addParameter( QgsProcessingParameterNumber( 'Var1MinRange1 (3) (2) (2) (2)', 'Var 5 Min Range 1', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=None)) self.addParameter( QgsProcessingParameterNumber( 'Var1NewRange1Value', 'Var 1 New Range 1 Value', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=None)) self.addParameter( QgsProcessingParameterNumber( 'Var1NewRange1Value (2)', 'Var 2 New Range 1 Value', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=None)) self.addParameter( QgsProcessingParameterNumber( 'Var1NewRange1Value (2) (2)', 'Var 3 New Range 1 Value', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=None)) self.addParameter( QgsProcessingParameterNumber( 'Var1NewRange1Value (2) (2) (2)', 'Var 4 New Range 1 Value', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=None)) self.addParameter( QgsProcessingParameterNumber( 'Var1NewRange1Value (2) (2) (2) (2)', 'Var 5 New Range 1 Value', optional=True, type=QgsProcessingParameterNumber.Double, minValue=-1.79769e+308, maxValue=1.79769e+308, defaultValue=None)) self.addParameter( QgsProcessingParameterNumber( 'VariableCellSize', 'Variable Cell Size', type=QgsProcessingParameterNumber.Double, minValue=1, maxValue=10, defaultValue=4)) self.addParameter( QgsProcessingParameterVectorLayer( 'VariableObstacles1', 'Variable Obstacles 1', optional=True, types=[QgsProcessing.TypeVectorPolygon], defaultValue=None)) self.addParameter( QgsProcessingParameterVectorLayer('VariableObstacles2', 'Variable Obstacles 2', optional=True, defaultValue=None)) self.addParameter( QgsProcessingParameterVectorLayer('VariableObstacles2 (2)', 'Variable Obstacles 3', optional=True, defaultValue=None)) self.addParameter( QgsProcessingParameterVectorLayer('VariableObstacles2 (2) (2)', 'Variable Obstacles 4', optional=True, defaultValue=None)) self.addParameter( QgsProcessingParameterVectorLayer('VariableObstacles2 (2) (2) (2)', 'Variable Obstacles 5', optional=True, defaultValue=None)) self.addParameter( QgsProcessingParameterFeatureSink( 'EvacuationRoutes', 'Evacuation Routes', type=QgsProcessing.TypeVectorAnyGeometry, createByDefault=True, defaultValue=None)) self.addParameter( QgsProcessingParameterVectorDestination( 'ObjectivePolygon', 'Objective Polygon', type=QgsProcessing.TypeVectorPolygon, createByDefault=True, defaultValue=None)) self.addParameter( QgsProcessingParameterRasterDestination('SlopeRaster', 'Slope Raster', optional=True, createByDefault=True, defaultValue=None)) self.addParameter( QgsProcessingParameterFeatureSink( 'DestinationPoints', 'Destination points', type=QgsProcessing.TypeVectorPoint, createByDefault=True, defaultValue=None)) self.addParameter( QgsProcessingParameterRasterDestination('WeightedRaster', 'Weighted Raster', createByDefault=True, defaultValue=None)) self.addParameter( QgsProcessingParameterVectorDestination( 'EvacuationContourMinHeight', 'Evacuation Contour Min Height', type=QgsProcessing.TypeVectorAnyGeometry, createByDefault=True, defaultValue=None)) self.addParameter( QgsProcessingParameterRasterDestination('WeightedRaster', 'Weighted Raster', createByDefault=True, defaultValue=None)) self.addParameter( QgsProcessingParameterRasterDestination('TierOfSafetyWeight', '1 Tier of Safety Weight', createByDefault=True, defaultValue=None)) self.addParameter( QgsProcessingParameterRasterDestination('WeightedRoads', 'Weighted Roads', createByDefault=True, defaultValue=None)) self.addParameter( QgsProcessingParameterRasterDestination( 'WeightedVariable1Raster', 'Weighted Variable 1 Raster', createByDefault=True, defaultValue=None)) self.addParameter( QgsProcessingParameterRasterDestination( 'WeightedVariable2Raster', 'Weighted Variable 2 Raster', createByDefault=True, defaultValue=None)) self.addParameter( QgsProcessingParameterRasterDestination('WeightedSlope', 'Weighted Slope', createByDefault=True, defaultValue=None))