Skip to content

Commit 7ceb460

Browse files
committed
Merge linfiniti2:/tmp/sextante into sextante-import
2 parents 17f91e7 + 9f47d96 commit 7ceb460

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+674
-247
lines changed

python/plugins/sextante/about/about.htm

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@ <h2>SEXTANTE for QGIS</h2>
99
<p>A development by Victor Olaya (volayaf@gmail.com).</p>
1010
<p>Portions of this software contributed by:
1111
<ul>
12-
<li>Michael Nimm (mmqgis algorithms)</li>
12+
<li>Alexander Bruy</li>
1313
<li>Carson Farmer (fTools algorithms)</li>
1414
<li>Julien Malik (Orfeo Toolbox connectors)</li>
15+
<li>Evgeniy Nikulin (Original Field Pyculator code)</li>
16+
<li>Michael Nimm (mmqgis algorithms)</li>
1517
<li>Camilo Polymeris (Threading). Developed as part of Google Summer of Code 2012</li>
1618
</ul>
1719
</p>

python/plugins/sextante/algs/AddTableField.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,14 @@ def defineCharacteristics(self):
3434
def processAlgorithm(self, progress):
3535
fieldtype = self.getParameterValue(self.FIELD_TYPE)
3636
fieldname = self.getParameterValue(self.FIELD_NAME)
37-
settings = QSettings()
38-
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
39-
output = self.getOutputValue(self.OUTPUT_LAYER)
37+
output = self.getOutputFromName(self.OUTPUT_LAYER)
4038
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT_LAYER))
4139
vprovider = vlayer.dataProvider()
4240
allAttrs = vprovider.attributeIndexes()
4341
vprovider.select( allAttrs )
4442
fields = vprovider.fields()
4543
fields[len(fields)] = QgsField(fieldname, self.TYPES[fieldtype])
46-
writer = QgsVectorFileWriter( output, systemEncoding,fields, vprovider.geometryType(), vprovider.crs() )
44+
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs() )
4745
inFeat = QgsFeature()
4846
outFeat = QgsFeature()
4947
inGeom = QgsGeometry()

python/plugins/sextante/algs/AutoincrementalField.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,14 @@ def getIcon(self):
1616
return QtGui.QIcon(os.path.dirname(__file__) + "/../images/toolbox.png")
1717

1818
def processAlgorithm(self, progress):
19-
settings = QSettings()
20-
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
21-
output = self.getOutputValue(self.OUTPUT)
19+
output = self.getOutputFromName(self.OUTPUT)
2220
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT))
2321
vprovider = vlayer.dataProvider()
2422
allAttrs = vprovider.attributeIndexes()
2523
vprovider.select( allAttrs )
2624
fields = vprovider.fields()
2725
fields[len(fields)] = QgsField("AUTO", QVariant.Int)
28-
writer = QgsVectorFileWriter( output, systemEncoding,fields, vprovider.geometryType(), vprovider.crs() )
26+
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs() )
2927
inFeat = QgsFeature()
3028
outFeat = QgsFeature()
3129
inGeom = QgsGeometry()

python/plugins/sextante/algs/EquivalentNumField.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,14 @@ def getIcon(self):
1919

2020
def processAlgorithm(self, progress):
2121
field_index = self.getParameterValue(self.FIELD)
22-
settings = QSettings()
23-
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
24-
output = self.getOutputValue(self.OUTPUT)
22+
output = self.getOutputFromName(self.OUTPUT)
2523
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT))
2624
vprovider = vlayer.dataProvider()
2725
allAttrs = vprovider.attributeIndexes()
2826
vprovider.select( allAttrs )
2927
fields = vprovider.fields()
3028
fields[len(fields)] = QgsField("NUM_FIELD", QVariant.Int)
31-
writer = QgsVectorFileWriter( output, systemEncoding,fields, vprovider.geometryType(), vprovider.crs() )
29+
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs() )
3230
inFeat = QgsFeature()
3331
outFeat = QgsFeature()
3432
inGeom = QgsGeometry()

