Hi,
I committed a change to rendering which could help to run d.mon and wxGUI together. The environment is changed only for the rendering process and not for the entire wxGUI. There is a lot of other places which should be changed like this but the rendering is the most important. Please test, I tried to test it already (d.mon, wms, georectifier) but more testing is still needed.
Anna
···
On Tue, May 20, 2014 at 11:14 AM, <svn_grass@osgeo.org> wrote:
Author: annakrat
Date: 2014-05-20 08:14:42 -0700 (Tue, 20 May 2014)
New Revision: 60376Modified:
grass/trunk/gui/wxpython/core/render.py
grass/trunk/gui/wxpython/core/ws.py
Log:
wxGUI/rendering: change environment only for subprocesses; wxGUI amd d.mon should now work togetherModified: grass/trunk/gui/wxpython/core/render.py
— grass/trunk/gui/wxpython/core/render.py 2014-05-20 14:55:52 UTC (rev 60375)
+++ grass/trunk/gui/wxpython/core/render.py 2014-05-20 15:14:42 UTC (rev 60376)
@@ -86,10 +86,11 @@
self.renderMgr = Noneself.Map = Map
- self.type = None
- self.type = None
self.SetType(ltype)
- self.name = name
- self.name = name
- self.environ = os.environ.copy()
if self.type == ‘command’:
self.cmd = list()
for c in cmd:
@@ -136,7 +137,7 @@
{‘type’ : self.type, ‘name’ : self.name})if self.mapfile:
- os.environ[“GRASS_PNGFILE”] = self.mapfile
- self.environ[“GRASS_PNGFILE”] = self.mapfile
execute command
try:
@@ -147,9 +148,9 @@
if ret != 0:
break
if not read:
- os.environ[“GRASS_PNG_READ”] = “TRUE”
- self.environ[“GRASS_PNG_READ”] = “TRUE”
- os.environ[“GRASS_PNG_READ”] = “FALSE”
- self.environ[“GRASS_PNG_READ”] = “FALSE”
else:
ret, msg = self._runCommand(self.cmd)
if ret != 0:
@@ -165,11 +166,7 @@
continue
grass.try_remove(f)
f = None
stop monitor
- if self.mapfile and “GRASS_PNGFILE” in os.environ:
- del os.environ[“GRASS_PNGFILE”]
self.forceRender = False
return self.mapfile
@@ -180,11 +177,12 @@
if self.type == ‘wms’:
ret = 0
msg = ‘’
- self.renderMgr.Render(cmd)
- self.renderMgr.Render(cmd, env=self.environ)
else:
ret, msg = RunCommand(cmd[0],
getErrorMsg = True,
quiet = True,- env=self.environ,
**cmd[1])return ret, msg
@@ -301,6 +299,10 @@for re-rendering
self.forceRender = True
- def SetEnvironment(self, environ):
- “”“!Sets environment for rendering.”“”
- self.environ = environ
def IsDownloading(self):
“”“!Is data downloading from web server e. g. wms”“”
if self.renderMgr is None:
@@ -385,10 +387,7 @@self.overlays = list() # stack of available overlays
self.ovlookup = dict() # lookup dictionary for overlay items and overlays
environment settings
- self.env = dict()
path to external gisrc
self.gisrc = gisrc
@@ -396,7 +395,6 @@
self.mapfile = grass.tempfile(create = False) + ‘.ppm’setting some initial env. variables
- self.initGisEnv() # g.gisenv
if not self.GetWindow():
sys.stderr.write((“Trying to recover from default region…”))
RunCommand(‘g.region’, flags=‘d’)
@@ -405,16 +403,12 @@
self.progressInfo = NoneGRASS environment variable (for rendering)
- self.env = {“GRASS_BACKGROUNDCOLOR” : “000000”,
- “GRASS_PNG_COMPRESSION” : “0”,
- “GRASS_TRUECOLOR” : “TRUE”,
- “GRASS_TRANSPARENT” : “TRUE”,
- “GRASS_PNG_READ” : “FALSE”,
- }
- self.default_env = {“GRASS_BACKGROUNDCOLOR” : “000000”,
- “GRASS_PNG_COMPRESSION” : “0”,
- “GRASS_TRUECOLOR” : “TRUE”,
- “GRASS_TRANSPARENT” : “TRUE”
- }
- for k, v in self.env.iteritems():
- os.environ[k] = v
projection info
self.projinfo = self._projInfo()
@@ -424,30 +418,6 @@
self.layerChanged = Signal(‘Map.layerChanged’)
self.updateProgress = Signal(‘Map.updateProgress’)
- def _runCommand(self, cmd, **kwargs):
- “”"!Run command in environment defined by self.gisrc if
- defined"“”
use external gisrc if defined
- gisrc_orig = os.getenv(“GISRC”)
- if self.gisrc:
- os.environ[“GISRC”] = self.gisrc
- ret = cmd(**kwargs)
back to original gisrc
- if self.gisrc:
- os.environ[“GISRC”] = gisrc_orig
- return ret
- def _initGisEnv(self):
- “”"!Stores GRASS variables (g.gisenv) to self.env variable
- “”"
- if not os.getenv(“GISBASE”):
- sys.exit(_(“GISBASE not set. You must be in GRASS GIS to run this program.”))
- self.env = self._runCommand(grass.gisenv)
def GetProjInfo(self):
“”“!Get projection info”“”
return self.projinfo
@@ -459,10 +429,11 @@
if not grass.find_program(‘g.proj’, ‘–help’):
sys.exit(_("GRASS module ‘%s’ not found. Unable to start map "
“display window.”) % ‘g.proj’)
- ret = self._runCommand(RunCommand, prog = ‘g.proj’,
- read = True, flags = ‘p’)
- env = os.environ.copy()
- if self.gisrc:
- env[‘GISRC’] = self.gisrc
- ret = RunCommand(prog=‘g.proj’, read=True, flags=‘p’, env=env)
if not ret:
return projinfo@@ -482,9 +453,10 @@
def GetWindow(self):
“”“!Read WIND file and set up self.wind dictionary”“”FIXME: duplicated region WIND == g.region (at least some values)
- filename = os.path.join (self.env[‘GISDBASE’],
- self.env[‘LOCATION_NAME’],
- self.env[‘MAPSET’],
- env = grass.gisenv()
- filename = os.path.join (env[‘GISDBASE’],
- env[‘LOCATION_NAME’],
- env[‘MAPSET’],
“WIND”)
try:
windfile = open (filename, “r”)
@@ -626,15 +598,10 @@
@see GetCurrentRegion()
“”"
region = {}
- tmpreg = os.getenv(“GRASS_REGION”)
- if tmpreg:
- del os.environ[“GRASS_REGION”]
use external gisrc if defined
- gisrc_orig = os.getenv(“GISRC”)
- env = os.environ.copy()
if self.gisrc:
- os.environ[“GISRC”] = self.gisrc
- env[‘GISRC’] = self.gisrc
do not update & shell style output
cmd = {}
@@ -673,6 +640,7 @@
ret, reg, msg = RunCommand(‘g.region’,
read = True,
getErrorMsg = True,
- env=env,
**cmd)if ret != 0:
@@ -698,15 +666,7 @@
region[key] = float(val)
except ValueError:
region[key] = val
back to original gisrc
- if self.gisrc:
- os.environ[“GISRC”] = gisrc_orig
restore region
- if tmpreg:
- os.environ[“GRASS_REGION”] = tmpreg
Debug.msg (3, “Map.GetRegion(): %s” % region)
if update:
@@ -884,7 +844,7 @@return selected
- def _renderLayers(self, force = False, overlaysOnly = False):
- def _renderLayers(self, env, force = False, overlaysOnly = False):
“”"!Render all map layers into files@param force True to force rendering
@@ -913,6 +873,7 @@render
if force or layer.forceRender:
- layer.SetEnvironment(env)
if not layer.Render():
continue@@ -935,13 +896,13 @@
return maps, masks, opacities
- def GetMapsMasksAndOpacities(self, force, windres):
- def GetMapsMasksAndOpacities(self, force, windres, env):
“”"!
Used by Render function.@return maps, masks, opacities
“”"
- return self._renderLayers(force)
- return self._renderLayers(force=force, env=env)
def Render(self, force = False, windres = False):
“”“!Creates final image composite
@@ -955,22 +916,21 @@
@return name of file with rendered image or None
“””
wx.BeginBusyCursor()
- env = os.environ.copy()
- env.update(self.default_env)
use external gisrc if defined
- gisrc_orig = os.getenv(“GISRC”)
if self.gisrc:- os.environ[“GISRC”] = self.gisrc
- tmp_region = os.getenv(“GRASS_REGION”)
- os.environ[“GRASS_REGION”] = self.SetRegion(windres)
- os.environ[“GRASS_WIDTH”] = str(self.width)
- os.environ[“GRASS_HEIGHT”] = str(self.height)
- env[‘GISRC’] = self.gisrc
- env[‘GRASS_REGION’] = self.SetRegion(windres)
- env[‘GRASS_WIDTH’] = str(self.width)
- env[‘GRASS_HEIGHT’] = str(self.height)
driver = UserSettings.Get(group = ‘display’, key = ‘driver’, subkey = ‘type’)
if driver == ‘png’:
- os.environ[“GRASS_RENDER_IMMEDIATE”] = “png”
- env[‘GRASS_RENDER_IMMEDIATE’] = ‘png’
else:
- os.environ[“GRASS_RENDER_IMMEDIATE”] = “cairo”
- env[‘GRASS_RENDER_IMMEDIATE’] = ‘cairo’
- maps, masks, opacities = self.GetMapsMasksAndOpacities(force, windres)
- maps, masks, opacities = self.GetMapsMasksAndOpacities(force, windres, env)
ugly hack for MSYS
if sys.platform != ‘win32’:
@@ -1000,7 +960,8 @@
bgcolor = bgcolor,
width = self.width,
height = self.height,
- output = self.mapfile)
- output = self.mapfile,
- env=env)
if ret != 0:
print >> sys.stderr, _(“ERROR: Rendering failed. Details: %s”) % msg
@@ -1008,17 +969,7 @@
return NoneDebug.msg (3, “Map.Render() force=%s file=%s” % (force, self.mapfile))
back to original region
- if tmp_region:
- os.environ[“GRASS_REGION”] = tmp_region
- else:
- del os.environ[“GRASS_REGION”]
back to original gisrc
- if self.gisrc:
- os.environ[“GISRC”] = gisrc_orig
wx.EndBusyCursor()
if not maps:
return NoneModified: grass/trunk/gui/wxpython/core/ws.py
— grass/trunk/gui/wxpython/core/ws.py 2014-05-20 14:55:52 UTC (rev 60375)
+++ grass/trunk/gui/wxpython/core/ws.py 2014-05-20 15:14:42 UTC (rev 60376)
@@ -16,8 +16,8 @@@author Stepan Turek <stepan.turek seznam.cz> (mentor: Martin Landa)
“”"
-import os
import sys
+import copyimport wx
from wx.lib.newevent import NewEvent
@@ -76,7 +76,7 @@
def del(self):
grass.try_remove(self.tempMap)
- def Render(self, cmd):
- def Render(self, cmd, env):
“”"!If it is needed, download missing WMS data.@todo lmgr deletes mapfile and maskfile when order of layers
@@ -85,10 +85,11 @@
if not haveGdal:
return
- self.dstSize[‘cols’] = int(os.environ[“GRASS_WIDTH”])
- self.dstSize[‘rows’] = int(os.environ[“GRASS_HEIGHT”])
- env = copy.copy(env)
- self.dstSize[‘cols’] = int(env[“GRASS_WIDTH”])
- self.dstSize[‘rows’] = int(env[“GRASS_HEIGHT”])
- region = self._getRegionDict()
- region = self._getRegionDict(env)
self._fitAspect(region, self.dstSize)self.updateMap = True
@@ -127,23 +128,12 @@if Debug.GetLevel() < 3:
cmdList.append(‘–quiet’)
tempPngfile = None
if “GRASS_PNGFILE” in os.environ:
tempPngfile = os.environ[“GRASS_PNGFILE”]
os.environ[“GRASS_PNGFILE”] = self.tempMap
tempRegion = os.environ[“GRASS_REGION”]
os.environ[“GRASS_REGION”] = self._createRegionStr(region)
- env[“GRASS_PNGFILE”] = self.tempMap
- env[“GRASS_REGION”] = self._createRegionStr(region)
- self.thread.RunCmd(cmdList, env = os.environ.copy(), stderr = self.cmdStdErr)
- self.thread.RunCmd(cmdList, env=env, stderr=self.cmdStdErr)
- os.environ.pop(“GRASS_PNGFILE”)
- if tempPngfile:
- os.environ[“GRASS_PNGFILE”] = tempPngfile
- os.environ[“GRASS_REGION”] = tempRegion
def OnCmdOutput(self, event):
“”“!Print cmd output according to debug level.
“””
@@ -181,11 +171,11 @@self.dataFetched.emit()
- def _getRegionDict(self):
- def _getRegionDict(self, env):
“”“!Parse string from GRASS_REGION env variable into dict.
“””
region = {}
- parsedRegion = os.environ[“GRASS_REGION”].split(‘;’)
- parsedRegion = env[“GRASS_REGION”].split(‘;’)
for r in parsedRegion:
r = r.split(‘:’)
r[0] = r[0].strip()
grass-commit mailing list
grass-commit@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-commit