Skip to content

Commit 7e26124

Browse files
committed
[processing] support for output geometry types (work in progress)
1 parent 8c3537b commit 7e26124

6 files changed

+54
-21
lines changed

python/plugins/processing/core/outputs.py

+25-1
Original file line numberDiff line numberDiff line change
@@ -256,13 +256,23 @@ def getTableWriter(self, fields):
256256

257257
class OutputVector(Output):
258258

259+
VECTOR_TYPE_POINT = 0
260+
VECTOR_TYPE_LINE = 1
261+
VECTOR_TYPE_POLYGON = 2
262+
VECTOR_TYPE_ANY = -1
263+
259264
encoding = None
260265
compatible = None
261266

262-
def __init__(self, name='', description='', hidden=False, base_input=None):
267+
def __init__(self, name='', description='', hidden=False, base_input=None, datatype=[-1]):
263268
Output.__init__(self, name, description, hidden)
264269
self.base_input = base_input
265270
self.base_layer = None
271+
if isinstance(datatype, int):
272+
datatype = [datatype]
273+
elif isinstance(datatype, basestring):
274+
datatype = [int(t) for t in datatype.split(',')]
275+
self.datatype = datatype
266276

267277
def hasGeometry(self):
268278
if self.base_layer is None:
@@ -336,3 +346,17 @@ def getVectorWriter(self, fields, geomType, crs, options=None):
336346
self.layer = w.layer
337347
self.value = w.destination
338348
return w
349+
350+
def dataType(self):
351+
types = ''
352+
for t in self.datatype:
353+
if t == self.VECTOR_TYPE_POINT:
354+
types += 'point, '
355+
elif t == self.VECTOR_TYPE_LINE:
356+
types += 'line, '
357+
elif t == self.VECTOR_TYPE_POLYGON:
358+
types += 'polygon, '
359+
else:
360+
types += 'any, '
361+
362+
return types[:-2]

python/plugins/processing/core/parameters.py

+10-10
Original file line numberDiff line numberDiff line change
@@ -972,14 +972,14 @@ class ParameterVector(ParameterDataObject):
972972
VECTOR_TYPE_POLYGON = 2
973973
VECTOR_TYPE_ANY = -1
974974

