[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