Skip to content

Commit a18cb51

Browse files
committedDec 16, 2012
Fixes issue #5505
1 parent cdaebd1 commit a18cb51

File tree

1 file changed

+53
-7
lines changed
  • python/plugins/sextante/grass

1 file changed

+53
-7
lines changed
 

‎python/plugins/sextante/grass/nviz.py

Lines changed: 53 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,24 @@
2424
__revision__ = '$Format:%H$'
2525

2626
import os
27+
from qgis.core import *
2728
from sextante.parameters.ParameterMultipleInput import ParameterMultipleInput
2829
from sextante.grass.GrassUtils import GrassUtils
2930
from sextante.core.GeoAlgorithm import GeoAlgorithm
3031
from PyQt4 import QtGui
3132
from sextante.core.SextanteUtils import SextanteUtils
33+
from sextante.parameters.ParameterExtent import ParameterExtent
34+
from sextante.parameters.ParameterNumber import ParameterNumber
35+
from sextante.parameters.ParameterRaster import ParameterRaster
36+
from sextante.core.QGisLayers import QGisLayers
3237
import time
3338

3439
class nviz(GeoAlgorithm):
3540

3641
ELEVATION = "ELEVATION"
3742
VECTOR = "VECTOR"
43+
GRASS_REGION_EXTENT_PARAMETER = "GRASS_REGION_PARAMETER"
44+
GRASS_REGION_CELLSIZE_PARAMETER = "GRASS_REGION_CELLSIZE_PARAMETER"
3845

3946
def getIcon(self):
4047
return QtGui.QIcon(os.path.dirname(__file__) + "/../images/grass.png")
@@ -44,22 +51,41 @@ def defineCharacteristics(self):
4451
self.group = "Visualization(NVIZ)"
4552
self.addParameter(ParameterMultipleInput(nviz.ELEVATION, "Elevation layers", ParameterMultipleInput.TYPE_RASTER, True))
4653
self.addParameter(ParameterMultipleInput(nviz.VECTOR, "Vector layers", ParameterMultipleInput.TYPE_VECTOR_ANY, True))
47-
54+
self.addParameter(ParameterExtent(nviz.GRASS_REGION_EXTENT_PARAMETER, "GRASS region extent"))
55+
self.addParameter(ParameterNumber(self.GRASS_REGION_CELLSIZE_PARAMETER, "GRASS region cellsize (leave 0 for default)", 0, None, 0.0))
56+
4857
def processAlgorithm(self, progress):
4958
commands = []
50-
command = "nviz"
5159
vector = self.getParameterValue(self.VECTOR);
5260
elevation = self.getParameterValue(self.ELEVATION);
61+
62+
region = str(self.getParameterValue(self.GRASS_REGION_EXTENT_PARAMETER))
63+
regionCoords = region.split(",")
64+
command = "g.region "
65+
command += "n=" + str(regionCoords[3])
66+
command +=" s=" + str(regionCoords[2])
67+
command +=" e=" + str(regionCoords[1])
68+
command +=" w=" + str(regionCoords[0])
69+
cellsize = self.getParameterValue(self.GRASS_REGION_CELLSIZE_PARAMETER)
70+
if cellsize:
71+
command +=" res=" + str(cellsize);
72+
else:
73+
command +=" res=" + str(self.getDefaultCellsize())
74+
commands.append(command)
75+
76+
command = "nviz"
5377
if vector:
5478
layers = vector.split(";")
5579
for layer in layers:
56-
newfilename = self.exportVectorLayer(layer)
80+
cmd, newfilename = self.exportVectorLayer(layer)
81+
commands.append(cmd)
5782
vector = vector.replace(layer, newfilename)
5883
command += (" vector=" + vector.replace(";", ","))
5984
if elevation:
6085
layers = elevation.split(";")
6186
for layer in layers:
62-
newfilename = self.exportRasterLayer(layer)
87+
cmd, newfilename = self.exportRasterLayer(layer)
88+
commands.append(cmd)
6389
elevation = elevation.replace(layer, newfilename)
6490
command += (" elevation=" + elevation.replace(";", ","))
6591
if elevation is None and vector is None:
@@ -80,8 +106,7 @@ def exportVectorLayer(self,layer):
80106
command +=" layer=" + os.path.basename(layer)[:-4]
81107
command +=" output=" + destFilename;
82108
command +=" --overwrite -o"
83-
return destFilename
84-
109+
return command, destFilename
85110

86111
def exportRasterLayer(self, layer):
87112
destFilename = self.getTempFilename()
@@ -90,5 +115,26 @@ def exportRasterLayer(self, layer):
90115
command +=" band=1"
91116
command +=" out=" + destFilename;
92117
command +=" --overwrite -o"
93-
return destFilename
118+
return command, destFilename
119+
120+
def getDefaultCellsize(self):
121+
cellsize = 0
122+
for param in self.parameters:
123+
if param.value:
124+
if isinstance(param, ParameterRaster):
125+
if isinstance(param.value, QgsRasterLayer):
126+
layer = param.value
127+
else:
128+
layer = QGisLayers.getObjectFromUri(param.value)
129+
cellsize = max(cellsize, (layer.extent().xMaximum() - layer.extent().xMinimum())/layer.width())
130+
131+
elif isinstance(param, ParameterMultipleInput):
132+
layers = param.value.split(";")
133+
for layername in layers:
134+
layer = QGisLayers.getObjectFromUri(layername)
135+
if isinstance(layer, QgsRasterLayer):
136+
cellsize = max(cellsize, (layer.extent().xMaximum() - layer.extent().xMinimum())/layer.width())
94137

138+
if cellsize == 0:
139+
cellsize = 1
140+
return cellsize

0 commit comments

Comments
 (0)
Please sign in to comment.