123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- """
- ***************************************************************************
- Parameters.py
- ---------------------
- Date : August 2012
- Copyright : (C) 2012 by Victor Olaya
- Email : volayaf at gmail dot com
- ***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************
- """
- __author__ = 'Victor Olaya'
- __date__ = 'August 2012'
- __copyright__ = '(C) 2012, Victor Olaya'
- import sys
- from qgis.core import (QgsRasterLayer,
- QgsVectorLayer,
- QgsMapLayer,
- QgsCoordinateReferenceSystem,
- QgsExpression,
- QgsProject,
- QgsRectangle,
- QgsWkbTypes,
- QgsVectorFileWriter,
- QgsProcessing,
- QgsProcessingUtils,
- QgsProcessingParameters,
- QgsProcessingParameterDefinition,
- QgsProcessingParameterRasterLayer,
- QgsProcessingParameterVectorLayer,
- QgsProcessingParameterBand,
- QgsProcessingParameterBoolean,
- QgsProcessingParameterCrs,
- QgsProcessingParameterRange,
- QgsProcessingParameterPoint,
- QgsProcessingParameterGeometry,
- QgsProcessingParameterEnum,
- QgsProcessingParameterExtent,
- QgsProcessingParameterExpression,
- QgsProcessingParameterMatrix,
- QgsProcessingParameterFile,
- QgsProcessingParameterField,
- QgsProcessingParameterVectorDestination,
- QgsProcessingParameterFileDestination,
- QgsProcessingParameterFolderDestination,
- QgsProcessingParameterRasterDestination,
- QgsProcessingParameterPointCloudDestination,
- QgsProcessingParameterString,
- QgsProcessingParameterMapLayer,
- QgsProcessingParameterMultipleLayers,
- QgsProcessingParameterFeatureSource,
- QgsProcessingParameterNumber,
- QgsProcessingParameterColor,
- QgsProcessingParameterPointCloudLayer,
- QgsProcessingParameterAnnotationLayer)
- from qgis.PyQt.QtCore import QCoreApplication
- PARAMETER_NUMBER = 'number'
- PARAMETER_DISTANCE = 'distance'
- PARAMETER_SCALE = 'scale'
- PARAMETER_RASTER = 'raster'
- PARAMETER_TABLE = 'vector'
- PARAMETER_VECTOR = 'source'
- PARAMETER_STRING = 'string'
- PARAMETER_EXPRESSION = 'expression'
- PARAMETER_BOOLEAN = 'boolean'
- PARAMETER_TABLE_FIELD = 'field'
- PARAMETER_EXTENT = 'extent'
- PARAMETER_FILE = 'file'
- PARAMETER_POINT = 'point'
- PARAMETER_GEOMETRY = 'geometry'
- PARAMETER_CRS = 'crs'
- PARAMETER_MULTIPLE = 'multilayer'
- PARAMETER_BAND = 'band'
- PARAMETER_LAYOUTITEM = 'layoutitem'
- PARAMETER_MAP_LAYER = 'layer'
- PARAMETER_RANGE = 'range'
- PARAMETER_ENUM = 'enum'
- PARAMETER_MATRIX = 'matrix'
- PARAMETER_VECTOR_DESTINATION = 'vectorDestination'
- PARAMETER_FILE_DESTINATION = 'fileDestination'
- PARAMETER_FOLDER_DESTINATION = 'folderDestination'
- PARAMETER_RASTER_DESTINATION = 'rasterDestination'
- PARAMETER_POINTCLOUD_DESTINATION = 'pointCloudDestination'
- def getParameterFromString(s, context=''):
- # Try the parameter definitions used in description files
- if '|' in s and (s.startswith("QgsProcessingParameter") or s.startswith("*QgsProcessingParameter") or s.startswith('Parameter') or s.startswith('*Parameter')):
- isAdvanced = False
- if s.startswith("*"):
- s = s[1:]
- isAdvanced = True
- tokens = s.split("|")
- params = [t if str(t) != str(None) else None for t in tokens[1:]]
- if True:
- clazz = getattr(sys.modules[__name__], tokens[0])
- # convert to correct type
- if clazz == QgsProcessingParameterRasterLayer:
- if len(params) > 3:
- params[3] = True if params[3].lower() == 'true' else False
- elif clazz == QgsProcessingParameterPointCloudLayer:
- if len(params) > 3:
- params[3] = True if params[3].lower() == 'true' else False
- elif clazz == QgsProcessingParameterAnnotationLayer:
- if len(params) > 3:
- params[3] = True if params[3].lower() == 'true' else False
- elif clazz == QgsProcessingParameterBand:
- if len(params) > 4:
- params[4] = True if params[4].lower() == 'true' else False
- if len(params) > 5:
- params[5] = True if params[5].lower() == 'true' else False
- elif clazz == QgsProcessingParameterVectorLayer:
- if len(params) > 2:
- try:
- params[2] = [int(p) for p in params[2].split(';')]
- except ValueError:
- params[2] = [getattr(QgsProcessing, p.split(".")[1]) for p in params[2].split(';')]
- if len(params) > 4:
- params[4] = True if params[4].lower() == 'true' else False
- elif clazz == QgsProcessingParameterMapLayer:
- if len(params) > 3:
- params[3] = True if params[3].lower() == 'true' else False
- try:
- params[4] = [int(p) for p in params[4].split(';')]
- except ValueError:
- params[4] = [getattr(QgsProcessing, p.split(".")[1]) for p in params[4].split(';')]
- elif clazz == QgsProcessingParameterBoolean:
- if len(params) > 2:
- params[2] = True if params[2].lower() == 'true' else False
- if len(params) > 3:
- params[3] = True if params[3].lower() == 'true' else False
- elif clazz == QgsProcessingParameterPoint:
- if len(params) > 3:
- params[3] = True if params[3].lower() == 'true' else False
- elif clazz == QgsProcessingParameterGeometry:
- if len(params) > 3:
- params[3] = True if params[3].lower() == 'true' else False
- if len(params) > 4:
- try:
- params[4] = [int(p) for p in params[4].split(';')]
- except ValueError:
- params[4] = [getattr(QgsWkbTypes, p.split(".")[1]) for p in params[4].split(';')]
- if len(params) > 5:
- params[5] = True if params[5].lower() == 'true' else False
- elif clazz == QgsProcessingParameterCrs:
- if len(params) > 3:
- params[3] = True if params[3].lower() == 'true' else False
- elif clazz == QgsProcessingParameterRange:
- if len(params) > 2:
- try:
- params[2] = int(params[2])
- except ValueError:
- params[2] = getattr(QgsProcessingParameterNumber, params[2].split(".")[1])
- if len(params) > 4:
- params[4] = True if params[4].lower() == 'true' else False
- elif clazz == QgsProcessingParameterExtent:
- if len(params) > 3:
- params[3] = True if params[3].lower() == 'true' else False
- elif clazz == QgsProcessingParameterExpression:
- if len(params) > 3:
- params[3] = True if params[3].lower() == 'true' else False
- elif clazz == QgsProcessingParameterEnum:
- if len(params) > 2:
- params[2] = params[2].split(';')
- if len(params) > 3:
- params[3] = True if params[3].lower() == 'true' else False
- if len(params) > 4:
- # For multiple values; default value is a list of int
- if params[3] is True:
- params[4] = [int(v) for v in params[4].split(',')] if params[4] is not None else None
- else:
- params[4] = int(params[4]) if params[4] is not None else None
- if len(params) > 5:
- params[5] = True if params[5].lower() == 'true' else False
- elif clazz == QgsProcessingParameterFeatureSource:
- if len(params) > 2:
- try:
- params[2] = [int(p) for p in params[2].split(';')]
- except ValueError:
- params[2] = [getattr(QgsProcessing, p.split(".")[1]) for p in params[2].split(';')]
- if len(params) > 4:
- params[4] = True if params[4].lower() == 'true' else False
- elif clazz == QgsProcessingParameterMultipleLayers:
- if len(params) > 2:
- try:
- params[2] = int(params[2])
- except ValueError:
- params[2] = getattr(QgsProcessing, params[2].split(".")[1])
- if len(params) > 4:
- params[4] = True if params[4].lower() == 'true' else False
- elif clazz == QgsProcessingParameterMatrix:
- if len(params) > 2:
- params[2] = int(params[2])
- if len(params) > 3:
- params[3] = True if params[3].lower() == 'true' else False
- if len(params) > 4:
- params[4] = params[4].split(';')
- if len(params) > 6:
- params[6] = True if params[6].lower() == 'true' else False
- elif clazz == QgsProcessingParameterField:
- if len(params) > 4:
- try:
- params[4] = int(params[4])
- except ValueError:
- params[4] = getattr(QgsProcessingParameterField, params[4].split(".")[1])
- if len(params) > 5:
- params[5] = True if params[5].lower() == 'true' else False
- if len(params) > 6:
- params[6] = True if params[6].lower() == 'true' else False
- if len(params) > 7:
- params[7] = True if params[7].lower() == 'true' else False
- elif clazz == QgsProcessingParameterFile:
- if len(params) > 2:
- try:
- params[2] = int(params[2])
- except ValueError:
- params[2] = getattr(QgsProcessingParameterFile, params[2].split(".")[1])
- if len(params) > 5:
- params[5] = True if params[5].lower() == 'true' else False
- elif clazz == QgsProcessingParameterNumber:
- if len(params) > 2:
- try:
- params[2] = int(params[2])
- except ValueError:
- params[2] = getattr(QgsProcessingParameterNumber, params[2].split(".")[1])
- if len(params) > 3:
- params[3] = float(params[3].strip()) if params[3] is not None else None
- if len(params) > 4:
- params[4] = True if params[4].lower() == 'true' else False
- if len(params) > 5:
- params[5] = float(params[5].strip()) if params[5] is not None else -sys.float_info.max + 1
- if len(params) > 6:
- params[6] = float(params[6].strip()) if params[6] is not None else sys.float_info.max - 1
- elif clazz == QgsProcessingParameterString:
- if len(params) > 3:
- params[3] = True if params[3].lower() == 'true' else False
- if len(params) > 4:
- params[4] = True if params[4].lower() == 'true' else False
- elif clazz == QgsProcessingParameterColor:
- if len(params) > 3:
- params[3] = True if params[3].lower() == 'true' else False
- if len(params) > 4:
- params[4] = True if params[4].lower() == 'true' else False
- elif clazz == QgsProcessingParameterFileDestination:
- if len(params) > 4:
- params[4] = True if params[4].lower() == 'true' else False
- if len(params) > 5:
- params[5] = True if params[5].lower() == 'true' else False
- elif clazz == QgsProcessingParameterFolderDestination:
- if len(params) > 3:
- params[3] = True if params[3].lower() == 'true' else False
- if len(params) > 4:
- params[4] = True if params[4].lower() == 'true' else False
- elif clazz == QgsProcessingParameterRasterDestination:
- if len(params) > 3:
- params[3] = True if params[3].lower() == 'true' else False
- if len(params) > 4:
- params[4] = True if params[4].lower() == 'true' else False
- elif clazz == QgsProcessingParameterPointCloudDestination:
- print(params)
- if len(params) > 3:
- params[3] = True if params[3].lower() == 'true' else False
- if len(params) > 4:
- params[4] = True if params[4].lower() == 'true' else False
- elif clazz == QgsProcessingParameterVectorDestination:
- if len(params) > 2:
- try:
- params[2] = int(params[2])
- except ValueError:
- params[2] = getattr(QgsProcessing, params[2].split(".")[1])
- if len(params) > 4:
- params[4] = True if params[4].lower() == 'true' else False
- if len(params) > 5:
- params[5] = True if params[5].lower() == 'true' else False
- param = clazz(*params)
- if isAdvanced:
- param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
- param.setDescription(QCoreApplication.translate(context, param.description()))
- return param
- else:
- return None
- else: # try script syntax
- # try native method
- param = QgsProcessingParameters.parameterFromScriptCode(s)
- if param:
- return param
|