Browse Source

nviz2/wxGUI: data layers can be loaded also to running nviz

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

+ 1 - 0
gui/wxpython/gui_modules/mapdisp.py

@@ -2606,6 +2606,7 @@ class MapFrame(wx.Frame):
         # nviz
         # nviz
         elif name == "nviz":
         elif name == "nviz":
             import nviz
             import nviz
+
             # check for GLCanvas and OpenGL
             # check for GLCanvas and OpenGL
             msg = None
             msg = None
             if not nviz.haveGLCanvas:
             if not nviz.haveGLCanvas:

+ 8 - 1
gui/wxpython/gui_modules/nviz.py

@@ -268,6 +268,13 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
         self.nvizClass.EraseMap()
         self.nvizClass.EraseMap()
         self.SwapBuffers()
         self.SwapBuffers()
 
 
+    def IsLoaded(self, layer):
+        """Check if layer is already loaded"""
+        if self.Map.GetLayerIndex(layer) in self.object.keys():
+            return 1
+
+        return 0
+
     def LoadDataLayers(self):
     def LoadDataLayers(self):
         """Load raster/vector from current layer tree
         """Load raster/vector from current layer tree
 
 
@@ -1880,7 +1887,7 @@ class NvizToolWindow(wx.Frame):
             self.notebook.GetPage(self.page['vector']).Enable(False)
             self.notebook.GetPage(self.page['vector']).Enable(False)
 
 
             # use default values
             # use default values
-            if data == {}:
+            if data == {} or data == None:
                 # attributes
                 # attributes
                 for attr in ('topo', 'color'): # required
                 for attr in ('topo', 'color'): # required
                     if layer and layer.type == 'raster':
                     if layer and layer.type == 'raster':

+ 12 - 4
gui/wxpython/gui_modules/render.py

@@ -656,7 +656,7 @@ class Map(object):
         Returns list of layers of selected properties or list of all
         Returns list of layers of selected properties or list of all
         layers. 
         layers. 
 
 
-        @param l_type layer type, e.g. raster/vector/wms/overlay
+        @param l_type layer type, e.g. raster/vector/wms/overlay (value or tuple of values)
         @param l_mapset all layers from given mapset (only for maplayers)
         @param l_mapset all layers from given mapset (only for maplayers)
         @param l_name all layers with given name
         @param l_name all layers with given name
         @param l_active only layers with 'active' attribute set to True or False
         @param l_active only layers with 'active' attribute set to True or False
@@ -667,7 +667,12 @@ class Map(object):
 
 
         selected = []
         selected = []
 
 
-        if l_type == 'overlay':
+        if type(l_type) == type(''):
+            one_type = True
+        else:
+            one_type = False
+
+        if one_type and l_type == 'overlay':
             list = self.overlays
             list = self.overlays
         else:
         else:
             list = self.layers
             list = self.layers
@@ -675,8 +680,11 @@ class Map(object):
         # ["raster", "vector", "wms", ... ]
         # ["raster", "vector", "wms", ... ]
         for layer in list:
         for layer in list:
             # specified type only
             # specified type only
-            if l_type != None and layer.type != l_type:
-                continue
+            if l_type != None:
+                if one_type and layer.type != l_type:
+                    continue
+                elif not one_type and layer.type not in l_type:
+                    continue
 
 
             # mapset
             # mapset
             if (l_mapset != None and type != 'overlay') and \
             if (l_mapset != None and type != 'overlay') and \

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

@@ -818,7 +818,8 @@ class LayerTree(CT.CustomTreeCtrl):
         # update progress bar range (mapwindow statusbar)
         # update progress bar range (mapwindow statusbar)
         self.mapdisplay.onRenderGauge.SetRange(len(self.Map.GetListOfLayers(l_active=True)))
         self.mapdisplay.onRenderGauge.SetRange(len(self.Map.GetListOfLayers(l_active=True)))
 
 
-        if self.mapdisplay.toolbars['nviz']:
+        if self.mapdisplay.toolbars['nviz'] and \
+                self.GetPyData(item) is not None:
             # nviz - load/unload data layer
             # nviz - load/unload data layer
             mapLayer = self.GetPyData(item)[0]['maplayer']
             mapLayer = self.GetPyData(item)[0]['maplayer']
             if checked: # enable
             if checked: # enable
@@ -907,7 +908,9 @@ class LayerTree(CT.CustomTreeCtrl):
             pass
             pass
 
 
         # update nviz tools
         # update nviz tools
-        if self.mapdisplay.toolbars['nviz']:
+        if self.mapdisplay.toolbars['nviz'] and \
+                self.GetPyData(self.layer_selected) is not None:
+            # update Nviz tool window
             type = self.GetPyData(self.layer_selected)[0]['maplayer'].type
             type = self.GetPyData(self.layer_selected)[0]['maplayer'].type
             if type == 'raster':
             if type == 'raster':
                 self.mapdisplay.nvizToolWin.UpdatePage('surface')
                 self.mapdisplay.nvizToolWin.UpdatePage('surface')
@@ -1107,7 +1110,29 @@ class LayerTree(CT.CustomTreeCtrl):
 
 
         # change parameters for item in layers list in render.Map
         # change parameters for item in layers list in render.Map
         self.ChangeLayer(layer)
         self.ChangeLayer(layer)
-
+        
+        if self.mapdisplay.toolbars['nviz']:
+            # update nviz session
+            mapLayer = self.GetPyData(layer)[0]['maplayer']
+            mapWin = self.mapdisplay.MapWindow
+            if len(mapLayer.GetCmd()) > 0:
+                if mapLayer.type == 'raster':
+                    self.mapdisplay.nvizToolWin.UpdatePage('surface')
+                    self.mapdisplay.nvizToolWin.SetPage('surface')
+                    if not mapWin.IsLoaded(mapLayer):
+                        mapWin.LoadRaster(mapLayer)
+                elif mapLayer.type == 'vector':
+                    self.mapdisplay.nvizToolWin.UpdatePage('vector')
+                    self.mapdisplay.nvizToolWin.SetPage('vector')
+                    if not mapWin.IsLoaded(mapLayer):
+                        mapWin.LoadVector(mapLayer)
+                
+                # reset view when first layer loaded
+                nlayers = len(mapWin.Map.GetListOfLayers(l_type=('raster', 'vector'),
+                                                         l_active=True))
+                if nlayers < 2:
+                    mapWin.ResetView()
+        
     def ReorderLayers(self):
     def ReorderLayers(self):
         """Add commands from data associated with
         """Add commands from data associated with
         any valid layers (checked or not) to layer list in order to
         any valid layers (checked or not) to layer list in order to