Showing with 1,616 additions and 1,442 deletions.
  1. +0 −15 python/plugins/sextante/SextantePlugin.py
  2. +1 −1 python/plugins/sextante/__init__.py
  3. +3 −5 python/plugins/sextante/algs/AddTableField.py
  4. +13 −14 python/plugins/sextante/algs/AutoincrementalField.py
  5. +66 −0 python/plugins/sextante/algs/CreateConstantRaster.py
  6. +17 −27 python/plugins/sextante/algs/EquivalentNumField.py
  7. +2 −6 python/plugins/sextante/algs/Explode.py
  8. +10 −16 python/plugins/sextante/algs/FieldPyculator.py
  9. +7 −7 python/plugins/sextante/algs/FieldsCalculator.py
  10. +16 −23 python/plugins/sextante/algs/JoinAttributes.py
  11. +5 −3 python/plugins/sextante/algs/QGISAlgorithmProvider.py
  12. +1 −1 python/plugins/sextante/algs/SaveSelectedFeatures.py
  13. +2 −2 python/plugins/sextante/algs/ftools/BasicStatisticsNumbers.py
  14. +1 −1 python/plugins/sextante/algs/ftools/BasicStatisticsStrings.py
  15. +3 −3 python/plugins/sextante/algs/ftools/Buffer.py
  16. +4 −4 python/plugins/sextante/algs/ftools/Centroids.py
  17. +48 −48 python/plugins/sextante/algs/ftools/Clip.py
  18. +16 −12 python/plugins/sextante/algs/ftools/ConvexHull.py
  19. +10 −11 python/plugins/sextante/algs/ftools/Delaunay.py
  20. +3 −7 python/plugins/sextante/algs/ftools/DensifyGeometries.py
  21. +4 −8 python/plugins/sextante/algs/ftools/DensifyGeometriesInterval.py
  22. +6 −11 python/plugins/sextante/algs/ftools/Difference.py
  23. +10 −15 python/plugins/sextante/algs/ftools/Dissolve.py
  24. +43 −43 python/plugins/sextante/algs/ftools/ExtentFromLayer.py
  25. +0 −1 python/plugins/sextante/algs/ftools/ExtractNodes.py
  26. +51 −19 python/plugins/sextante/algs/ftools/FToolsUtils.py
  27. +15 −18 python/plugins/sextante/algs/ftools/Intersection.py
  28. +6 −13 python/plugins/sextante/algs/ftools/LinesIntersection.py
  29. +2 −3 python/plugins/sextante/algs/ftools/LinesToPolygons.py
  30. +12 −21 python/plugins/sextante/algs/ftools/MeanCoords.py
  31. +3 −4 python/plugins/sextante/algs/ftools/MultipartToSingleparts.py
  32. +3 −6 python/plugins/sextante/algs/ftools/NearestNeighbourAnalysis.py
  33. +17 −33 python/plugins/sextante/algs/ftools/PointDistance.py
  34. +6 −9 python/plugins/sextante/algs/ftools/PointsInPolygon.py
  35. +8 −11 python/plugins/sextante/algs/ftools/PointsInPolygonUnique.py
  36. +8 −11 python/plugins/sextante/algs/ftools/PointsInPolygonWeighted.py
  37. +3 −6 python/plugins/sextante/algs/ftools/PolygonsToLines.py
  38. +1 −1 python/plugins/sextante/algs/ftools/RandomSelection.py
  39. +3 −7 python/plugins/sextante/algs/ftools/RandomSelectionWithinSubsets.py
  40. +2 −4 python/plugins/sextante/algs/ftools/ReprojectLayer.py
  41. +24 −55 python/plugins/sextante/algs/ftools/SelectByLocation.py
  42. +2 −3 python/plugins/sextante/algs/ftools/SimplifyGeometries.py
  43. +4 −6 python/plugins/sextante/algs/ftools/SinglePartsToMultiparts.py
  44. +11 −11 python/plugins/sextante/algs/ftools/SumLines.py
  45. +18 −20 python/plugins/sextante/algs/ftools/Union.py
  46. +7 −4 python/plugins/sextante/algs/ftools/UniqueValues.py
  47. +1 −2 python/plugins/sextante/algs/ftools/VariableDistanceBuffer.py
  48. +2 −5 python/plugins/sextante/algs/ftools/VoronoiPolygons.py
  49. +734 −309 python/plugins/sextante/algs/mmqgisx/MMQGISXAlgorithms.py
  50. +20 −348 python/plugins/sextante/algs/mmqgisx/mmqgisx_library.py
  51. +9 −8 python/plugins/sextante/core/GeoAlgorithm.py
  52. +7 −3 python/plugins/sextante/core/QGisLayers.py
  53. +6 −6 python/plugins/sextante/core/Sextante.py
  54. +19 −8 python/plugins/sextante/core/SextanteRasterWriter.py
  55. +6 −1 python/plugins/sextante/core/SextanteVectorWriter.py
  56. +3 −5 python/plugins/sextante/grass/description/r.aspect.txt
  57. +1 −1 python/plugins/sextante/grass/description/r.rescale.txt
  58. +1 −1 python/plugins/sextante/grass/description/v.buffer.column.txt
  59. +1 −1 python/plugins/sextante/grass/description/v.buffer.distance.txt
  60. +1 −1 python/plugins/sextante/grass/description/v.class.txt
  61. +1 −1 python/plugins/sextante/grass/description/v.delaunay.txt
  62. +14 −12 python/plugins/sextante/gui/MultipleInputPanel.py
  63. +3 −6 python/plugins/sextante/gui/OutputSelectionPanel.py
  64. +1 −1 python/plugins/sextante/gui/ParametersPanel.py
  65. +1 −1 python/plugins/sextante/gui/UnthreadedAlgorithmExecutor.py
  66. +71 −19 python/plugins/sextante/modeler/ModelerAlgorithm.py
  67. +1 −1 python/plugins/sextante/modeler/ModelerDialog.py
  68. +1 −1 python/plugins/sextante/modeler/ModelerGraphicItem.py
  69. +96 −27 python/plugins/sextante/modeler/ModelerParametersDialog.py
  70. +3 −0 python/plugins/sextante/modeler/ModelerScene.py
  71. +78 −0 python/plugins/sextante/modeler/MultilineTextPanel.py
  72. +6 −1 python/plugins/sextante/modeler/models/watersheds.model
  73. +0 −11 python/plugins/sextante/outputs/OutputRaster.py
  74. +1 −1 python/plugins/sextante/outputs/OutputVector.py
  75. +1 −1 python/plugins/sextante/parameters/ParameterRaster.py
  76. +2 −1 python/plugins/sextante/parameters/ParameterTable.py
  77. +2 −1 python/plugins/sextante/parameters/ParameterVector.py
  78. +2 −2 python/plugins/sextante/saga/description/GridNormalisation.txt
  79. +12 −0 python/plugins/sextante/script/scripts/Create_tiling_from_vector_layer.py
  80. +1 −26 python/plugins/sextante/script/scripts/Hex_grid_from_layer_bounds.py
  81. +0 −25 python/plugins/sextante/script/scripts/Number_of_unique_values_in_classes.py
  82. +0 −19 python/plugins/sextante/script/scripts/Save_selected_features.py
  83. +11 −37 python/plugins/sextante/script/scripts/Split_vector_layer_by_attribute.py
