Browse Source

nviz2/wxGUI: workspace/default settings improvements

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@32089 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 17 years ago
parent
commit
fc1a87da92

+ 2 - 5
gui/wxpython/gui_modules/mapdisp.py

@@ -179,9 +179,6 @@ class MapWindow(object):
         try:
         try:
             if nviz:
             if nviz:
                 layer = self.tree.GetPyData(item)[0]['nviz']
                 layer = self.tree.GetPyData(item)[0]['nviz']
-                if layer is None: # initialize data
-                    self.tree.GetPyData(item)[0]['nviz'] = {}
-                    layer = self.tree.GetPyData(item)[0]['nviz']
             else:
             else:
                 layer = self.tree.GetPyData(item)[0]['maplayer']
                 layer = self.tree.GetPyData(item)[0]['maplayer']
         except:
         except:
@@ -2656,10 +2653,10 @@ class MapFrame(wx.Frame):
             if not self.MapWindow3D:
             if not self.MapWindow3D:
                 self.MapWindow3D = nviz.GLWindow(self, id=wx.ID_ANY,
                 self.MapWindow3D = nviz.GLWindow(self, id=wx.ID_ANY,
                                                  Map=self.Map, tree=self.tree, gismgr=self.gismanager)
                                                  Map=self.Map, tree=self.tree, gismgr=self.gismanager)
-                self.MapWindow3D.OnPaint(None) # -> LoadData
                 self.nvizToolWin = nviz.NvizToolWindow(self, id=wx.ID_ANY,
                 self.nvizToolWin = nviz.NvizToolWindow(self, id=wx.ID_ANY,
                                                        mapWindow=self.MapWindow3D)
                                                        mapWindow=self.MapWindow3D)
-            
+                self.MapWindow3D.OnPaint(None) # -> LoadData
+
             busy.Destroy()
             busy.Destroy()
 
 
             self.nvizToolWin.Show()
             self.nvizToolWin.Show()

File diff suppressed because it is too large
+ 457 - 406
gui/wxpython/gui_modules/nviz.py


+ 71 - 29
gui/wxpython/gui_modules/workspace.py

@@ -42,8 +42,13 @@ class ProcessWorkspaceFile(HandlerBase):
         for tag in ('gxw', 'layer', 'task', 'parameter',
         for tag in ('gxw', 'layer', 'task', 'parameter',
                     'flag', 'value', 'group', 'display',
                     'flag', 'value', 'group', 'display',
                     'layer_manager',
                     'layer_manager',
-                    'nviz', 'attribute', 'draw', 'resolution',
-                    'wire_color'):
+                    'nviz',
+                    # surface
+                    'attribute', 'draw', 'resolution',
+                    'wire_color', 'position', 'x', 'y', 'z',
+                    # vector lines
+                    'lines', 'color', 'width', 'mode',
+                    'map', 'height'):
             self.inTag[tag] = False
             self.inTag[tag] = False
 
 
         #
         #
@@ -124,7 +129,8 @@ class ProcessWorkspaceFile(HandlerBase):
         elif name == 'parameter':
         elif name == 'parameter':
             self.parameterName = attrs.get('name', None)
             self.parameterName = attrs.get('name', None)
 
 
-        elif name == 'value':
+        elif name in ('value', 'x', 'y', 'z',
+                      'color', 'width', 'height'):
             self.value = ''
             self.value = ''
 
 
         elif name == 'flag':
         elif name == 'flag':
@@ -153,13 +159,14 @@ class ProcessWorkspaceFile(HandlerBase):
         elif name == 'nviz':
         elif name == 'nviz':
             # init nviz layer properties
             # init nviz layer properties
             self.layerNviz = {}
             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] = {}
+            if self.layerType == 'raster':
+                self.layerNviz['surface'] = {}
+                for sec in ('attribute', 'draw', 'mask', 'position'):
+                    self.layerNviz['surface'][sec] = {}
+            elif self.layerType == 'vector':
+                self.layerNviz['vector'] = {}
+                for sec in ('lines', ):
+                    self.layerNviz['vector'][sec] = {}
 
 
         elif name == 'attribute':
         elif name == 'attribute':
             tagName = str(name)
             tagName = str(name)
