7 changes: 4 additions & 3 deletions python/plugins/processing/algs/mmqgisx/MMQGISXAlgorithms.py
Original file line number Diff line number Diff line change
Expand Up @@ -1136,7 +1136,8 @@ def processAlgorithm(self, progress):

filename = self.getParameterValue(self.LAYERNAME)
layer = dataobjects.getObjectFromUri(filename)

provider = layer.dataProvider()
fields = provider.fields()
attribute = self.getParameterValue(self.ATTRIBUTE)
comparison = self.comparisons[self.getParameterValue(self.COMPARISON)]
comparisonvalue = self.getParameterValue(self.COMPARISONVALUE)
Expand All @@ -1146,8 +1147,8 @@ def processAlgorithm(self, progress):
features = vector.features(layer)
featureCount = len(features)
output = self.getOutputFromName(self.OUTPUT)
writer = output.getVectorWriter(layer.fields(),
layer.geometryType(), layer.crs())
writer = output.getVectorWriter(fields,
provider.geometryType(), layer.crs())
for (i, feat) in enumerate(features):
if feat.id() in selected:
writer.addFeature(feat)
Expand Down
10 changes: 9 additions & 1 deletion python/plugins/processing/script/ScriptAlgorithm.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@
from processing.outputs.OutputFactory import OutputFactory
from processing.script.WrongScriptException import WrongScriptException


class ScriptAlgorithm(GeoAlgorithm):

def __init__(self, descriptionFile, script=None):
Expand Down Expand Up @@ -141,6 +140,15 @@ def processParameterLine(self, line):
elif tokens[1].lower().strip() == 'vector':
param = ParameterVector(tokens[0], desc,
[ParameterVector.VECTOR_TYPE_ANY])
elif tokens[1].lower().strip() == 'vector point':
param = ParameterVector(tokens[0], desc,
[ParameterVector.VECTOR_TYPE_POINT])
elif tokens[1].lower().strip() == 'vector line':
param = ParameterVector(tokens[0], desc,
[ParameterVector.VECTOR_TYPE_LINE])
elif tokens[1].lower().strip() == 'vector polygon':
param = ParameterVector(tokens[0], desc,
[ParameterVector.VECTOR_TYPE_POLYGON])
elif tokens[1].lower().strip() == 'table':
param = ParameterTable(tokens[0], desc, False)
elif tokens[1].lower().strip() == 'multiple raster':
Expand Down
28 changes: 5 additions & 23 deletions python/plugins/processing/tools/vector.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,34 +43,16 @@ class Features:

def __init__(self, layer):
self.layer = layer
self.iter = layer.getFeatures()
self.selection = False
self.iter = layer.getFeatures()
if ProcessingConfig.getSetting(ProcessingConfig.USE_SELECTED):
self.selected = layer.selectedFeatures()
if len(self.selected) > 0:
selected = layer.selectedFeatures()
if len(selected) > 0:
self.selection = True
self.idx = 0
self.iter = iter(selected)

def __iter__(self):
return self

def next(self):
if self.selection:
if self.idx < len(self.selected):
feature = self.selected[self.idx]
self.idx += 1
return feature
else:
raise StopIteration()
else:
if self.iter.isClosed():
raise StopIteration()
f = QgsFeature()
if self.iter.nextFeature(f):
return f
else:
self.iter.close()
raise StopIteration()
return self.iter

def __len__(self):
if self.selection:
Expand Down