2012-10-05 23:28:47 +02:00
# -*- coding: utf-8 -*-
"""
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
GrassAlgorithm . 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$ '
2012-09-15 18:25:25 +03:00
import os
from qgis . core import *
from PyQt4 . QtCore import *
from PyQt4 . QtGui import *
2012-12-12 00:51:18 +01:00
import uuid
from sextante . outputs . OutputHTML import OutputHTML
import importlib
2012-09-15 18:25:25 +03:00
from sextante . core . GeoAlgorithm import GeoAlgorithm
from sextante . parameters . ParameterTable import ParameterTable
from sextante . parameters . ParameterMultipleInput import ParameterMultipleInput
from sextante . parameters . ParameterRaster import ParameterRaster
from sextante . outputs . OutputRaster import OutputRaster
from sextante . parameters . ParameterVector import ParameterVector
from sextante . parameters . ParameterBoolean import ParameterBoolean
from sextante . outputs . OutputVector import OutputVector
from sextante . core . GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
from sextante . core . SextanteLog import SextanteLog
from sextante . parameters . ParameterFactory import ParameterFactory
from sextante . outputs . OutputFactory import OutputFactory
from sextante . core . SextanteConfig import SextanteConfig
from sextante . core . QGisLayers import QGisLayers
from sextante . grass . GrassUtils import GrassUtils
import time
from sextante . core . SextanteUtils import SextanteUtils
from sextante . parameters . ParameterSelection import ParameterSelection
from sextante . core . LayerExporter import LayerExporter
from sextante . core . WrongHelpFileException import WrongHelpFileException
from sextante . outputs . OutputFile import OutputFile
from sextante . parameters . ParameterExtent import ParameterExtent
from sextante . parameters . ParameterNumber import ParameterNumber
2013-02-07 23:28:04 +01:00
from sextante . parameters . ParameterString import ParameterString
2012-09-15 18:25:25 +03:00
class GrassAlgorithm ( GeoAlgorithm ) :
2012-12-10 00:12:07 +01:00
2013-05-15 20:42:04 +02:00
GRASS_OUTPUT_TYPE_PARAMETER = " GRASS_OUTPUT_TYPE_PARAMETER "
2013-01-24 20:12:17 +01:00
GRASS_MIN_AREA_PARAMETER = " GRASS_MIN_AREA_PARAMETER "
GRASS_SNAP_TOLERANCE_PARAMETER = " GRASS_SNAP_TOLERANCE_PARAMETER "
2012-09-15 18:25:25 +03:00
GRASS_REGION_EXTENT_PARAMETER = " GRASS_REGION_PARAMETER "
GRASS_REGION_CELLSIZE_PARAMETER = " GRASS_REGION_CELLSIZE_PARAMETER "
2013-05-02 23:53:03 +02:00
GRASS_REGION_ALIGN_TO_RESOLUTION = " -a_r.region "
2013-05-15 20:42:04 +02:00
2013-05-02 23:53:03 +02:00
OUTPUT_TYPES = [ " auto " , " point " , " line " , " area " ]
2012-09-15 18:25:25 +03:00
def __init__ ( self , descriptionfile ) :
GeoAlgorithm . __init__ ( self )
self . descriptionFile = descriptionfile
self . defineCharacteristicsFromFile ( )
self . numExportedLayers = 0
2012-12-04 00:15:03 +01:00
#GRASS console output, needed to do postprocessing in case GRASS dumps results to the console
self . consoleOutput = [ ]
2012-09-15 18:25:25 +03:00
def getCopy ( self ) :
newone = GrassAlgorithm ( self . descriptionFile )
newone . provider = self . provider
return newone
def getIcon ( self ) :
return QIcon ( os . path . dirname ( __file__ ) + " /../images/grass.png " )
def helpFile ( self ) :
2013-04-15 07:16:20 +02:00
return ' http://grass.osgeo.org/grass64/manuals/ ' + self . grassName + " .html "
2012-09-15 18:25:25 +03:00
def getParameterDescriptions ( self ) :
descs = { }
try :
helpfile = self . helpFile ( )
except WrongHelpFileException :
return descs
if helpfile :
try :
infile = open ( helpfile )
lines = infile . readlines ( )
for i in range ( len ( lines ) ) :
if lines [ i ] . startswith ( " <DT><b> " ) :
for param in self . parameters :
searchLine = " <b> " + param . name + " </b> "
if searchLine in lines [ i ] :
i + = 1
descs [ param . name ] = lines [ i ] [ 4 : - 6 ]
break
infile . close ( )
except Exception :
pass
return descs
def defineCharacteristicsFromFile ( self ) :
lines = open ( self . descriptionFile )
line = lines . readline ( ) . strip ( " \n " ) . strip ( )
self . grassName = line
line = lines . readline ( ) . strip ( " \n " ) . strip ( )
self . name = line
line = lines . readline ( ) . strip ( " \n " ) . strip ( )
self . group = line
2012-12-12 00:47:29 +01:00
hasRasterOutput = False
2013-05-02 23:53:03 +02:00
hasVectorInput = False
vectorOutputs = 0
2012-09-15 18:25:25 +03:00
while line != " " :
try :
line = line . strip ( " \n " ) . strip ( )
if line . startswith ( " Parameter " ) :
2013-01-24 20:12:17 +01:00
parameter = ParameterFactory . getFromString ( line ) ;
self . addParameter ( parameter )
if isinstance ( parameter , ParameterVector ) :
2013-05-02 23:53:03 +02:00
hasVectorInput = True
2013-01-24 20:12:17 +01:00
if isinstance ( parameter , ParameterMultipleInput ) and parameter . datatype < 3 :
2013-05-02 23:53:03 +02:00
hasVectorInput = True
2012-09-15 18:25:25 +03:00
elif line . startswith ( " *Parameter " ) :
param = ParameterFactory . getFromString ( line [ 1 : ] )
param . isAdvanced = True
self . addParameter ( param )
else :
2013-01-12 23:36:00 +01:00
output = OutputFactory . getFromString ( line )
self . addOutput ( output ) ;
2012-12-12 00:47:29 +01:00
if isinstance ( output , OutputRaster ) :
2013-01-12 23:36:00 +01:00
hasRasterOutput = True
2013-05-02 23:53:03 +02:00
elif isinstance ( output , OutputVector ) :
vectorOutputs + = 1
2012-09-15 18:25:25 +03:00
line = lines . readline ( ) . strip ( " \n " ) . strip ( )
except Exception , e :
SextanteLog . addToLog ( SextanteLog . LOG_ERROR , " Could not open GRASS algorithm: " + self . descriptionFile + " \n " + line )
raise e
lines . close ( )
self . addParameter ( ParameterExtent ( self . GRASS_REGION_EXTENT_PARAMETER , " GRASS region extent " ) )
2012-12-12 00:47:29 +01:00
if hasRasterOutput :
self . addParameter ( ParameterNumber ( self . GRASS_REGION_CELLSIZE_PARAMETER , " GRASS region cellsize (leave 0 for default) " , 0 , None , 0.0 ) )
2013-05-02 23:53:03 +02:00
if hasVectorInput :
2013-01-24 20:12:17 +01:00
param = ParameterNumber ( self . GRASS_SNAP_TOLERANCE_PARAMETER , " v.in.ogr snap tolerance (-1 = no snap) " , - 1 , None , - 1.0 )
param . isAdvanced = True
self . addParameter ( param )
2013-01-26 23:55:14 +01:00
param = ParameterNumber ( self . GRASS_MIN_AREA_PARAMETER , " v.in.ogr min area " , 0 , None , 0.0001 )
2013-01-24 20:12:17 +01:00
param . isAdvanced = True
self . addParameter ( param )
2013-05-15 20:42:04 +02:00
if vectorOutputs == 1 :
2013-05-02 23:53:03 +02:00
param = ParameterSelection ( self . GRASS_OUTPUT_TYPE_PARAMETER , " v.out.ogr output type " , self . OUTPUT_TYPES )
param . isAdvanced = True
self . addParameter ( param )
2013-05-15 20:42:04 +02:00
2012-10-17 22:03:40 +02:00
def getDefaultCellsize ( self ) :
cellsize = 0
for param in self . parameters :
if param . value :
if isinstance ( param , ParameterRaster ) :
if isinstance ( param . value , QgsRasterLayer ) :
layer = param . value
else :
layer = QGisLayers . getObjectFromUri ( param . value )
cellsize = max ( cellsize , ( layer . extent ( ) . xMaximum ( ) - layer . extent ( ) . xMinimum ( ) ) / layer . width ( ) )
2012-12-10 00:12:07 +01:00
2012-10-17 22:03:40 +02:00
elif isinstance ( param , ParameterMultipleInput ) :
layers = param . value . split ( " ; " )
for layername in layers :
layer = QGisLayers . getObjectFromUri ( layername )
if isinstance ( layer , QgsRasterLayer ) :
cellsize = max ( cellsize , ( layer . extent ( ) . xMaximum ( ) - layer . extent ( ) . xMinimum ( ) ) / layer . width ( ) )
if cellsize == 0 :
cellsize = 1
2012-12-10 00:12:07 +01:00
return cellsize
2012-09-15 18:25:25 +03:00
def processAlgorithm ( self , progress ) :
if SextanteUtils . isWindows ( ) :
path = GrassUtils . grassPath ( )
if path == " " :
raise GeoAlgorithmExecutionException ( " GRASS folder is not configured. \n Please configure it before running GRASS algorithms. " )
commands = [ ]
self . exportedLayers = { }
2012-12-04 00:15:03 +01:00
outputCommands = [ ]
2012-09-15 18:25:25 +03:00
2012-10-27 10:59:23 +02:00
# if GRASS session has been created outside of this algorithm then get the list of layers loaded in GRASS
# otherwise start a new session
existingSession = GrassUtils . sessionRunning
if existingSession :
self . exportedLayers = GrassUtils . getSessionLayers ( )
else :
GrassUtils . startGrassSession ( )
2012-12-10 00:12:07 +01:00
2012-09-15 18:25:25 +03:00
#1: Export layer to grass mapset
for param in self . parameters :
if isinstance ( param , ParameterRaster ) :
if param . value == None :
continue
value = param . value
2012-10-27 10:59:23 +02:00
# check if the layer hasn't already been exported in, for example, previous GRASS calls in this session
if value in self . exportedLayers . keys ( ) :
continue
else :
2012-12-20 00:16:05 +01:00
self . setSessionProjectionFromLayer ( value , commands )
2012-10-27 10:59:23 +02:00
commands . append ( self . exportRasterLayer ( value ) )
2012-09-15 18:25:25 +03:00
if isinstance ( param , ParameterVector ) :
if param . value == None :
continue
value = param . value
2012-10-27 10:59:23 +02:00
if value in self . exportedLayers . keys ( ) :
continue
else :
2012-12-20 00:16:05 +01:00
self . setSessionProjectionFromLayer ( value , commands )
2012-10-27 10:59:23 +02:00
commands . append ( self . exportVectorLayer ( value ) )
2012-09-15 18:25:25 +03:00
if isinstance ( param , ParameterTable ) :
pass
if isinstance ( param , ParameterMultipleInput ) :
if param . value == None :
continue
layers = param . value . split ( " ; " )
if layers == None or len ( layers ) == 0 :
continue
if param . datatype == ParameterMultipleInput . TYPE_RASTER :
for layer in layers :
2012-10-27 10:59:23 +02:00
if layer in self . exportedLayers . keys ( ) :
continue
else :
2012-12-20 00:16:05 +01:00
self . setSessionProjectionFromLayer ( layer , commands )
2012-10-27 10:59:23 +02:00
commands . append ( self . exportRasterLayer ( layer ) )
2012-09-15 18:25:25 +03:00
elif param . datatype == ParameterMultipleInput . TYPE_VECTOR_ANY :
for layer in layers :
2012-10-27 10:59:23 +02:00
if layer in self . exportedLayers . keys ( ) :
continue
else :
2012-12-20 00:16:05 +01:00
self . setSessionProjectionFromLayer ( layer , commands )
2012-10-27 10:59:23 +02:00
commands . append ( self . exportVectorLayer ( layer ) )
2012-09-15 18:25:25 +03:00
2012-12-20 00:16:05 +01:00
self . setSessionProjectionFromProject ( commands )
2013-01-12 23:36:00 +01:00
2012-12-04 00:15:03 +01:00
region = str ( self . getParameterValue ( self . GRASS_REGION_EXTENT_PARAMETER ) )
regionCoords = region . split ( " , " )
2012-12-10 00:12:07 +01:00
command = " g.region "
2012-12-04 00:15:03 +01:00
command + = " n= " + str ( regionCoords [ 3 ] )
command + = " s= " + str ( regionCoords [ 2 ] )
command + = " e= " + str ( regionCoords [ 1 ] )
command + = " w= " + str ( regionCoords [ 0 ] )
2012-12-12 00:47:29 +01:00
cellsize = self . getParameterValue ( self . GRASS_REGION_CELLSIZE_PARAMETER )
if cellsize :
2013-01-12 23:36:00 +01:00
command + = " res= " + str ( cellsize ) ;
2012-12-04 00:15:03 +01:00
else :
2012-12-12 00:47:29 +01:00
command + = " res= " + str ( self . getDefaultCellsize ( ) )
2013-05-02 23:53:03 +02:00
alignToResolution = self . getParameterValue ( self . GRASS_REGION_ALIGN_TO_RESOLUTION )
if alignToResolution :
command + = " -a "
2012-12-04 00:15:03 +01:00
commands . append ( command )
2012-12-10 00:12:07 +01:00
2012-09-15 18:25:25 +03:00
#2: set parameters and outputs
command = self . grassName
for param in self . parameters :
2012-10-27 10:59:23 +02:00
if param . value == None or param . value == " " :
2012-09-15 18:25:25 +03:00
continue
2013-02-07 01:09:39 +01:00
if ( param . name == self . GRASS_REGION_CELLSIZE_PARAMETER or param . name == self . GRASS_REGION_EXTENT_PARAMETER
2013-05-02 23:53:03 +02:00
or param . name == self . GRASS_MIN_AREA_PARAMETER or param . name == self . GRASS_SNAP_TOLERANCE_PARAMETER
or param . name == self . GRASS_OUTPUT_TYPE_PARAMETER or param . name == self . GRASS_REGION_ALIGN_TO_RESOLUTION ) :
2012-09-15 18:25:25 +03:00
continue
if isinstance ( param , ( ParameterRaster , ParameterVector ) ) :
value = param . value
if value in self . exportedLayers . keys ( ) :
command + = ( " " + param . name + " = " + self . exportedLayers [ value ] )
else :
command + = ( " " + param . name + " = " + value )
elif isinstance ( param , ParameterMultipleInput ) :
s = param . value
for layer in self . exportedLayers . keys ( ) :
s = s . replace ( layer , self . exportedLayers [ layer ] )
s = s . replace ( " ; " , " , " )
command + = ( " " + param . name + " = " + s ) ;
elif isinstance ( param , ParameterBoolean ) :
if param . value :
command + = ( " " + param . name )
elif isinstance ( param , ParameterSelection ) :
idx = int ( param . value )
command + = ( " " + param . name + " = " + str ( param . options [ idx ] ) ) ;
2013-02-07 23:28:04 +01:00
elif isinstance ( param , ParameterString ) :
command + = ( " " + param . name + " = \" " + str ( param . value ) + " \" " ) ;
2012-09-15 18:25:25 +03:00
else :
command + = ( " " + param . name + " = " + str ( param . value ) ) ;
2012-11-15 00:53:46 +01:00
uniqueSufix = str ( uuid . uuid4 ( ) ) . replace ( " - " , " " ) ;
2012-09-15 18:25:25 +03:00
for out in self . outputs :
if isinstance ( out , OutputFile ) :
2013-04-11 10:04:33 +02:00
if out . name == ' outputtext ' :
#the 'outputtext' file is generated by piping output from GRASS, is not an actual grass command
command + = ( " > " + out . value )
else :
command + = ( " " + out . name + " = \" " + out . value + " \" " ) ;
2013-04-15 07:16:20 +02:00
elif not isinstance ( out , OutputHTML ) :
#html files are not generated by GRASS, only by SEXTANTE to decorate grass output, so we skip them
2013-04-11 10:04:33 +02:00
#An output name to make sure it is unique if the session uses this algorithm several times
2012-12-10 00:12:07 +01:00
uniqueOutputName = out . name + uniqueSufix
command + = ( " " + out . name + " = " + uniqueOutputName )
# add output file to exported layers, to indicate that they are present in GRASS
self . exportedLayers [ out . value ] = uniqueOutputName
2012-09-15 18:25:25 +03:00
command + = " --overwrite "
commands . append ( command )
#3:Export resulting layers to a format that qgis can read
for out in self . outputs :
if isinstance ( out , OutputRaster ) :
filename = out . value
#Raster layer output: adjust region to layer before exporting
2012-11-15 00:53:46 +01:00
commands . append ( " g.region rast= " + out . name + uniqueSufix )
2012-12-07 21:11:56 +01:00
outputCommands . append ( " g.region rast= " + out . name + uniqueSufix )
2012-09-15 18:25:25 +03:00
command = " r.out.gdal -c createopt= \" TFW=YES,COMPRESS=LZW \" "
command + = " input= "
2012-11-15 00:53:46 +01:00
command + = out . name + uniqueSufix
2012-09-15 18:25:25 +03:00
command + = " output= \" " + filename + " \" "
2012-12-10 00:12:07 +01:00
commands . append ( command )
2012-12-04 00:15:03 +01:00
outputCommands . append ( command )
2012-12-10 00:12:07 +01:00
2012-09-15 18:25:25 +03:00
if isinstance ( out , OutputVector ) :
2012-11-02 16:03:29 +01:00
filename = out . value
2013-05-02 23:53:03 +02:00
command = " v.out.ogr -e input= " + out . name + uniqueSufix
2012-09-15 18:25:25 +03:00
command + = " dsn= \" " + os . path . dirname ( out . value ) + " \" "
command + = " format=ESRI_Shapefile "
command + = " olayer= " + os . path . basename ( out . value ) [ : - 4 ]
2013-05-02 23:53:03 +02:00
typeidx = self . getParameterValue ( self . GRASS_OUTPUT_TYPE_PARAMETER ) ;
2013-05-15 20:42:04 +02:00
outtype = " auto " if typeidx is None else self . OUTPUT_TYPES [ typeidx ]
2013-05-02 23:53:03 +02:00
command + = " type= " + outtype
2012-09-15 18:25:25 +03:00
commands . append ( command )
2012-12-07 21:11:56 +01:00
outputCommands . append ( command )
2012-12-10 00:12:07 +01:00
2012-09-15 18:25:25 +03:00
#4 Run GRASS
loglines = [ ]
loglines . append ( " GRASS execution commands " )
for line in commands :
progress . setCommand ( line )
loglines . append ( line )
if SextanteConfig . getSetting ( GrassUtils . GRASS_LOG_COMMANDS ) :
2013-01-12 23:36:00 +01:00
SextanteLog . addToLog ( SextanteLog . LOG_INFO , loglines )
self . consoleOutput = GrassUtils . executeGrass ( commands , progress , outputCommands ) ;
self . postProcessResults ( ) ;
2012-10-27 10:59:23 +02:00
# if the session has been created outside of this algorithm, add the new GRASS layers to it
# otherwise finish the session
if existingSession :
GrassUtils . addSessionLayers ( self . exportedLayers )
2012-12-10 00:12:07 +01:00
else :
2012-10-27 10:59:23 +02:00
GrassUtils . endGrassSession ( )
2012-09-15 18:25:25 +03:00
2013-01-12 23:36:00 +01:00
def postProcessResults ( self ) :
2012-12-12 00:47:29 +01:00
name = self . commandLineName ( ) . replace ( ' . ' , ' _ ' ) [ len ( ' grass: ' ) : ]
2013-01-12 23:36:00 +01:00
try :
2012-12-13 22:28:35 +01:00
module = importlib . import_module ( ' sextante.grass.ext. ' + name )
2013-01-12 23:36:00 +01:00
except ImportError :
2012-12-04 00:15:03 +01:00
return
2013-01-12 23:36:00 +01:00
if hasattr ( module , ' postProcessResults ' ) :
func = getattr ( module , ' postProcessResults ' )
2012-12-10 00:12:07 +01:00
func ( self )
2012-12-04 00:15:03 +01:00
2012-09-15 18:25:25 +03:00
def exportVectorLayer ( self , orgFilename ) :
2013-04-13 15:03:01 +02:00
#TODO: improve this. We are now exporting if it is not a shapefile,
2013-04-15 07:16:20 +02:00
#but the functionality of v.in.ogr could be used for this.
2012-09-15 18:25:25 +03:00
#We also export if there is a selection
2013-04-13 15:03:01 +02:00
if not os . path . exists ( orgFilename ) or not orgFilename . endswith ( " shp " ) :
2012-09-15 18:25:25 +03:00
layer = QGisLayers . getObjectFromUri ( orgFilename , False )
if layer :
filename = LayerExporter . exportVectorLayer ( layer )
else :
layer = QGisLayers . getObjectFromUri ( orgFilename , False )
if layer :
useSelection = SextanteConfig . getSetting ( SextanteConfig . USE_SELECTED )
if useSelection and layer . selectedFeatureCount ( ) != 0 :
filename = LayerExporter . exportVectorLayer ( layer )
else :
filename = orgFilename
else :
filename = orgFilename
destFilename = self . getTempFilename ( )
self . exportedLayers [ orgFilename ] = destFilename
command = " v.in.ogr "
2013-01-24 20:12:17 +01:00
min_area = self . getParameterValue ( self . GRASS_MIN_AREA_PARAMETER ) ;
command + = " min_area= " + str ( min_area )
snap = self . getParameterValue ( self . GRASS_SNAP_TOLERANCE_PARAMETER ) ;
command + = " snap= " + str ( snap )
command + = " dsn= \" " + os . path . dirname ( filename ) + " \" "
command + = " layer= " + os . path . basename ( filename ) [ : - 4 ]
command + = " output= " + destFilename ;
command + = " --overwrite -o "
2012-09-15 18:25:25 +03:00
return command
2012-12-20 00:16:05 +01:00
def setSessionProjectionFromProject ( self , commands ) :
2013-01-12 23:36:00 +01:00
if not GrassUtils . projectionSet :
from sextante . core . Sextante import Sextante
2012-12-20 00:16:05 +01:00
qgis = Sextante . getInterface ( )
2013-01-10 16:34:42 +01:00
proj4 = qgis . mapCanvas ( ) . mapRenderer ( ) . destinationCrs ( ) . toProj4 ( )
2012-12-20 00:16:05 +01:00
command = " g.proj "
command + = " -c "
command + = " proj4= \" " + proj4 + " \" "
commands . append ( command )
GrassUtils . projectionSet = True
def setSessionProjectionFromLayer ( self , layer , commands ) :
2012-12-04 00:15:03 +01:00
if not GrassUtils . projectionSet :
qGisLayer = QGisLayers . getObjectFromUri ( layer )
if qGisLayer :
proj4 = str ( qGisLayer . crs ( ) . toProj4 ( ) )
command = " g.proj "
command + = " -c "
command + = " proj4= \" " + proj4 + " \" "
commands . append ( command )
GrassUtils . projectionSet = True
2012-09-15 18:25:25 +03:00
def exportRasterLayer ( self , layer ) :
destFilename = self . getTempFilename ( )
self . exportedLayers [ layer ] = destFilename
2012-12-04 00:15:03 +01:00
command = " r.external "
2012-09-15 18:25:25 +03:00
command + = " input= \" " + layer + " \" "
command + = " band=1 "
2012-12-04 00:15:03 +01:00
command + = " output= " + destFilename ;
2012-09-15 18:25:25 +03:00
command + = " --overwrite -o "
return command
def getTempFilename ( self ) :
filename = " tmp " + str ( time . time ( ) ) . replace ( " . " , " " ) + str ( SextanteUtils . getNumExportedLayers ( ) )
return filename
def commandLineName ( self ) :
return " grass: " + self . name [ : self . name . find ( " " ) ]
2013-04-15 07:16:20 +02:00
2013-04-12 17:18:51 +02:00
def checkBeforeOpeningParametersDialog ( self ) :
msg = GrassUtils . checkGrassIsInstalled ( )
2013-04-15 07:16:20 +02:00
if msg is not None :
html = ( " <p>This algorithm requires GRASS to be run. "
" Unfortunately, it seems that GRASS is not installed in your system, or it is not correctly configured to be used from QGIS</p> " )
2013-04-12 17:18:51 +02:00
html + = ' <p><a href= " http://docs.qgis.org/html/en/docs/user_manual/sextante/3rdParty.html " >Click here</a> to know more about how to install and configure GRASS to be used with SEXTANTE</p> '
return html
2013-01-12 23:36:00 +01:00
2012-12-13 22:28:35 +01:00
def checkParameterValuesBeforeExecuting ( self ) :
name = self . commandLineName ( ) . replace ( ' . ' , ' _ ' ) [ len ( ' grass: ' ) : ]
2013-01-12 23:36:00 +01:00
try :
2012-12-13 22:28:35 +01:00
module = importlib . import_module ( ' sextante.grass.ext. ' + name )
2013-01-12 23:36:00 +01:00
except ImportError :
2012-12-13 22:28:35 +01:00
return
2013-01-12 23:36:00 +01:00
if hasattr ( module , ' checkParameterValuesBeforeExecuting ' ) :
func = getattr ( module , ' checkParameterValuesBeforeExecuting ' )
2012-12-13 22:28:35 +01:00
return func ( self )
2012-10-27 10:59:23 +02:00