Просмотр исходного кода

nviz2/wxGUI: reading nviz layer properties from workspace file (initial, surface/attribute)

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@32074 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 17 лет назад
Родитель
Сommit
eb15528e88

+ 49 - 40
gui/wxpython/gui_modules/nviz.py

@@ -1,5 +1,4 @@
-"""
-@package nviz.py
+"""@package nviz.py
 
 
 @brief 2.5/3D visialization mode for Map Display Window
 @brief 2.5/3D visialization mode for Map Display Window
 
 
@@ -1726,7 +1725,7 @@ class NvizToolWindow(wx.Frame):
         if self.pageUpdated:
         if self.pageUpdated:
             # reset updates
             # reset updates
             self.mapWindow.update['surface']['draw'] = {}
             self.mapWindow.update['surface']['draw'] = {}
-            self.mapWindow.update['surface']['draw']['style'] = (value, all)
+            self.mapWindow.update['surface']['draw']['mode'] = (value, all)
             self.UpdateLayerProperties()
             self.UpdateLayerProperties()
 
 
     def OnSurfaceMode(self, event):
     def OnSurfaceMode(self, event):
@@ -1863,48 +1862,58 @@ class NvizToolWindow(wx.Frame):
             self.notebook.GetPage(self.page['surface']).Enable(True)
             self.notebook.GetPage(self.page['surface']).Enable(True)
             self.notebook.GetPage(self.page['vector']).Enable(False)
             self.notebook.GetPage(self.page['vector']).Enable(False)
 
 
-            # use default values
-            if data == {} or data == None:
-                # attributes
-                for attr in ('topo', 'color'): # required
-                    if layer and layer.type == 'raster':
-                        self.FindWindowById(self.win['surface'][attr]['map']).SetValue(layer.name)
-                    else:
-                        self.FindWindowById(self.win['surface'][attr]['map']).SetValue('')
-                    self.SetSurfaceUseMap(attr, True) # -> map
-                if UserSettings.Get(group='nviz', key='surface', subkey=['shine', 'map']) is False:
-                    self.SetSurfaceUseMap('shine', False)
-                    value = UserSettings.Get(group='nviz', key='surface', subkey=['shine', 'value'])
-                    self.FindWindowById(self.win['surface']['shine']['const']).SetValue(value)
-
-                #
-                # draw
-                #
-                for control, value in UserSettings.Get(group='nviz', key='surface', subkey='draw').iteritems():
-                    win = self.FindWindowById(self.win['surface']['draw'][control])
-
-                    name = win.GetName()
-
-                    if name == "selection":
-                        win.SetSelection(value)
-                    elif name == "colour":
-                        win.SetColour(value)
-                    else:
-                        win.SetValue(value)
-                # enable/disable res widget + set draw mode
-                self.SetSurfaceMode()
-                color = self.FindWindowById(self.win['surface']['draw']['color'])
-                self.SetSurfaceWireColor(color.GetColour())
-
-            elif layer.type == 'raster':
+            #
+            # set default values
+            #
+            # attributes
+            for attr in ('topo', 'color'): # required
+                if layer and layer.type == 'raster':
+                    self.FindWindowById(self.win['surface'][attr]['map']).SetValue(layer.name)
+                else:
+                    self.FindWindowById(self.win['surface'][attr]['map']).SetValue('')
+                self.SetSurfaceUseMap(attr, True) # -> map
+            
+            if UserSettings.Get(group='nviz', key='surface', subkey=['shine', 'map']) is False:
+                self.SetSurfaceUseMap('shine', False)
+                value = UserSettings.Get(group='nviz', key='surface', subkey=['shine', 'value'])
+                self.FindWindowById(self.win['surface']['shine']['const']).SetValue(value)
+
+            #
+            # draw
+            #
+            for control, value in UserSettings.Get(group='nviz', key='surface', subkey='draw').iteritems():
+                win = self.FindWindowById(self.win['surface']['draw'][control])
+                
+                name = win.GetName()
+                
+                if name == "selection":
+                    win.SetSelection(value)
+                elif name == "colour":
+                    win.SetColour(value)
+                else:
+                    win.SetValue(value)
+            # enable/disable res widget + set draw mode
+            self.SetSurfaceMode()
+            color = self.FindWindowById(self.win['surface']['draw']['color'])
+            self.SetSurfaceWireColor(color.GetColour())
+            
+            if layer.type == 'raster':
+                surfProp = data['surface']
                 # surface attributes
                 # surface attributes