@@ -189,7 +196,15 @@ class ProcessWorkspaceFile(HandlerBase):
             self.resolutionType = str(attrs.get('type', ''))
             self.resolutionType = str(attrs.get('type', ''))
             if not self.layerNviz['surface']['draw'].has_key(str(name)):
             if not self.layerNviz['surface']['draw'].has_key(str(name)):
                 self.layerNviz['surface']['draw'][str(name)] = {}
                 self.layerNviz['surface']['draw'][str(name)] = {}
-                
+
+        elif name == 'position':
+            self.layerNviz['surface']['position'] = {}
+        
+        elif name == 'mode':
+            if self.inTag['nviz'] and self.inTag['lines']:
+                self.layerNviz['vector']['lines']['mode'] = {}
+                self.layerNviz['vector']['lines']['mode']['type'] = str(attrs.get('type', ''))
+        
     def endElement(self, name):
     def endElement(self, name):
         self.inTag[name] = False
         self.inTag[name] = False
 
 
@@ -242,11 +257,42 @@ class ProcessWorkspaceFile(HandlerBase):
             self.layerNviz['surface']['draw']['wire-color']['all'] = False
             self.layerNviz['surface']['draw']['wire-color']['all'] = False
             self.layerNviz['surface']['draw']['wire-color']['value'] = str(self.value)
             self.layerNviz['surface']['draw']['wire-color']['value'] = str(self.value)
 
 
+        elif name == 'x':
+            self.layerNviz['surface']['position']['x'] = int(self.value)
+
+        elif name == 'y':
+            self.layerNviz['surface']['position']['y'] = int(self.value)
+
+        elif name == 'z':
+            self.layerNviz['surface']['position']['z'] = int(self.value)
+        
+        elif name == 'color':
+            if self.inTag['nviz'] and self.inTag['lines']:
+                self.layerNviz['vector']['lines']['color'] = str(self.value)
+
+        elif name == 'width':
+            if self.inTag['nviz'] and self.inTag['lines']:
+                self.layerNviz['vector']['lines']['width'] = int(self.value)
+
+        elif name == 'height':
+            if self.inTag['nviz'] and self.inTag['lines']:
+                self.layerNviz['vector']['lines']['height'] = int(self.value)
+        
+        elif name == 'color':
+            if self.inTag['nviz'] and self.inTag['lines']:
+                self.layerNviz['vector']['lines']['color'] = str(self.value)
+
     def characters(self, ch):
     def characters(self, ch):
         self.my_characters(ch)
         self.my_characters(ch)
 
 
     def my_characters(self, ch):
     def my_characters(self, ch):
-        if self.inTag['value']:
+        if self.inTag['value'] or \
+                self.inTag['x'] or \
+                self.inTag['y'] or \
+                self.inTag['z'] or \
+                self.inTag['color'] or \
+                self.inTag['width'] or \
+                self.inTag['height']:
             self.value += ch
             self.value += ch
 
 
 class WriteWorkspaceFile(object):
 class WriteWorkspaceFile(object):
@@ -419,6 +465,7 @@ class WriteWorkspaceFile(object):
                                                                data[attrb]['wire-color']['value']))
                                                                data[attrb]['wire-color']['value']))
                     self.indent -= 4
                     self.indent -= 4
                     self.file.write('%s</wire_color>\n' % (' ' * self.indent))
                     self.file.write('%s</wire_color>\n' % (' ' * self.indent))
+                self.indent -= 4
             
             
             # position
             # position
             elif attrb == 'position':
             elif attrb == 'position':
@@ -426,14 +473,13 @@ class WriteWorkspaceFile(object):
                 i = 0
                 i = 0
                 for tag in ('x', 'y', 'z'):
                 for tag in ('x', 'y', 'z'):
                     self.indent += 4
                     self.indent += 4