python/plugins/sextante/algs/Explode.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,13 @@ def getIcon(self):
1717
return QtGui.QIcon(os.path.dirname(__file__) + "/../images/toolbox.png")
1818

1919
def processAlgorithm(self, progress):
20-
settings = QSettings()
21-
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
2220
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT))
23-
output = self.getOutputValue(self.OUTPUT)
21+
output = self.getOutputFromName(self.OUTPUT)
2422
vprovider = vlayer.dataProvider()
2523
allAttrs = vprovider.attributeIndexes()
2624
vprovider.select( allAttrs )
2725
fields = vprovider.fields()
28-
writer = QgsVectorFileWriter( output, systemEncoding,
29-
fields, QGis.WKBLineString, vprovider.crs() )
26+
writer = output.getVectorWriter(fields, QGis.WKBLineString, vprovider.crs() )
3027
inFeat = QgsFeature()
3128
outFeat = QgsFeature()
3229
inGeom = QgsGeometry()

python/plugins/sextante/algs/FieldsCalculator.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,14 @@ def defineCharacteristics(self):
3232
def processAlgorithm(self, progress):
3333
fieldname = self.getParameterValue(self.FIELD_NAME)
3434
formula = self.getParameterValue(self.FORMULA)
35-
settings = QSettings()
36-
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
37-
output = self.getOutputValue(self.OUTPUT_LAYER)
35+
output = self.getOutputFromName(self.OUTPUT_LAYER)
3836
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT_LAYER))
3937
vprovider = vlayer.dataProvider()
4038
allAttrs = vprovider.attributeIndexes()
4139
vprovider.select( allAttrs )
4240
fields = vprovider.fields()
4341
fields[len(fields)] = QgsField(fieldname, QVariant.Double)
44-
writer = QgsVectorFileWriter( output, systemEncoding,fields, vprovider.geometryType(), vprovider.crs() )
42+
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs() )
4543
inFeat = QgsFeature()
4644
outFeat = QgsFeature()
4745
inGeom = QgsGeometry()

python/plugins/sextante/algs/SaveSelectedFeatures.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def processAlgorithm(self, progress):
5050
#the first thing to do is retrieve the values of the parameters
5151
#entered by the user
5252
inputFilename = self.getParameterValue(self.INPUT_LAYER)
53-
output = self.getOutputValue(self.OUTPUT_LAYER)
53+
output = self.getOutputFromName(self.OUTPUT_LAYER)
5454

5555
#input layers values are always a string with its location.
5656
#That string can be converted into a QGIS object (a QgsVectorLayer in this case))
@@ -60,12 +60,10 @@ def processAlgorithm(self, progress):
6060
#And now we can process
6161

6262
#First we create the output layer.
63-
#The output value entered by the user is a string containing a filename,
64-
#so we can use it directly
65-
settings = QSettings()
66-
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
63+
#To do so, we call the getVectorWriter method in the Output object.
64+
#That will give as a SextanteVectorWriter, that we can later use to add features.
6765
provider = vectorLayer.dataProvider()
68-
writer = QgsVectorFileWriter( output, systemEncoding, provider.fields(), provider.geometryType(), provider.crs() )
66+
writer = output.getVectorWriter( provider.fields(), provider.geometryType(), provider.crs() )
6967

7068
#Now we take the selected features and add them to the output layer
7169
selection = vectorLayer.selectedFeatures()

python/plugins/sextante/algs/SextanteAlgorithmProvider.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@
66
from sextante.algs.SaveSelectedFeatures import SaveSelectedFeatures
77
from sextante.algs.Explode import Explode
88
from sextante.algs.AutoincrementalField import AutoincrementalField
9+
from sextante.algs.FieldPyculator import FieldsPyculator
910

1011
class SextanteAlgorithmProvider(AlgorithmProvider):
1112