-                for attr in data['attr']:
-                    if attr['map']:
+                for attr in surfProp['attribute'].iterkeys():
+                    print attr
+                    if surfProp['attribute'][attr]['map']:
                         win = self.FindWindowById(self.win['surface'][attr]['map'])
                         win = self.FindWindowById(self.win['surface'][attr]['map'])
                     else:
                     else:
                         win = self.FindWindowById(self.win['surface'][attr]['const'])
                         win = self.FindWindowById(self.win['surface'][attr]['const'])
                         
                         
-                    win.SetValue(data['value'])
+                    if attr == 'color':
+                        color = tuple(map(int, surfProp['attribute'][attr]['value'].split(':')))
+                        # TODO: save as tuple
+                        win.SetColour(color)
+                    else:
+                        win.SetValue(surfProp['attribute'][attr]['value'])
+
         elif pageId == 'vector':
         elif pageId == 'vector':
             # disable surface and enable current
             # disable surface and enable current
             self.notebook.GetPage(self.page['surface']).Enable(False)
             self.notebook.GetPage(self.page['surface']).Enable(False)

+ 26 - 4
gui/wxpython/gui_modules/workspace.py

@@ -53,6 +53,7 @@ class ProcessWorkspaceFile(HandlerBase):
         #
         #
         self.inNviz = False
         self.inNviz = False
         self.inAttribute = False
         self.inAttribute = False
+        self.refAttribute = None
 
 
         #
         #
         # layer manager properties
         # layer manager properties
@@ -125,7 +126,8 @@ class ProcessWorkspaceFile(HandlerBase):
             self.layerName     = attrs.get('name', None)
             self.layerName     = attrs.get('name', None)
             self.layerChecked  = attrs.get('checked', None)
             self.layerChecked  = attrs.get('checked', None)
             self.layerOpacity  = attrs.get('opacity', None)
             self.layerOpacity  = attrs.get('opacity', None)
-            self.layerSelected = False;
+            self.layerSelected = False
+            self.layerNviz     = None
             self.cmd = []
             self.cmd = []
 
 
         elif name == 'task':
         elif name == 'task':
@@ -168,9 +170,27 @@ class ProcessWorkspaceFile(HandlerBase):
         #
         #
         elif name == 'nviz':
         elif name == 'nviz':
             self.inNviz = True
             self.inNviz = True
+            # init nviz layer properties
+            self.layerNviz = {}
+            self.layerNviz['view'] = None
+            self.layerNviz['surface'] = {}
+            for sec in ('attribute', 'draw', 'mask', 'position'):
+                self.layerNviz['surface'][sec] = {}
+            self.layerNviz['vector'] = {}
+            for sec in ('lines', ):
+                self.layerNviz['vector'][sec] = {}
 
 
         elif name == 'attribute':
         elif name == 'attribute':
             self.inAttribute = True
             self.inAttribute = True
+            tagName = str(name)
+            attrbName = str(attrs.get('name', ''))
+            self.layerNviz['surface'][tagName][attrbName] = {}
+            if attrs.get('map', '0'):
+                self.layerNviz['surface'][tagName][attrbName]['map'] = False
+            else:
+                self.layerNviz['surface'][tagName][attrbName]['map'] = True
+
+            self.refAttribute = self.layerNviz['surface'][tagName][attrbName]
 
 
     def endElement(self, name):
     def endElement(self, name):
         if name == 'gxw':
         if name == 'gxw':