15 changes: 0 additions & 15 deletions python/plugins/sextante/SextantePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,9 @@

import os, sys
import inspect

from PyQt4.QtCore import *
from PyQt4.QtGui import *

from qgis.core import *

from sextante.core.Sextante import Sextante
from sextante.core.QGisLayers import QGisLayers
from sextante.core.SextanteUtils import SextanteUtils
Expand Down Expand Up @@ -94,14 +91,6 @@ def initGui(self):
self.resultsAction.triggered.connect(self.openResults)
self.menu.addAction(self.resultsAction)

#=======================================================================
# self.helpAction = QAction(QIcon(":/sextante/images/help.png"),
# QCoreApplication.translate("SEXTANTE", "&SEXTANTE help"),
# self.iface.mainWindow())
# self.helpAction.triggered.connect(self.openHelp)
# self.menu.addAction(self.helpAction)
#=======================================================================

menuBar = self.iface.mainWindow().menuBar()
menuBar.insertMenu(menuBar.actions()[-1], self.menu)

Expand Down Expand Up @@ -143,7 +132,3 @@ def openConfig(self):
dlg = ConfigDialog(self.toolbox)
dlg.exec_()

#===========================================================================
# def openHelp(self):
# QDesktopServices.openUrl(QUrl(os.path.dirname(__file__) + "/help/index.html"))
#===========================================================================
2 changes: 1 addition & 1 deletion python/plugins/sextante/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
***************************************************************************
"""

from sextante.core.Sextante import runalg, runandload, alghelp, alglist, algoptions, load, loadFromAlg, extent, getObjectFromName, getObjectFromUri
from sextante.core.Sextante import runalg, runandload, alghelp, alglist, algoptions, load, loadFromAlg, extent, getObjectFromName, getObjectFromUri, features

__author__ = 'Victor Olaya'
__date__ = 'August 2012'
Expand Down
8 changes: 3 additions & 5 deletions python/plugins/sextante/algs/AddTableField.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,23 +63,21 @@ def processAlgorithm(self, progress):
output = self.getOutputFromName(self.OUTPUT_LAYER)
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT_LAYER))
vprovider = vlayer.dataProvider()
allAttrs = vprovider.attributeIndexes()
vprovider.select( allAttrs )
fields = vprovider.fields()
fields[len(fields)] = QgsField(fieldname, self.TYPES[fieldtype])
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs() )
outFeat = QgsFeature()
inGeom = QgsGeometry()
nFeat = vprovider.featureCount()
inGeom = QgsGeometry()
nElement = 0
features = QGisLayers.features(vlayer)
nFeat = len(features)
for inFeat in features:
progress.setPercentage(int((100 * nElement)/nFeat))
nElement += 1
inGeom = inFeat.geometry()
outFeat.setGeometry( inGeom )
atMap = inFeat.attributeMap()
outFeat.setAttributeMap( atMap )
atMap.append(QVariant())
outFeat.addAttribute( len(vprovider.fields()), QVariant() )
writer.addFeature( outFeat )
del writer
Expand Down
27 changes: 13 additions & 14 deletions python/plugins/sextante/algs/AutoincrementalField.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,6 @@
from sextante.parameters.ParameterVector import ParameterVector
from sextante.core.QGisLayers import QGisLayers
from sextante.outputs.OutputVector import OutputVector
import os
from PyQt4 import QtGui

class AutoincrementalField(GeoAlgorithm):

Expand All @@ -46,25 +44,24 @@ def processAlgorithm(self, progress):
output = self.getOutputFromName(self.OUTPUT)
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT))
vprovider = vlayer.dataProvider()
allAttrs = vprovider.attributeIndexes()
vprovider.select( allAttrs )
fields = vprovider.fields()
fields[len(fields)] = QgsField("AUTO", QVariant.Int)
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs() )
inFeat = QgsFeature()
outFeat = QgsFeature()
inGeom = QgsGeometry()
nFeat = vprovider.featureCount()
nElement = 0
while vprovider.nextFeature(inFeat):
progress.setPercentage(int((100 * nElement)/nFeat))
nElement += 1
inGeom = inFeat.geometry()
outFeat.setGeometry( inGeom )
atMap = inFeat.attributeMap()
outFeat.setAttributeMap( atMap )
outFeat.addAttribute( len(vprovider.fields()), QVariant(nElement) )
writer.addFeature( outFeat )
features = QGisLayers.features(vlayer)
nFeat = len(features)
for inFeat in features:
progress.setPercentage(int((100 * nElement)/nFeat))
nElement += 1
inGeom = inFeat.geometry()
outFeat.setGeometry( inGeom )
atMap = inFeat.attributeMap()
atMap.append(QVariant(nElement))
outFeat.setAttributeMap( atMap )
writer.addFeature( outFeat )
del writer

def defineCharacteristics(self):
Expand All @@ -73,3 +70,5 @@ def defineCharacteristics(self):
self.addParameter(ParameterVector(self.INPUT, "Input layer", ParameterVector.VECTOR_TYPE_ANY))
self.addOutput(OutputVector(self.OUTPUT, "Output layer"))



66 changes: 66 additions & 0 deletions python/plugins/sextante/algs/CreateConstantRaster.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
from sextante.core.SextanteRasterWriter import SextanteRasterWriter
from sextante.parameters.ParameterRaster import ParameterRaster



# -*- coding: utf-8 -*-

"""
***************************************************************************
AutoincrementalField.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'
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'

