Browse Source

wxNviz: reuse 2d vector querying for 3d

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@48015 15284696-431f-4ddb-bdfa-cd5b030d7da7
Anna Petrášová 13 years ago
parent
commit
3d537b9fbf
2 changed files with 42 additions and 23 deletions
  1. 23 18
      gui/wxpython/gui_modules/mapdisp.py
  2. 19 5
      gui/wxpython/gui_modules/nviz_mapdisp.py

+ 23 - 18
gui/wxpython/gui_modules/mapdisp.py

@@ -1296,7 +1296,9 @@ class MapFrame(wx.Frame):
                         rast.append(iname)
                 elif ltype in ('vector', 'thememap', 'themechart'):
                     vect.append(name)
-        
+        # rasters are not queried this way in 3D, we don't want them now
+        if self.IsPaneShown('3d'):
+            rast = list()
         # use display region settings instead of computation region settings
         self.tmpreg = os.getenv("GRASS_REGION")
         os.environ["GRASS_REGION"] = self.Map.SetRegion(windres = False)
@@ -1412,25 +1414,28 @@ class MapFrame(wx.Frame):
         
         cats = self.dialogs['attributes'].GetCats()
         
-        try:
-            qlayer = self.Map.GetListOfLayers(l_name = globalvar.QUERYLAYER)[0]
-        except IndexError:
-            qlayer = None
+        qlayer = None
+        if not self.IsPaneShown('3d'):
+            try:
+                qlayer = self.Map.GetListOfLayers(l_name = globalvar.QUERYLAYER)[0]
+            except IndexError:
+                pass
         
         if self.dialogs['attributes'].mapDBInfo and cats:
-            # highlight feature & re-draw map
-            if qlayer:
-                qlayer.SetCmd(self.AddTmpVectorMapLayer(mapName, cats,
-                                                        useId = False,
-                                                        addLayer = False))
-            else:
-                qlayer = self.AddTmpVectorMapLayer(mapName, cats, useId = False)
-            
-            # set opacity based on queried layer
-            opacity = self.tree.GetPyData(self.tree.layer_selected)[0]['maplayer'].GetOpacity(float = True)
-            qlayer.SetOpacity(opacity)
-            
-            self.MapWindow.UpdateMap(render = False, renderVector = False)
+            if not self.IsPaneShown('3d'):
+                # highlight feature & re-draw map
+                if qlayer:
+                    qlayer.SetCmd(self.AddTmpVectorMapLayer(mapName, cats,
+                                                            useId = False,
+                                                            addLayer = False))
+                else:
+                    qlayer = self.AddTmpVectorMapLayer(mapName, cats, useId = False)
+                
+                # set opacity based on queried layer
+                opacity = self.tree.GetPyData(self.tree.layer_selected)[0]['maplayer'].GetOpacity(float = True)
+                qlayer.SetOpacity(opacity)
+                
+                self.MapWindow.UpdateMap(render = False, renderVector = False)
             if not self.dialogs['attributes'].IsShown():
                 self.dialogs['attributes'].Show()
         else:

+ 19 - 5
gui/wxpython/gui_modules/nviz_mapdisp.py

@@ -108,6 +108,8 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
         # list of past views
         self.viewhistory  = []
         self.saveHistory = False
+        # offset for dialog (e.g. DisplayAttributesDialog)
+        self.dialogOffset = 5
         # overlays
         self.overlays = {}
         self.imagedict = {}
@@ -489,13 +491,21 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
     def OnLeftUp(self, event):
         self.mouse['end'] = event.GetPositionTuple()
         if self.mouse["use"] == "query":
+            # querying
             layers = self.GetSelectedLayer(multi = True)
-            
+            isRaster = False
+            nVectors = 0
             for l in layers:
                 if l.GetType() == 'raster':
-                    self.OnQuerySurface(event)
+                    isRaster = True
+                    break
                 if l.GetType() == 'vector':
-                    self.OnQueryVector(event)
+                    nVectors += 1
+            
+            if isRaster or nVectors > 1:
+                self.OnQueryMap(event)
+            else:
+                self.OnQueryVector(event)
                     
         elif self.mouse["use"] == 'cplane':
             self.lmgr.nviz.OnCPlaneChangeDone(None)
@@ -719,6 +729,11 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
         
         self.render['quick'] = False
         self.Refresh(False)
+    
+    def OnQueryMap(self, event):
+        """!Query raster and vector maps"""
+        self.OnQuerySurface(event)
+        self.parent.QueryMap(event.GetX(), event.GetY())
         
     def OnQuerySurface(self, event):
         """!Query surface on given position"""
@@ -765,8 +780,7 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
     
     def OnQueryVector(self, event):
         """!Query vector on given position"""
-        self.log.WriteWarning(_("Vector querying is not implemented yet"))
-        self.log.WriteCmdLog('-' * 80)
+        self.parent.QueryVector(*event.GetPosition())
         
     def UpdateView(self, event):
         """!Change view settings"""