Skip to content

Commit b7d940e

Browse files
author
volayaf
committed
finished conversion of models into python code
git-svn-id: http://sextante.googlecode.com/svn/trunk/soft/bindings/qgis-plugin@46 881b9c09-3ef8-f3c2-ec3d-21d735c97f4d
1 parent 50a8ce3 commit b7d940e

12 files changed

+113
-32
lines changed

src/sextante/core/AlgorithmProvider.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import os
33
from PyQt4 import QtGui
44
class AlgorithmProvider():
5-
65
def __init__(self):
76
name = "ACTIVATE_" + self.getName().upper().replace(" ", "_")
87
SextanteConfig.addSetting(Setting(self.getName(), name, "Activate", True))
@@ -20,7 +19,7 @@ def loadAlgorithms(self):
2019
else:
2120
self._loadAlgorithms()
2221

23-
#methods to be overriden.
22+
#methods to be overridden.
2423
#==============================
2524

2625
#Algorithm loading should take place here

src/sextante/core/QGisLayers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def getVectorLayers(shapetype=-1):
2424
layers = QGisLayers.iface.legendInterface().layers()
2525
vector = list()
2626
for layer in layers:
27-
if layer.type() == layer.VectorLayer :
27+
if layer.type() == layer.VectorLayer:
2828
if shapetype == QGisLayers.ALL_TYPES or layer.geometryType() == shapetype:
2929
vector.append(layer)
3030
return vector

src/sextante/gui/ParametersDialog.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,6 @@ def setParamValue(self, param, widget):
255255
value.append(options[index])
256256
return param.setValue(value)
257257
else:
258-
259258
return param.setValue(str(widget.text()))
260259

261260

src/sextante/modeler/ModelerAlgorithm.py

Lines changed: 82 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@
77
from sextante.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
88
import os.path
99
from sextante.parameters.ParameterMultipleInput import ParameterMultipleInput
10+
from sextante.outputs.OutputRaster import OutputRaster
11+
from sextante.outputs.OutputHTML import OutputHTML
12+
from sextante.outputs.OutputTable import OutputTable
13+
from sextante.outputs.OutputVector import OutputVector
1014

1115
class ModelerAlgorithm(GeoAlgorithm):
1216

1317
def __deepcopy__(self,memo):
1418
newone = ModelerAlgorithm()
15-
#newone.__dict__.update(self.__dict__)
1619
newone.algs = copy.deepcopy(self.algs, memo)
1720
newone.algParameters = copy.deepcopy(self.algParameters,memo)
1821
newone.algOutputs = copy.deepcopy(self.algOutputs,memo)
@@ -192,7 +195,7 @@ def prepareAlgorithm(self, alg, iAlg):
192195
layerslist = []
193196
for token in tokens:
194197
i, paramname = token.split("|")
195-
aap = AlgorithmAndParameter(i, paramname)
198+
aap = AlgorithmAndParameter(int(i), paramname)
196199
value = self.getValueFromAlgorithmAndParameter(aap)
197200
layerslist.append(str(value))
198201
value = ";".join(layerslist)
@@ -203,12 +206,12 @@ def prepareAlgorithm(self, alg, iAlg):
203206
if not param.setValue(value):
204207
raise GeoAlgorithmExecutionException("Wrong value: " + str(value))
205208
for out in alg.outputs:
206-
val = self.algOutputs[iAlg][out.name]
207-
if val:
208-
name = str(iAlg) + out.name
209-
out.value = self.getOutputFromName(name).value
210-
else:
211-
out.value = None
209+
val = self.algOutputs[iAlg][out.name]
210+
if val:
211+
name = str(iAlg) + out.name
212+
out.value = self.getOutputFromName(name).value
213+
else:
214+
out.value = None
212215

213216

214217
def getValueFromAlgorithmAndParameter(self, aap):
@@ -220,7 +223,7 @@ def getValueFromAlgorithmAndParameter(self, aap):
220223
if aap.param == param.name:
221224
return param.value
222225
else:
223-
return self.producedOutputs[aap.alg][aap.param]
226+
return self.producedOutputs[int(aap.alg)][aap.param]
224227

225228
def processAlgorithm(self, progress):
226229
self.producedOutputs = []
@@ -242,16 +245,82 @@ def processAlgorithm(self, progress):
242245

243246
progress.setFinished()
244247