from sextante.core.GeoAlgorithm import GeoAlgorithm
from PyQt4.QtCore import *
from qgis.core import *
from sextante.parameters.ParameterNumber import ParameterNumber
from sextante.outputs.OutputRaster import OutputRaster
from sextante.core.QGisLayers import QGisLayers

class CreateConstantRaster(GeoAlgorithm):

INPUT = "INPUT"
OUTPUT = "OUTPUT"
NUMBER = "NUMBER"

#===========================================================================
# def getIcon(self):
# return QtGui.QIcon(os.path.dirname(__file__) + "/../images/toolbox.png")
#===========================================================================

def processAlgorithm(self, progress):
output = self.getOutputFromName(self.OUTPUT)
value = self.getOutputValue(self.NUMBER)
layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT))
cellsize = (layer.extent().xMaximum() - layer.extent().xMinimum())/layer.width()
w = SextanteRasterWriter(output.getCompatibleFileName(self), layer.extent().xMinimum(), layer.extent().yMinimum(), layer.extent().xMaximum(),
layer.extent().yMaximum(), cellsize, 1, self.crs)
w.matrix[:] = value
w.close()

def defineCharacteristics(self):
self.name = "Create constant raster layer"
self.group = "Raster tools"
self.addParameter(ParameterRaster(self.INPUT, "Reference layer"))
self.addParameter(ParameterNumber(self.NUMBER, "Constant value", default = 1.0));
self.addOutput(OutputRaster(self.OUTPUT, "Output layer"))


