-
-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[sextante] add example provider code
- Loading branch information
Showing
7 changed files
with
308 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
FILE(GLOB PY_FILES *.py) | ||
FILE(GLOB OTHER_FILES *.txt) | ||
|
||
PLUGIN_INSTALL(sextante ./exampleprovider ${PY_FILES}) | ||
PLUGIN_INSTALL(sextante ./exampleprovider ${OTHER_FILES}) |
115 changes: 115 additions & 0 deletions
115
python/plugins/sextante/exampleprovider/ExampleAlgorithm.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
# -*- coding: utf-8 -*- | ||
|
||
""" | ||
*************************************************************************** | ||
__init__.py | ||
--------------------- | ||
Date : July 2013 | ||
Copyright : (C) 2013 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__ = 'July 2013' | ||
__copyright__ = '(C) 2013, Victor Olaya' | ||
# This will get replaced with a git SHA1 when you do a git archive | ||
__revision__ = '$Format:%H$' | ||
|
||
|
||
from PyQt4.QtCore import * | ||
from PyQt4.QtGui import * | ||
|
||
from qgis.core import * | ||
|
||
from sextante.core.Sextante import Sextante | ||
from sextante.core.GeoAlgorithm import GeoAlgorithm | ||
from sextante.core.QGisLayers import QGisLayers | ||
|
||
from sextante.parameters.ParameterVector import ParameterVector | ||
|
||
from sextante.outputs.OutputVector import OutputVector | ||
|
||
|
||
class ExampleAlgorithm(GeoAlgorithm): | ||
'''This is an example algorithm that takes a vector layer and creates | ||
a new one just with just those features of the input layer that are | ||
selected. | ||
It is meant to be used as an example of how to create your own SEXTANTE | ||
algorithms and explain methods and variables used to do it. An algorithm | ||
like this will be available in all SEXTANTE elements, and there is not need | ||
for additional work. | ||
All SEXTANTE algorithms should extend the GeoAlgorithm class. | ||
''' | ||
|
||
# constants used to refer to parameters and outputs. | ||
# They will be used when calling the algorithm from another algorithm, | ||
# or when calling SEXTANTE from the QGIS console. | ||
OUTPUT_LAYER = "OUTPUT_LAYER" | ||
INPUT_LAYER = "INPUT_LAYER" | ||
|
||
def defineCharacteristics(self): | ||
'''Here we define the inputs and output of the algorithm, along | ||
with some other properties | ||
''' | ||
|
||
# the name that the user will see in the toolbox | ||
self.name = "Create copy of layer" | ||
|
||
# the branch of the toolbox under which the algorithm will appear | ||
self.group = "Algorithms for vector layers" | ||
|
||
# we add the input vector layer. It can have any kind of geometry | ||
# It is a mandatory (not optional) one, hence the False argument | ||
self.addParameter(ParameterVector(self.INPUT_LAYER, "Input layer", ParameterVector.VECTOR_TYPE_ANY, False)) | ||
|
||
# we add a vector layer as output | ||
self.addOutput(OutputVector(self.OUTPUT_LAYER, "Output layer with selected features")) | ||
|
||
def processAlgorithm(self, progress): | ||
'''Here is where the processing itself takes place''' | ||
|
||
# the first thing to do is retrieve the values of the parameters | ||
# entered by the user | ||
inputFilename = self.getParameterValue(self.INPUT_LAYER) | ||
output = self.getOutputValue(self.OUTPUT_LAYER) | ||
|
||
# input layers vales are always a string with its location. | ||
# That string can be converted into a QGIS object (a QgsVectorLayer in | ||
# this case) using the Sextante.getObjectFromUri() method. | ||
vectorLayer = QGisLayers.getObjectFromUri(inputFilename) | ||
|
||
# And now we can process | ||
|
||
# First we create the output layer. The output value entered by the user | ||
# is a string containing a filename, so we can use it directly | ||
settings = QSettings() | ||
systemEncoding = settings.value( "/UI/encoding", "System" ) | ||
provider = vectorLayer.dataProvider() | ||
writer = QgsVectorFileWriter(output, | ||
systemEncoding, | ||
provider.fields(), | ||
provider.geometryType(), | ||
provider.crs() | ||
) | ||
|
||
# Now we take the features from input layer and add them to the output. | ||
# Method features() returns an iterator, considiring the selection that | ||
# might exisist in layer and SEXTANTE configuration that indicates | ||
# should algorithm use only selected features or all of them | ||
features = QGisLayers.features(vectorLayer) | ||
for f in features: | ||
writer.addFeature(f) | ||
|
||
# There is nothing more to do here. We do not have to open the layer | ||
# that we have created. SEXTANTE will take care of that, or will handle | ||
# it if this algorithm is executed within a complex model |
91 changes: 91 additions & 0 deletions
91
python/plugins/sextante/exampleprovider/ExampleAlgorithmProvider.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
# -*- coding: utf-8 -*- | ||
|
||
""" | ||
*************************************************************************** | ||
__init__.py | ||
--------------------- | ||
Date : July 2013 | ||
Copyright : (C) 2013 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__ = 'July 2013' | ||
__copyright__ = '(C) 2013, Victor Olaya' | ||
# This will get replaced with a git SHA1 when you do a git archive | ||
__revision__ = '$Format:%H$' | ||
|
||
|
||
from exampleprovider.ExampleAlgorithm import ExampleAlgorithm | ||
|
||
from sextante.core.AlgorithmProvider import AlgorithmProvider | ||
from sextante.core.SextanteConfig import Setting, SextanteConfig | ||
|
||
|
||
class ExampleAlgorithmProvider(AlgorithmProvider): | ||
|
||
MY_DUMMY_SETTING = "MY_DUMMY_SETTING" | ||
|
||
def __init__(self): | ||
AlgorithmProvider.__init__(self) | ||
# deactivate provider by default | ||
self.activate = False | ||
# load algorithms | ||
self.alglist = [ExampleAlgorithm()] | ||
for alg in self.alglist: | ||
alg.provider = self | ||
|
||
def initializeSettings(self): | ||
'''In this method we add settings needed to configure our provider. | ||
Do not forget to call the parent method, since it takes care or | ||
automatically adding a setting for activating or deactivating the | ||
algorithms in the provider | ||
''' | ||
AlgorithmProvider.initializeSettings(self) | ||
SextanteConfig.addSetting(Setting("Example algorithms", ExampleAlgorithmProvider.MY_DUMMY_SETTING, "Example setting", "Default value")) | ||
'''To get the parameter of a setting parameter, use | ||
SextanteConfig.getSetting(name_of_parameter) | ||
''' | ||
|
||
def unload(self): | ||
'''Setting should be removed here, so they do not appear anymore | ||
when the plugin is unloaded''' | ||
AlgorithmProvider.unload(self) | ||
SextanteConfig.removeSetting(ExampleAlgorithmProvider.MY_DUMMY_SETTING) | ||
|
||
def getName(self): | ||
'''This is the name that will appear on the toolbox group. | ||
It is also used to create the command line name of all the algorithms | ||
from this provider | ||
''' | ||
return "Example provider" | ||
|
||
def getDescription(self): | ||
'''This is the provired full name. | ||
''' | ||
return "Example algorithms" | ||
|
||
def getIcon(self): | ||
'''We return the default icon''' | ||
return AlgorithmProvider.getIcon(self) | ||
|
||
def _loadAlgorithms(self): | ||
'''Here we fill the list of algorithms in self.algs. | ||
This method is called whenever the list of algorithms should be updated. | ||
If the list of algorithms can change while executing SEXTANTE for QGIS | ||
(for instance, if it contains algorithms from user-defined scripts and | ||
a new script might have been added), you should create the list again | ||
here. | ||
In this case, since the list is always the same, we assign from the pre-made list. | ||
This assignment has to be done in this method even if the list does not change, | ||
since the self.algs list is cleared before calling this method | ||
''' | ||
self.algs = self.alglist |
49 changes: 49 additions & 0 deletions
49
python/plugins/sextante/exampleprovider/SextanteExampleProviderPlugin.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
# -*- coding: utf-8 -*- | ||
|
||
""" | ||
*************************************************************************** | ||
__init__.py | ||
--------------------- | ||
Date : July 2013 | ||
Copyright : (C) 2013 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__ = 'July 2013' | ||
__copyright__ = '(C) 2013, Victor Olaya' | ||
# This will get replaced with a git SHA1 when you do a git archive | ||
__revision__ = '$Format:%H$' | ||
|
||
|
||
import os, sys | ||
import inspect | ||
|
||
from qgis.core import * | ||
|
||
from sextante.core.Sextante import Sextante | ||
from exampleprovider.ExampleAlgorithmProvider import ExampleAlgorithmProvider | ||
|
||
cmd_folder = os.path.split(inspect.getfile(inspect.currentframe()))[0] | ||
|
||
if cmd_folder not in sys.path: | ||
sys.path.insert(0, cmd_folder) | ||
|
||
|
||
class SextanteExampleProviderPlugin: | ||
def __init__(self): | ||
self.provider = ExampleAlgorithmProvider() | ||
|
||
def initGui(self): | ||
Sextante.addProvider(self.provider) | ||
|
||
def unload(self): | ||
Sextante.removeProvider(self.provider) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
# -*- coding: utf-8 -*- | ||
|
||
""" | ||
*************************************************************************** | ||
__init__.py | ||
--------------------- | ||
Date : July 2013 | ||
Copyright : (C) 2013 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__ = 'July 2013' | ||
__copyright__ = '(C) 2013, Victor Olaya' | ||
# This will get replaced with a git SHA1 when you do a git archive | ||
__revision__ = '$Format:%H$' | ||
|
||
|
||
def classFactory(iface): | ||
from exampleprovider.SextanteExampleProviderPlugin import SextanteExampleProviderPlugin | ||
return SextanteExampleProviderPlugin() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
[general] | ||
name=SEXTANTE Example Provider | ||
description=An example plugin that adds algorithms to SEXTANTE. Mainly created to guide developers in the process of creating plugins that add new capabilities to SEXTANTE | ||
category=Analysis | ||
version=2.0 | ||
qgisMinimumVersion=2.0 | ||
|
||
author=Victor Olaya | ||
email=volayaf@gmail.com | ||
|
||
tags=analysis,sextante | ||
|
||
homepage= | ||
tracker= | ||
repository= | ||
|
||
experimental=False | ||
deprecated=False |