248+
249+
def getOutputType(self, i, outname):
250+
for out in self.algs[i].outputs:
251+
if out.name == outname:
252+
if isinstance(out, OutputRaster):
253+
return "output raster"
254+
elif isinstance(out, OutputVector):
255+
return "output vector"
256+
elif isinstance(out, OutputTable):
257+
return "output table"
258+
elif isinstance(out, OutputHTML):
259+
return "output html"
260+
261+
245262
def getAsPythonCode(self):
246263
s = []
247264
for param in self.parameters:
248-
s.append(str(param.getAsScriptCode()))
265+
s.append(str(param.getAsScriptCode().lower()))
266+
i = 0
267+
for outs in self.algOutputs:
268+
for out in outs.keys():
269+
if outs[out]:
270+
s.append("##" + out.lower() + "_alg" + str(i) +"=" + self.getOutputType(i, out))
271+
i += 1
272+
i = 0
273+
iMultiple = 0
249274
for alg in self.algs:
250-
runline = "Sextante.runalg(\"" + alg.commandLineName() + "\n"
251-
#TODO*****
252-
pass
275+
multiple= []
276+
runline = "outputs_" + str(i) + "=Sextante.runalg(\"" + alg.commandLineName() + "\""
277+
for param in alg.parameters:
278+
aap = self.algParameters[i][param.name]
279+
if aap == None:
280+
runline += ", None"
281+
282+
if isinstance(param, ParameterMultipleInput):
283+
value = self.paramValues[aap.param]
284+
tokens = value.split(";")
285+
layerslist = []
286+
for token in tokens:
287+
iAlg, paramname = token.split("|")
288+
if float(iAlg) == float(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM):
289+
if self.ismodelparam(paramname):
290+
value = paramname.lower()
291+
else:
292+
value = self.paramValues[paramname]
293+
else:
294+
value = "outputs_" + str(iAlg) + "['" + paramname +"']"
295+
layerslist.append(str(value))
296+
297+
multiple.append("multiple_" + str(iMultiple) +"=[" + ",".join(layerslist) + "]")
298+
runline +=", \";\".join(multiple_" + str(iMultiple) + ") "
299+
else:
300+
if float(aap.alg) == float(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM):
301+
if self.ismodelparam(aap.param):
302+
runline += ", " + aap.param.lower()
303+
else:
304+
runline += ", " + self.paramValues[aap.param]
305+
else:
306+
runline += ", outputs_" + str(aap.alg) + "['" + aap.param +"']"
307+
for out in alg.outputs:
308+
value = self.algOutputs[i][out.name]
309+
if value:
310+
name = out.name.lower() + "_alg" + str(i)
311+
else:
312+
name = str(None)
313+
runline += ", " + name
314+
i += 1
315+
s += multiple
316+
s.append(str(runline + ")"))
253317
return "\n".join(s)
254318

319+
def ismodelparam(self, paramname):
320+
for modelparam in self.parameters:
321+
if modelparam.name == paramname:
322+
return True
323+
return False
255324

256325
class AlgorithmAndParameter():
257326

src/sextante/modeler/ModelerDialog.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,8 @@ def repaintModel(self):
174174
self.scene.setSceneRect(QtCore.QRectF(0, 0, 1000, 1000))
175175
self.scene.paintModel(self.alg)
176176
self.view.setScene(self.scene)
177-
self.pythonText.setText("This feature is not yet available... we are still working on it ;-)")#self.alg.getAsPythonCode())
177+
#self.pythonText.setText("This feature is not yet available... we are still working on it ;-)")#self.alg.getAsPythonCode())
178+
self.pythonText.setText(self.alg.getAsPythonCode())
178179

179180

180181
def addInput(self):

src/sextante/modeler/ModelerParameterDefinitionDialog.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,10 @@ def setupUi(self):
100100
self.horizontalLayout2.addWidget(self.yesNoCombo)
101101
self.horizontalLayout3.addWidget(QtGui.QLabel("Shape type"))
102102
self.shapetypeCombo = QtGui.QComboBox()
103+
self.shapetypeCombo.addItem("Any")
103104
self.shapetypeCombo.addItem("Point")
104105
self.shapetypeCombo.addItem("Line")
105106
self.shapetypeCombo.addItem("Polygon")
106-
self.shapetypeCombo.addItem("Any")
107107
self.horizontalLayout3.addWidget(self.shapetypeCombo)
108108
self.verticalLayout.addLayout(self.horizontalLayout3)
109109
self.verticalLayout.addLayout(self.horizontalLayout2)
@@ -174,7 +174,7 @@ def okPressed(self):
174174
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_VECTOR:
175175
self.param = ParameterVector(name, description, self.shapetypeCombo.currentIndex()-1, self.yesNoCombo.currentIndex() == 1)
176176
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_MULTIPLE:
177-
self.param = ParameterMultipleInput(name, description, self.datatypeCombo.currentIndex(), self.yesNoCombo.currentIndex() == 1)
177+
self.param = ParameterMultipleInput(name, description, self.datatypeCombo.currentIndex()-1, self.yesNoCombo.currentIndex() == 1)
178178
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_NUMBER:
179179
try:
180180
vmin = str(self.minTextBox.text()).strip()