44 changes: 17 additions & 27 deletions python/plugins/sextante/algs/EquivalentNumField.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
from sextante.parameters.ParameterVector import ParameterVector
from sextante.core.QGisLayers import QGisLayers
from sextante.outputs.OutputVector import OutputVector
from PyQt4 import QtGui
from sextante.parameters.ParameterTableField import ParameterTableField

class EquivalentNumField(GeoAlgorithm):
Expand All @@ -48,37 +47,28 @@ def processAlgorithm(self, progress):
output = self.getOutputFromName(self.OUTPUT)
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT))
vprovider = vlayer.dataProvider()
field_index = vprovider.fieldNameIndex(fieldname)
allAttrs = vprovider.attributeIndexes()
vprovider.select(allAttrs)
fieldindex = vlayer.fieldNameIndex(fieldname)
fields = vprovider.fields()
fields[len(fields)] = QgsField("NUM_FIELD", QVariant.Int)
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs() )
inFeat = QgsFeature()
fields.append(QgsField("NUM_FIELD", QVariant.Int))
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs() )
outFeat = QgsFeature()
inGeom = QgsGeometry()
nFeat = vprovider.featureCount()
inGeom = QgsGeometry()
nElement = 0
classes = {}
features = QGisLayers.features(layer)
features = QGisLayers.features(vlayer)
nFeat = len(features)
for feature in features:
progress.setPercentage(int((100 * nElement)/nFeat))
nElement += 1
atMap = feature.attributeMap()
clazz = atMap[field_index].toString()
if clazz not in classes:
classes[clazz] = len(classes.keys())
features = QGisLayers.features(layer)
for feature in features:
progress.setPercentage(int((100 * nElement)/nFeat))
nElement += 1
inGeom = features.geometry()
outFeat.setGeometry( inGeom )
atMap = inFeat.attributeMap()
clazz = atMap[field_index].toString()
outFeat.setAttributeMap( atMap )
outFeat.addAttribute( len(vprovider.fields()), QVariant(classes[clazz]) )
writer.addFeature( outFeat )
progress.setPercentage(int((100 * nElement)/nFeat))
nElement += 1
inGeom = feature.geometry()
outFeat.setGeometry( inGeom )
atMap = feature.attributes()
clazz = atMap[fieldindex].toString()
if clazz not in classes:
classes[clazz] = len(classes.keys())
atMap.append(QVariant(classes[clazz]))
outFeat.setAttributes(atMap)
writer.addFeature( outFeat )
del writer

def defineCharacteristics(self):
Expand Down
8 changes: 2 additions & 6 deletions python/plugins/sextante/algs/Explode.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
__revision__ = '$Format:%H$'

from sextante.core.GeoAlgorithm import GeoAlgorithm
from PyQt4 import QtGui
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
Expand All @@ -46,11 +45,8 @@ def processAlgorithm(self, progress):
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT))
output = self.getOutputFromName(self.OUTPUT)
vprovider = vlayer.dataProvider()
allAttrs = vprovider.attributeIndexes()
vprovider.select( allAttrs )
fields = vprovider.fields()
writer = output.getVectorWriter(fields, QGis.WKBLineString, vprovider.crs() )
inFeat = QgsFeature()
outFeat = QgsFeature()
inGeom = QgsGeometry()
nFeat = vprovider.featureCount()
Expand All @@ -60,9 +56,9 @@ def processAlgorithm(self, progress):
nElement += 1
progress.setPercentage((nElement*100)/nFeat)
inGeom = feature.geometry()
atMap = feature.attributeMap()
atMap = feature.attributes()
segments = self.extractAsSingleSegments( inGeom )
outFeat.setAttributeMap( atMap )
outFeat.setAttributes( atMap )
for segment in segments:
outFeat.setGeometry(segment)
writer.addFeature(outFeat)
Expand Down
26 changes: 10 additions & 16 deletions python/plugins/sextante/algs/FieldPyculator.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ def processAlgorithm(self, progress):
allAttrs = vprovider.attributeIndexes()
vprovider.select( allAttrs )
fields = vprovider.fields()
fields[len(fields)] = QgsField(fieldname, QVariant.Double)
fields.append(QgsField(fieldname, QVariant.Double))
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs() )
outFeat = QgsFeature()
new_ns = {}
Expand All @@ -86,11 +86,13 @@ def processAlgorithm(self, progress):
(unicode(sys.exc_info()[0].__name__), unicode(sys.exc_info()[1])))

