[GRASS-SVN] r32356 - in grass/trunk/gui/wxpython: gui_modules xml
svn_grass at osgeo.org
svn_grass at osgeo.org
Tue Jul 29 06:50:23 EDT 2008
Author: martinl
Date: 2008-07-29 06:50:03 -0400 (Tue, 29 Jul 2008)
New Revision: 32356
Modified:
grass/trunk/gui/wxpython/gui_modules/nviz.py
grass/trunk/gui/wxpython/gui_modules/workspace.py
grass/trunk/gui/wxpython/xml/grass-gxw.dtd
Log:
wxGUI/nviz: full workspace support for vector lines/points, update r32352)
Modified: grass/trunk/gui/wxpython/gui_modules/nviz.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/nviz.py 2008-07-29 08:12:34 UTC (rev 32355)
+++ grass/trunk/gui/wxpython/gui_modules/nviz.py 2008-07-29 10:50:03 UTC (rev 32356)
@@ -353,7 +353,13 @@
try:
if type == 'vector':
- self.LoadVector(item)
+ data = self.tree.GetPyData(item)[0]['nviz']
+ vecType = []
+ if data and data.has_key('vector'):
+ for v in ('lines', 'points'):
+ if data['vector'][v]:
+ vecType.append(v)
+ self.LoadVector(item, vecType)
except gcmd.NvizError, e:
print >> sys.stderr, "Nviz: " + e.message
@@ -372,45 +378,53 @@
"""
type = self.tree.GetPyData(item)[0]['maplayer'].type
# reference to original layer properties (can be None)
- dataOrig = self.tree.GetPyData(item)[0]['nviz']
-
- if dataOrig is None:
- # set default properties
+ data = self.tree.GetPyData(item)[0]['nviz']
+
+ if data is None:
+ # init data structure
self.tree.GetPyData(item)[0]['nviz'] = {}
data = self.tree.GetPyData(item)[0]['nviz']
- else:
- data = dataOrig
- # reset data
- if type == 'raster':
- data[nvizType] = {}
- for sec in ('attribute', 'draw', 'mask', 'position'):
- data[nvizType][sec] = {}
-
- if id > 0:
- data[nvizType]['object'] = { 'id' : id,
- 'init' : False }
+ if type == 'raster':
+ data[nvizType] = {}
+ for sec in ('attribute', 'draw', 'mask', 'position'):
+ data[nvizType][sec] = {}
- self.SetSurfaceDefaultProp(data[nvizType])
- elif type == 'vector':
- data['vector'] = {}
- for sec in ('lines', 'points'):
- data['vector'][sec] = {}
-
- if id > 0:
- data['vector'][nvizType]['object'] = { 'id' : id,
- 'init' : False }
+ # reset to default properties
+ self.SetSurfaceDefaultProp(data[nvizType])
+
+ elif type == 'vector':
+ data['vector'] = {}
+ for sec in ('lines', 'points'):
+ data['vector'][sec] = {}
- self.SetVectorDefaultProp(data['vector']) # for both - lines/points
-
- # set updates
- if dataOrig:
+ # reset to default properties (lines/points)
+ self.SetVectorDefaultProp(data['vector'])
+
+ else:
+ # check data
+ if type == 'vector':
+ if not data['vector']['lines']:
+ self.SetVectorLinesDefaultProp(data['vector']['lines'])
+ if not data['vector']['points']:
+ self.SetVectorPointsDefaultProp(data['vector']['points'])
+
+ # set updates
for sec in data.keys():
for sec1 in data[sec].keys():
for sec2 in data[sec][sec1].keys():
if sec2 not in ('object'):
self.update.append('%s:%s:%s' % (sec, sec1, sec2))
+ # set id
+ if id > 0:
+ if type == 'raster':
+ data[nvizType]['object'] = { 'id' : id,
+ 'init' : False }
+ elif type == 'vector':
+ data['vector'][nvizType]['object'] = { 'id' : id,
+ 'init' : False }
+
return data
def LoadRaster(self, item):
@@ -554,6 +568,8 @@
#
for control, value in UserSettings.Get(group='nviz', key='surface', subkey='draw').iteritems():
if control[:3] == 'res':
+ if not data['draw'].has_key('resolution'):
+ data['draw']['resolution'] = { 'all' : False }
if 'surface:draw:%s' % 'resolution' not in self.update:
self.update.append('surface:draw:%s' % 'resolution')
data['draw']['resolution'] = { 'all' : False,
@@ -601,8 +617,9 @@
subkey=[v, 'show']):
vecType.append(v)
- # set default properties
- self.SetLayerData(item, -1, v)
+ # set default properties
+ self.SetLayerData(item, -1, 'lines')
+ self.SetLayerData(item, -1, 'points')
id = -1
for type in vecType:
@@ -753,12 +770,17 @@
if len(self.layers['raster']['name']) > 0:
data['mode']['surface'] = self.layers['raster']['name'][0]
+ # height
+ data['height'] = UserSettings.Get(group='nviz', key='vector',
+ subkey=['points', 'height'])
+
if data.has_key('object'):
self.update.append('vector:points:size')
self.update.append('vector:points:width')
self.update.append('vector:points:marker')
self.update.append('vector:points:color')
self.update.append('vector:points:surface')
+ self.update.append('vector:points:height')
def Reset(self):
"""Reset (unload data)"""
@@ -965,7 +987,6 @@
'vector:points:width' in self.update or \
'vector:points:marker' in self.update or \
'vector:points:color' in self.update:
-
ret = self.nvizClass.SetVectorPointMode(id, data['color'],
data['width'], float(data['size']),
data['marker'] + 1)
@@ -2873,7 +2894,7 @@
showPoints.SetValue(False)
self.UpdateVectorShow(showPoints.GetId(),
showPoints.IsChecked())
-
+ # size, width, marker, color
for prop in ('size', 'width', 'marker', 'color'):
win = self.FindWindowById(self.win['vector']['points'][prop])
name = win.GetName()
@@ -2884,6 +2905,10 @@
win.SetValue(color)
else:
win.SetValue(data['points'][prop])
+ # height
+ for type in ('slider', 'spin'):
+ win = self.FindWindowById(self.win['vector']['points']['height'][type])
+ win.SetValue(data['points']['height'])
def SetPage(self, name):
"""Get named page"""
Modified: grass/trunk/gui/wxpython/gui_modules/workspace.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/workspace.py 2008-07-29 08:12:34 UTC (rev 32355)
+++ grass/trunk/gui/wxpython/gui_modules/workspace.py 2008-07-29 10:50:03 UTC (rev 32356)
@@ -32,6 +32,8 @@
HandlerBase=xml.sax.handler.ContentHandler
from xml.sax import make_parser
+from preferences import globalSettings as UserSettings
+
class ProcessWorkspaceFile(HandlerBase):
"""
A SAX handler for the GXW XML file, as
@@ -50,7 +52,7 @@
'vlines', 'color', 'width', 'mode',
'map', 'height',
# vector points
- 'vpoints'):
+ 'vpoints', 'size'):
self.inTag[tag] = False
#
@@ -130,7 +132,7 @@
elif name == 'parameter':
self.parameterName = attrs.get('name', None)
- elif name in ('value', 'x', 'y', 'z'):
+ elif name in ('value', 'x', 'y', 'z', 'map'):
self.value = ''
elif name == 'flag':
@@ -205,10 +207,23 @@
self.layerNviz['surface']['position'] = {}
elif name == 'mode':
- if self.inTag['nviz'] and self.inTag['vlines']:
- self.layerNviz['vector']['lines']['mode'] = {}
- self.layerNviz['vector']['lines']['mode']['type'] = str(attrs.get('type', ''))
+ if self.inTag['nviz']:
+ if self.inTag['vlines']:
+ self.layerNviz['vector']['lines']['mode'] = {}
+ self.layerNviz['vector']['lines']['mode']['type'] = str(attrs.get('type', ''))
+ self.layerNviz['vector']['lines']['mode']['surface'] = ''
+ elif self.inTag['vpoints']:
+ self.layerNviz['vector']['points']['mode'] = {}
+ self.layerNviz['vector']['points']['mode']['type'] = str(attrs.get('type', ''))
+ self.layerNviz['vector']['points']['mode']['surface'] = ''
+ elif name == 'vpoints':
+ if self.inTag['nviz']:
+ marker = str(attrs.get('marker', ''))
+ markerId = list(UserSettings.Get(group='nviz', key='vector',
+ subkey=['points', 'marker'], internal=True)).index(marker)
+ self.layerNviz['vector']['points']['marker'] = markerId
+
self.inTag[name] = True
def endElement(self, name):
@@ -226,7 +241,7 @@
"display" : self.displayIndex,
"selected" : self.layerSelected,
"nviz" : self.layerNviz})
-
+
if self.layerOpacity:
self.layers[-1]["opacity"] = float(self.layerOpacity)
if self.cmd:
@@ -277,21 +292,37 @@
self.layerNviz['surface']['position']['z'] = int(self.value)
elif name == 'color':
- if self.inTag['nviz'] and self.inTag['vlines']:
- self.layerNviz['vector']['lines']['color'] = str(self.value)
-
+ if self.inTag['nviz']:
+ if self.inTag['vlines']:
+ self.layerNviz['vector']['lines']['color'] = str(self.value)
+ elif self.inTag['vpoints']:
+ self.layerNviz['vector']['points']['color'] = str(self.value)
+
elif name == 'width':
- if self.inTag['nviz'] and self.inTag['vlines']:
- self.layerNviz['vector']['lines']['width'] = int(self.value)
+ if self.inTag['nviz']:
+ if self.inTag['vlines']:
+ self.layerNviz['vector']['lines']['width'] = int(self.value)
+ elif self.inTag['vpoints']:
+ self.layerNviz['vector']['points']['width'] = int(self.value)
elif name == 'height':
- if self.inTag['nviz'] and self.inTag['vlines']:
- self.layerNviz['vector']['lines']['height'] = int(self.value)
+ if self.inTag['nviz']:
+ if self.inTag['vlines']:
+ self.layerNviz['vector']['lines']['height'] = int(self.value)
+ elif self.inTag['vpoints']:
+ self.layerNviz['vector']['points']['height'] = int(self.value)
- elif name == 'color':
- if self.inTag['nviz'] and self.inTag['vlines']:
- self.layerNviz['vector']['lines']['color'] = str(self.value)
+ elif name == 'size':
+ if self.inTag['nviz'] and self.inTag['vpoints']:
+ self.layerNviz['vector']['points']['size'] = int(self.value)
+ elif name == 'map':
+ if self.inTag['nviz']:
+ if self.inTag['vlines']:
+ self.layerNviz['vector']['lines']['mode']['surface'] = str(self.value)
+ elif self.inTag['vpoints']:
+ self.layerNviz['vector']['points']['mode']['surface'] = str(self.value)
+
self.inTag[name] = False
def characters(self, ch):
@@ -301,7 +332,8 @@
if self.inTag['value'] or \
self.inTag['x'] or \
self.inTag['y'] or \
- self.inTag['z']:
+ self.inTag['z'] or \
+ self.inTag['map']:
self.value += ch
class WriteWorkspaceFile(object):
@@ -515,11 +547,18 @@
if not data[attrb].has_key('object'): # skip disabled
continue
-
- self.file.write('%s<v%s>\n' % (' ' * self.indent, attrb))
+ if attrb == 'lines':
+ self.file.write('%s<v%s>\n' % (' ' * self.indent, attrb))
+ elif attrb == 'points':
+ markerId = data[attrb]['marker']
+ marker = UserSettings.Get(group='nviz', key='vector',
+ subkey=['points', 'marker'], internal=True)[markerId]
+ self.file.write('%s<v%s marker="%s">\n' % (' ' * self.indent,
+ attrb,
+ marker))
self.indent += 4
for name in data[attrb].iterkeys():
- if name == 'object':
+ if name in ('object', 'marker'):
continue
if name == 'mode':
self.file.write('%s<%s type="%s">\n' % (' ' * self.indent, name,
Modified: grass/trunk/gui/wxpython/xml/grass-gxw.dtd
===================================================================
--- grass/trunk/gui/wxpython/xml/grass-gxw.dtd 2008-07-29 08:12:34 UTC (rev 32355)
+++ grass/trunk/gui/wxpython/xml/grass-gxw.dtd 2008-07-29 10:50:03 UTC (rev 32356)
@@ -119,8 +119,17 @@
<!-- nviz vector lines element
-->
<!ELEMENT vlines (color?, width?, mode?, height?)>
+
+<!-- nviz vector points element
+-->
+<!ELEMENT vpoints (color?, width?, mode?, height?, size?)>
+<!ATTLIST vpoints marker (x | box | sphere | cube | diamond | dtree | ctree | aster | gyro | histogram) #REQUIRED>
+
+<!-- nviz vector elements
+-->
<!ELEMENT color (value)>
<!ELEMENT width (value)>
<!ELEMENT height (value)>
<!ELEMENT mode (map?)>
<!ATTLIST mode type (flat | surface) #REQUIRED>
+<!ELEMENT size (value)>
More information about the grass-commit
mailing list