src/sextante/modeler/ModelerScene.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ def getLastAlgorithmItem(self):
3535

3636
def getItemsFromAAP(self, aap, isMultiple):
3737
items = []
38-
start = aap.alg
39-
if start == AlgorithmAndParameter.PARENT_MODEL_ALGORITHM:
38+
start = int(aap.alg)
39+
if aap.alg == AlgorithmAndParameter.PARENT_MODEL_ALGORITHM:
4040
if isMultiple:
4141
multi = self.model.paramValues[aap.param]
4242
tokens = multi.split(";")

src/sextante/parameters/ParameterRaster.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ def __init__(self, name="", description="", optional=False):
1111
self.value = None
1212

1313
def setValue(self, obj):
14+
if obj == None:
15+
if self.optional:
16+
self.value = None
17+
return True
18+
else:
19+
return False
1420
if isinstance(obj, QgsRasterLayer):
1521
self.value = str(obj.dataProvider().dataSourceUri())
1622
return True

src/sextante/parameters/ParameterTable.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ def __init__(self, name="", description="", optional=False):
1111
self.value = None
1212

1313
def setValue(self, obj):
14+
if obj == None:
15+
if self.optional:
16+
self.value = None
17+
return True
18+
else:
19+
return False
1420
if isinstance(obj, QgsVectorLayer):
1521
self.value = str(obj.source())
1622
if self.value.endswith("shp"):

src/sextante/parameters/ParameterVector.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ def __init__(self, name="", description="", shapetype=-1, optional=False):
1818
self.value = None
1919

2020
def setValue(self, obj):
21+
if obj == None:
22+
if self.optional:
23+
self.value = None
24+
return True
25+
else:
26+
return False
2127
if isinstance(obj, QgsVectorLayer):
2228
self.value = str(obj.source())
2329
return True

src/sextante/saga/SagaAlgorithm.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from sextante.outputs.OutputFactory import OutputFactory
3131
from sextante.core.SextanteConfig import SextanteConfig
3232
from sextante.core.QGisLayers import QGisLayers
33+
from PyQt4 import QtGui
3334

3435
class SagaAlgorithm(GeoAlgorithm):
3536

src/sextante/script/ScriptAlgorithm.py

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from sextante.parameters.ParameterSelection import ParameterSelection
1515
from PyQt4 import QtGui
1616
from sextante.parameters.ParameterTableField import ParameterTableField
17+
from sextante.outputs.OutputHTML import OutputHTML
1718

1819
class ScriptAlgorithm(GeoAlgorithm):
1920

@@ -89,16 +90,13 @@ def processParameterLine(self,line):
8990
param = ParameterString(tokens[0], desc, default)
9091
elif tokens[1].lower().strip().startswith("output raster"):
9192
out = OutputRaster()
92-
if tokens[1].strip().endswith("*"):
93-
self.silentOutputs.append(tokens[0])
9493
elif tokens[1].lower().strip().startswith("output vector"):
9594
out = OutputVector()
96-
if tokens[1].strip().endswith("*"):
97-
self.silentOutputs.append(tokens[0])
9895
elif tokens[1].lower().strip().startswith("output table"):
9996
out = OutputTable()
100-
if tokens[1].strip().endswith("*"):
101-
self.silentOutputs.append(tokens[0])
97+
elif tokens[1].lower().strip().startswith("output html"):
98+
out = OutputHTML()
99+
102100

103101
if param != None:
104102
self.addParameter(param)
@@ -121,8 +119,4 @@ def processAlgorithm(self, progress):
121119
script+=self.script
122120
exec(script)
123121

124-
for out in self.outputs:
125-
if out.name in self.silentOutputs:
126-
out.value = None
127-
128122

0 commit comments

Comments
 (0)