975-
def __init__(self, name='', description='', shapetype=[-1],
975+
def __init__(self, name='', description='', datatype=[-1],
976976
optional=False):
977977
ParameterDataObject.__init__(self, name, description, None, optional)
978-
if isinstance(shapetype, int):
979-
shapetype = [shapetype]
980-
elif isinstance(shapetype, basestring):
981-
shapetype = [int(t) for t in shapetype.split(',')]
982-
self.shapetype = shapetype
978+
if isinstance(datatype, int):
979+
datatype = [datatype]
980+
elif isinstance(datatype, basestring):
981+
datatype = [int(t) for t in datatype.split(',')]
982+
self.datatype = datatype
983983
self.exported = None
984984

985985
def setValue(self, obj):
@@ -1037,12 +1037,12 @@ def getFileFilter(self):
10371037

10381038
def dataType(self):
10391039
types = ''
1040-
for shp in self.shapetype:
1041-
if shp == self.VECTOR_TYPE_POINT:
1040+
for t in self.datatype:
1041+
if t == self.VECTOR_TYPE_POINT:
10421042
types += 'point, '
1043-
elif shp == self.VECTOR_TYPE_LINE:
1043+
elif t == self.VECTOR_TYPE_LINE:
10441044
types += 'line, '
1045-
elif shp == self.VECTOR_TYPE_POLYGON:
1045+
elif t == self.VECTOR_TYPE_POLYGON:
10461046
types += 'polygon, '
10471047
else:
10481048
types += 'any, '

python/plugins/processing/gui/BatchInputSelectionPanel.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def showLayerSelectionDialog(self):
9191
layers = dataobjects.getTables()
9292
else:
9393
if isinstance(self.param, ParameterVector):
94-
datatype = self.param.shapetype
94+
datatype = self.param.datatype
9595
else:
9696
datatype = [self.param.datatype]
9797
layers = dataobjects.getVectorLayers(datatype)

python/plugins/processing/gui/ParametersPanel.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ def layerAdded(self, layer):
114114
if param.hidden:
115115
continue
116116
if isinstance(param, ParameterVector):
117-
if dataobjects.canUseVectorLayer(layer, param.shapetype):
117+
if dataobjects.canUseVectorLayer(layer, param.datatype):
118118
widget = self.valueItems[param.name]
119119
if isinstance(widget, InputLayerSelectorPanel):
120120
widget = widget.cmbText
@@ -265,7 +265,7 @@ def initWidgets(self):
265265

266266
base_input = self.alg.getParameterFromName(output.base_input)
267267
if isinstance(base_input, ParameterVector):
268-
layers = dataobjects.getVectorLayers(base_input.shapetype)
268+
layers = dataobjects.getVectorLayers(base_input.datatype)
269269
else:
270270
layers = dataobjects.getTables()
271271
if len(layers) > 0:
@@ -300,7 +300,7 @@ def getWidgetFromParameter(self, param):
300300
elif isinstance(param, ParameterVector):
301301
if self.somethingDependsOnThisParameter(param) or self.alg.allowOnlyOpenedLayers:
302302
item = QComboBox()
303-
layers = dataobjects.getVectorLayers(param.shapetype)
303+
layers = dataobjects.getVectorLayers(param.datatype)
304304
layers.sort(key=lambda lay: lay.name())
305305
if param.optional:
306306
item.addItem(self.NOT_SELECTED, None)
@@ -309,7 +309,7 @@ def getWidgetFromParameter(self, param):
309309
item.currentIndexChanged.connect(self.updateDependentFields)
310310
item.name = param.name
311311
else:
312-
layers = dataobjects.getVectorLayers(param.shapetype)
312+
layers = dataobjects.getVectorLayers(param.datatype)
313313
items = []
314314
if param.optional:
315315
items.append((self.NOT_SELECTED, None))
@@ -361,7 +361,7 @@ def getWidgetFromParameter(self, param):
361361
items.append(param)
362362
parent = self.alg.getParameterFromName(param.parent)
363363
if isinstance(parent, ParameterVector):
364-
layers = dataobjects.getVectorLayers(parent.shapetype)
364+
layers = dataobjects.getVectorLayers(parent.datatype)
365365
else:
366366
layers = dataobjects.getTables()
367367
if len(layers) > 0:

python/plugins/processing/modeler/ModelerParameterDefinitionDialog.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ def setupUi(self):
182182
self.shapetypeCombo.addItem(self.tr('Line'))
183183
self.shapetypeCombo.addItem(self.tr('Polygon'))
184184
if self.param is not None:
185-
self.shapetypeCombo.setCurrentIndex(self.param.shapetype[0] + 1)
185+
self.shapetypeCombo.setCurrentIndex(self.param.datatype[0] + 1)
186186
self.horizontalLayoutParent.addWidget(self.shapetypeCombo)
187187
self.verticalLayout.addLayout(self.horizontalLayoutParent)
188188
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_MULTIPLE or \

python/plugins/processing/modeler/ModelerParametersDialog.py

+12-3
Original file line numberDiff line numberDiff line change
@@ -271,13 +271,16 @@ def showAdvancedParametersClicked(self):
271271
self.labels[param.name].setVisible(self.showAdvanced)
272272
self.widgets[param.name].setVisible(self.showAdvanced)
273273

274-
def getAvailableValuesOfType(self, paramType, outType=None):
274+
def getAvailableValuesOfType(self, paramType, outType=None, dataType=None):
275275
values = []
276276
inputs = self.model.inputs
277277
for i in inputs.values():
278278
param = i.param
279279
if isinstance(param, paramType):
280-
values.append(ValueFromInput(param.name))
280+
if subType is not None and param.datatype in dataType:
281+
values.append(ValueFromInput(param.name))
282+
else:
283+
values.append(ValueFromInput(param.name))
281284
if outType is None:
282285
return values
283286
if self._algName is None:
@@ -346,7 +349,13 @@ def getWidgetFromParameter(self, param):
346349
elif isinstance(param, ParameterMultipleInput):
347350
if param.datatype == ParameterMultipleInput.TYPE_VECTOR_ANY:
348351
options = self.getAvailableValuesOfType(ParameterVector, OutputVector)
349-
elif aram.datatype == ParameterMultipleInput.TYPE_RASTER:
352+
elif param.datatype == ParameterMultipleInput.TYPE_VECTOR_POINT:
353+
options = self.getAvailableValuesOfType(ParameterVector, None, [ParameterVector.TYPE_VECTOR_POINT])
354+
elif param.datatype == ParameterMultipleInput.TYPE_VECTOR_LINE:
355+
options = self.getAvailableValuesOfType(ParameterVector, None, [ParameterVector.TYPE_VECTOR_LINE])
356+
elif param.datatype == ParameterMultipleInput.TYPE_VECTOR_POLYGON:
357+
options = self.getAvailableValuesOfType(ParameterVector, None, [ParameterVector.TYPE_VECTOR_POLYGON])
358+
elif param.datatype == ParameterMultipleInput.TYPE_RASTER:
350359
options = self.getAvailableValuesOfType(ParameterRaster, OutputRaster)
351360
else:
352361
options = self.getAvailableValuesOfType(ParameterFile, OutputFile)

0 commit comments

Comments
 (0)