#replace all fields tags
field_map = vprovider.fields()
for num, field in field_map.iteritems():
fields = vprovider.fields()
num = 0
for field in fields:
field_name = unicode(field.name())
replval = '__attr[' + str(num) + ']'
code = code.replace("<"+field_name+">",replval)
num += 1

#replace all special vars
code = code.replace('$id','__id')
Expand All @@ -109,18 +111,12 @@ def processAlgorithm(self, progress):
(unicode(sys.exc_info()[0].__name__), unicode(sys.exc_info()[1])))

#run
if need_attrs:
attr_ind = vprovider.attributeIndexes()
else:
attr_ind = []
vprovider.select(attr_ind, QgsRectangle(), True)

features = QGisLayers.features(layer)
nFeatures = len(features)
nElement = 1
for feat in features:
progress.setPercentage(int((100 * nElement)/nFeatures))
attrMap = feat.attributeMap()
attrMap = feat.attributes()
feat_id = feat.id()

#add needed vars
Expand All @@ -132,10 +128,8 @@ def processAlgorithm(self, progress):
new_ns['__geom'] = geom

if need_attrs:
attr = []
for num,a in attrMap.iteritems():
attr.append(self.Qvar2py(a))
new_ns['__attr'] = attr
pyattrs = [self.Qvar2py(a) for a in attrMap]
new_ns['__attr'] = pyattrs

#clear old result
if new_ns.has_key(self.RESULT_VAR_NAME):
Expand Down Expand Up @@ -165,8 +159,8 @@ def processAlgorithm(self, progress):
#write feature
nElement += 1
outFeat.setGeometry( feat.geometry() )
outFeat.setAttributeMap( attrMap )
outFeat.addAttribute(len(vprovider.fields()), QVariant(new_ns[self.RESULT_VAR_NAME]))
attrMap.append(QVariant(new_ns[self.RESULT_VAR_NAME]))
outFeat.setAttributeMap( attrMap )
writer.addFeature(outFeat)

del writer
Expand Down
14 changes: 7 additions & 7 deletions python/plugins/sextante/algs/FieldsCalculator.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,8 @@ def processAlgorithm(self, progress):
output = self.getOutputFromName(self.OUTPUT_LAYER)
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT_LAYER))
vprovider = vlayer.dataProvider()
allAttrs = vprovider.attributeIndexes()
vprovider.select(allAttrs)
fields = vprovider.fields()
fields[len(fields)] = QgsField(fieldname, QVariant.Double)
fields.append(QgsField(fieldname, QVariant.Double))
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs())
outFeat = QgsFeature()
inGeom = QgsGeometry()
Expand All @@ -72,10 +70,12 @@ def processAlgorithm(self, progress):
features = QGisLayers.features(vlayer)
for inFeat in features:
progress.setPercentage(int((100 * nElement) / nFeat))
attrs = inFeat.attributeMap()
attrs = inFeat.attributes()
expression = formula
for (k, attr) in attrs.iteritems():
k = 0
for attr in attrs:
expression = expression.replace(str(fields[k].name()), str(attr.toString()))
k += 1
try:
result = eval(expression)
except Exception:
Expand All @@ -85,8 +85,8 @@ def processAlgorithm(self, progress):
inGeom = inFeat.geometry()
outFeat.setGeometry(inGeom)
atMap = inFeat.attributeMap()
outFeat.setAttributeMap(atMap)
outFeat.addAttribute(len(vprovider.fields()), QVariant(result))
atMap.append(QVariant(result))
outFeat.setAttributeMap(atMap)
writer.addFeature(outFeat)
del writer

Expand Down
Loading