@@ -193,7 +213,8 @@ class ProcessWorkspaceFile(HandlerBase):
                     "cmd"      : None,
                     "cmd"      : None,
                     "group"    : self.inGroup,
                     "group"    : self.inGroup,
                     "display"  : self.displayIndex,
                     "display"  : self.displayIndex,
-                    "selected" : self.layerSelected})
+                    "selected" : self.layerSelected,
+                    "nviz"     : self.layerNviz})
 
 
             if self.layerOpacity:
             if self.layerOpacity:
                 self.layers[-1]["opacity"] = float(self.layerOpacity)
                 self.layers[-1]["opacity"] = float(self.layerOpacity)
@@ -225,9 +246,10 @@ class ProcessWorkspaceFile(HandlerBase):
         #
         #
         elif name == 'nviz':
         elif name == 'nviz':
             self.inNviz = False
             self.inNviz = False
-        
+
         elif name == 'attribute':
         elif name == 'attribute':
             self.inAttribute = False
             self.inAttribute = False
+            self.refAttribute['value'] = str(self.value)
 
 
     def characters(self, ch):
     def characters(self, ch):
         self.my_characters(ch)
         self.my_characters(ch)
@@ -411,7 +433,7 @@ class WriteWorkspaceFile(object):
                     i += 1
                     i += 1
                     self.indent -= 4
                     self.indent -= 4
             # end tag
             # end tag
-            self.file.write('%s<%s>\n' % (' ' * self.indent, attrb))
+            self.file.write('%s</%s>\n' % (' ' * self.indent, attrb))
         self.indent -= 4
         self.indent -= 4
 
 
     def __writeNvizVector(self, data):
     def __writeNvizVector(self, data):

+ 9 - 3
gui/wxpython/gui_modules/wxgui_utils.py

@@ -485,11 +485,17 @@ class LayerTree(CT.CustomTreeCtrl):
         self.EditLabel(self.layer_selected)
         self.EditLabel(self.layer_selected)
 
 
     def AddLayer(self, ltype, lname=None, lchecked=None,
     def AddLayer(self, ltype, lname=None, lchecked=None,
-                 lopacity=None, lcmd=None, lgroup=None):
+                 lopacity=None, lcmd=None, lgroup=None, lnviz=None):
         """Add new item to the layer tree, create corresponding MapLayer instance.
         """Add new item to the layer tree, create corresponding MapLayer instance.
         Launch property dialog if needed (raster, vector, etc.)
         Launch property dialog if needed (raster, vector, etc.)
 
 
-        Note: lcmd is given as a list
+        @param ltyle layer type (raster, vector, ...)
+        @param lname layer name
+        @param lchecked if True layer is checked
+        @param lopacity layer opacity level
+        @param lcmd command (given as a list)
+        @param lgroup group name or None
+        @param lnviz layer Nviz properties
         """
         """
 
 
         self.first = True
         self.first = True
@@ -636,7 +642,7 @@ class LayerTree(CT.CustomTreeCtrl):
                                     'type' : ltype,
                                     'type' : ltype,
                                     'ctrl' : ctrlId,
                                     'ctrl' : ctrlId,
                                     'maplayer' : None,
                                     'maplayer' : None,
-                                    'nviz' : None,
+                                    'nviz' : lnviz,
                                     'prowin' : None}, 
                                     'prowin' : None}, 
                                    None))
                                    None))
 
 

+ 2 - 1
gui/wxpython/wxgui.py

@@ -667,7 +667,8 @@ class GMFrame(wx.Frame):
                                            lchecked=layer['checked'],
                                            lchecked=layer['checked'],
                                            lopacity=layer['opacity'],
                                            lopacity=layer['opacity'],
                                            lcmd=layer['cmd'],
                                            lcmd=layer['cmd'],
-                                           lgroup=layer['group'])
+                                           lgroup=layer['group'],
+                                           lnviz=layer['nviz'])
                 
                 
                 # tag 'selected' added 2008/04
                 # tag 'selected' added 2008/04
                 if layer.has_key('selected'):
                 if layer.has_key('selected'):