Skip to content

Commit

Permalink
Merge pull request #1279 from pka/grass7
Browse files Browse the repository at this point in the history
[FEATURE] (Processing) Initial Grass 7 support
  • Loading branch information
volaya committed Mar 31, 2014
2 parents 6852f9e + 72457b3 commit 7e209b9
Show file tree
Hide file tree
Showing 181 changed files with 3,268 additions and 0 deletions.
1 change: 1 addition & 0 deletions python/plugins/processing/CMakeLists.txt
Expand Up @@ -6,6 +6,7 @@ ADD_SUBDIRECTORY(commander)
ADD_SUBDIRECTORY(core)
ADD_SUBDIRECTORY(gdal)
ADD_SUBDIRECTORY(grass)
ADD_SUBDIRECTORY(grass7)
ADD_SUBDIRECTORY(gui)
ADD_SUBDIRECTORY(images)
ADD_SUBDIRECTORY(lidar)
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/core/Processing.py
Expand Up @@ -48,6 +48,7 @@
ModelerOnlyAlgorithmProvider
from processing.algs.QGISAlgorithmProvider import QGISAlgorithmProvider
from processing.grass.GrassAlgorithmProvider import GrassAlgorithmProvider
from processing.grass7.Grass7AlgorithmProvider import Grass7AlgorithmProvider
from processing.lidar.LidarToolsAlgorithmProvider import \
LidarToolsAlgorithmProvider
from processing.gdal.GdalOgrAlgorithmProvider import GdalOgrAlgorithmProvider
Expand Down Expand Up @@ -146,6 +147,7 @@ def initialize():
Processing.addProvider(RAlgorithmProvider())
Processing.addProvider(SagaAlgorithmProvider())
Processing.addProvider(GrassAlgorithmProvider())
Processing.addProvider(Grass7AlgorithmProvider())
Processing.addProvider(ScriptAlgorithmProvider())
Processing.addProvider(TauDEMAlgorithmProvider())
Processing.addProvider(AdminToolsAlgorithmProvider())
Expand Down
8 changes: 8 additions & 0 deletions python/plugins/processing/grass7/CMakeLists.txt
@@ -0,0 +1,8 @@
FILE(GLOB PY_FILES *.py)
FILE(GLOB OTHER_FILES grass7.txt)
FILE(GLOB DESCR_FILES description/*.txt)

ADD_SUBDIRECTORY(ext)

PLUGIN_INSTALL(processing grass7 ${PY_FILES} ${OTHER_FILES})
PLUGIN_INSTALL(processing grass7/description ${DESCR_FILES})
544 changes: 544 additions & 0 deletions python/plugins/processing/grass7/Grass7Algorithm.py

Large diffs are not rendered by default.

107 changes: 107 additions & 0 deletions python/plugins/processing/grass7/Grass7AlgorithmProvider.py
@@ -0,0 +1,107 @@
# -*- coding: utf-8 -*-

"""
***************************************************************************
Grass7AlgorithmProvider.py
---------------------
Date : April 2014
Copyright : (C) 2014 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. *
* *
***************************************************************************
"""

from processing.grass7.nviz7 import nviz7

__author__ = 'Victor Olaya'
__date__ = 'April 2014'
__copyright__ = '(C) 2014, Victor Olaya'

# This will get replaced with a git SHA1 when you do a git archive

__revision__ = '$Format:%H$'

import os
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from processing.core.ProcessingConfig import ProcessingConfig, Setting
from processing.core.AlgorithmProvider import AlgorithmProvider
from processing.core.ProcessingLog import ProcessingLog
from processing.grass7.Grass7Utils import Grass7Utils
from processing.grass7.Grass7Algorithm import Grass7Algorithm
from processing.tools.system import *


class Grass7AlgorithmProvider(AlgorithmProvider):

def __init__(self):
AlgorithmProvider.__init__(self)
self.createAlgsList() # Preloading algorithms to speed up

def initializeSettings(self):
AlgorithmProvider.initializeSettings(self)
if isWindows() or isMac():
ProcessingConfig.addSetting(Setting(self.getDescription(),
Grass7Utils.GRASS_FOLDER, 'GRASS7 folder',
Grass7Utils.grassPath()))
ProcessingConfig.addSetting(Setting(self.getDescription(),
Grass7Utils.GRASS_WIN_SHELL, 'Msys folder',
Grass7Utils.grassWinShell()))
ProcessingConfig.addSetting(Setting(self.getDescription(),
Grass7Utils.GRASS_LOG_COMMANDS,
'Log execution commands', False))
ProcessingConfig.addSetting(Setting(self.getDescription(),
Grass7Utils.GRASS_LOG_CONSOLE,
'Log console output', False))

def unload(self):
AlgorithmProvider.unload(self)
if isWindows() or isMac():
ProcessingConfig.removeSetting(Grass7Utils.GRASS_FOLDER)
ProcessingConfig.removeSetting(Grass7Utils.GRASS_WIN_SHELL)
ProcessingConfig.removeSetting(Grass7Utils.GRASS_LOG_COMMANDS)
ProcessingConfig.removeSetting(Grass7Utils.GRASS_LOG_CONSOLE)

def createAlgsList(self):
self.preloadedAlgs = []
folder = Grass7Utils.grassDescriptionPath()
for descriptionFile in os.listdir(folder):
if descriptionFile.endswith('txt'):
try:
alg = Grass7Algorithm(os.path.join(folder, descriptionFile))
if alg.name.strip() != '':
self.preloadedAlgs.append(alg)
else:
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
'Could not open GRASS GIS 7 algorithm: '
+ descriptionFile)
except Exception, e:
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
'Could not open GRASS GIS 7 algorithm: '
+ descriptionFile)
self.preloadedAlgs.append(nviz7())

def _loadAlgorithms(self):
self.algs = self.preloadedAlgs

def getDescription(self):
return 'GRASS GIS 7 commands'

def getName(self):
return 'grass70'

def getIcon(self):
return QIcon(os.path.dirname(__file__) + '/../images/grass.png')

def getSupportedOutputVectorLayerExtensions(self):
return ['shp']

def getSupportedOutputRasterLayerExtensions(self):
return ['tif']

0 comments on commit 7e209b9

Please sign in to comment.