-                    file.write('%s<%s>%s<%s>\n' % (' ' * self.indent, tag,
-                                                   data[attrb][name][i], tag))
+                    self.file.write('%s<%s>%d</%s>\n' % (' ' * self.indent, tag,
+                                                        data[attrb][tag], tag))
                     i += 1
                     i += 1
                     self.indent -= 4
                     self.indent -= 4
 
 
             if attrb != 'attribute':
             if attrb != 'attribute':
                 # end tag
                 # end tag
-                self.indent -= 4
                 self.file.write('%s</%s>\n' % (' ' * self.indent, attrb))
                 self.file.write('%s</%s>\n' % (' ' * self.indent, attrb))
 
 
         self.indent -= 4
         self.indent -= 4
@@ -450,21 +496,17 @@ class WriteWorkspaceFile(object):
             self.file.write('%s<%s>\n' % (' ' * self.indent, attrb))
             self.file.write('%s<%s>\n' % (' ' * self.indent, attrb))
             self.indent += 4
             self.indent += 4
             for name in data[attrb].iterkeys():
             for name in data[attrb].iterkeys():
-                self.file.write('%s<%s>' % (' ' * self.indent, name))
-                if type(data[attrb][name]) == type({}):
-                    self.file.write('\n')
-                    self.indent += 4
-                    for subname in data[attrb][name].iterkeys():
-                        if subname == 'flat':
-                            self.file.write('%s<style flat="%d">%s</style>\n' % (' ' * self.indent, 
-                                                                            data[attrb][name][subname][0],
-                                                                            data[attrb][name][subname][1]))
-                        else:
-                            self.file.write('%s<%s>%s</%s>\n' % (' ' * self.indent, subname,
-                                                            data[attrb][name][subname], subname))
-                    self.indent -= 4
-                    self.file.write('%s</%s>\n' % (' ' * self.indent, name))
+                if name == 'mode':
+                    self.file.write('%s<%s type="%s">\n' % (' ' * self.indent, name,
+                                                          data[attrb][name]['type']))
+                    if data[attrb][name]['type'] == 'surface':
+                        self.indent += 4
+                        self.file.write('%s<map>%s</map>\n' % (' ' * self.indent,
+                                                               data[attrb][name]['map']))
+                        self.indent -= 4
+                    self.file.write('%s</%s>\n' % ((' ' * self.indent, name)))
                 else:
                 else:
+                    self.file.write('%s<%s>' % (' ' * self.indent, name))
                     self.file.write('%s</%s>\n' % (data[attrb][name], name))
                     self.file.write('%s</%s>\n' % (data[attrb][name], name))
             self.indent -= 4
             self.indent -= 4
             self.file.write('%s</%s>\n' % (' ' * self.indent, attrb))
             self.file.write('%s</%s>\n' % (' ' * self.indent, attrb))

+ 4 - 2
gui/wxpython/gui_modules/wxgui_utils.py

@@ -842,10 +842,12 @@ class LayerTree(CT.CustomTreeCtrl):
 
 
                 busy.Destroy()
                 busy.Destroy()
             else: # disable
             else: # disable
+                data = self.GetPyData(item)[0]['nviz']
+                id = data['object']['id']
                 if mapLayer.type == 'raster':
                 if mapLayer.type == 'raster':
-                    self.mapdisplay.MapWindow.UnloadRaster(mapLayer)
+                    self.mapdisplay.MapWindow.UnloadRaster(id)
                 elif mapLayer.type == 'vector':
                 elif mapLayer.type == 'vector':
-                    self.mapdisplay.MapWindow.UnloadVector(mapLayer)
+                    self.mapdisplay.MapWindow.UnloadVector(id)
 
 
         # redraw map if auto-rendering is enabled
         # redraw map if auto-rendering is enabled
         if self.mapdisplay.autoRender.GetValue(): 
         if self.mapdisplay.autoRender.GetValue():