1213
def __init__(self):
1314
AlgorithmProvider.__init__(self)
1415
self.alglist = [AddTableField(), FieldsCalculator(), SaveSelectedFeatures(),
15-
AutoincrementalField(), Explode()]
16+
AutoincrementalField(), Explode(), FieldsPyculator()]
1617

1718
def initializeSettings(self):
1819
AlgorithmProvider.initializeSettings(self)
@@ -33,3 +34,6 @@ def getIcon(self):
3334

3435
def _loadAlgorithms(self):
3536
self.algs = self.alglist
37+
38+
def supportsNonFileBasedOutput(self):
39+
return True

python/plugins/sextante/core/AlgorithmProvider.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from sextante.core.SextanteConfig import Setting, SextanteConfig
22
import os
33
from PyQt4 import QtGui
4+
from qgis.core import *
45

56
class AlgorithmProvider():
67
'''this is the base class for algorithms providers.
@@ -67,7 +68,19 @@ def getSupportedOutputRasterLayerExtensions(self):
6768
return ["tif"]
6869

6970
def getSupportedOutputVectorLayerExtensions(self):
70-
return ["shp"]
71+
formats = QgsVectorFileWriter.supportedFiltersAndFormats()
72+
extensions = ["shp"]#shp is the default, should be the first
73+
for extension in formats.keys():
74+
extension = str(extension)
75+
extension = extension[extension.find('*.') + 2:]
76+
extension = extension[:extension.find(" ")]
77+
if extension.lower() != "shp":
78+
extensions.append(extension)
79+
return extensions
80+
#return ["shp"]
7181

7282
def getSupportedOutputTableExtensions(self):
73-
return ["dbf"]
83+
return ["dbf"]
84+
85+
def supportsNonFileBasedOutput(self):
86+
return False

python/plugins/sextante/core/GeoAlgorithm.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
from sextante.parameters.ParameterRaster import ParameterRaster
55
from sextante.parameters.ParameterVector import ParameterVector
66
from PyQt4 import QtGui
7+
from PyQt4.QtCore import *
8+
from qgis.core import *
79
import os.path
810
from sextante.core.SextanteUtils import SextanteUtils
911
from sextante.parameters.ParameterMultipleInput import ParameterMultipleInput
@@ -117,20 +119,27 @@ def execute(self, progress):
117119
except GeoAlgorithmExecutionException, gaee:
118120
SextanteLog.addToLog(SextanteLog.LOG_ERROR, gaee.msg)
119121
raise gaee
120-
except Exception, e:
122+
except:
121123
#if something goes wrong and is not caught in the algorithm,
122124
#we catch it here and wrap it
123-
lines = []
124-
lines.append(str(e))
125-
lines.append(traceback.format_exc().replace("\n", "|"))
125+
lines = ["Uncaught error while executing algorithm"]
126+
errstring = traceback.format_exc()
127+
newline = errstring.find("\n")
128+
if newline != -1:
129+
lines.append(errstring[:newline])
130+
else:
131+
lines.append(errstring)
132+
lines.append(errstring.replace("\n", "|"))
126133
SextanteLog.addToLog(SextanteLog.LOG_ERROR, lines)
127-
raise GeoAlgorithmExecutionException(str(e))
134+
raise GeoAlgorithmExecutionException(errstring)
128135

129136
def checkOutputFileExtensions(self):
130137
'''Checks if the values of outputs are correct and have one of the supported output extensions.
131138
If not, it adds the first one of the supported extensions, which is assumed to be the default one'''
132139
for out in self.outputs:
133140
if (not out.hidden) and out.value != None:
141+
if not os.path.isabs(out.value):
142+
continue
134143
if isinstance(out, OutputRaster):
135144
exts = self.provider.getSupportedOutputRasterLayerExtensions()
136145
elif isinstance(out, OutputVector):
@@ -263,3 +272,5 @@ def getAsCommand(self):
263272
s+=out.getValueAsCommandLineParameter() + ","
264273
s= s[:-1] + ")"
265274
return s
275+
276+

0 commit comments

Comments
 (0)