Browse Source

wxNviz: fix surface query (broken in https://trac.osgeo.org/grass/changeset/47169)

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@47189 15284696-431f-4ddb-bdfa-cd5b030d7da7
Anna Petrášová 14 years ago
parent
commit
d3e04572e0
2 changed files with 34 additions and 62 deletions
  1. 12 54
      gui/wxpython/gui_modules/mapdisp.py
  2. 22 8
      gui/wxpython/gui_modules/nviz_mapdisp.py

+ 12 - 54
gui/wxpython/gui_modules/mapdisp.py

@@ -1213,28 +1213,6 @@ class MapFrame(wx.Frame):
     def GetWindow(self):
         """!Get map window"""
         return self.MapWindow
-    
-    def OnNvizQuerySurface(self, event):
-        """!Query current surface in 3D view mode"""
-        if self.toolbars['map'].GetAction() == 'nvizQuerySurface':
-            self.toolbars['map'].SelectDefault(event)
-            return
-        
-        self.toolbars['map'].action['desc'] = 'nvizQuerySurface'
-        
-        self.MapWindow.mouse['use'] = "nvizQuerySurface"
-        self._OnQuery()
-
-    def OnNvizQueryVector(self, event):
-        """!Query current vector in 3D view mode"""
-        if self.toolbars['map'].GetAction() == 'nvizQueryVector':
-            self.toolbars['map'].SelectDefault(event)
-            return
-        
-        self.toolbars['map'].action['desc'] = 'nvizQueryVector'
-        
-        self.MapWindow.mouse['use'] = "nvizQueryVector"
-        self._OnQuery()
         
     def QueryMap(self, x, y):
         """!Query raster or vector map layers by r/v.what
@@ -1429,39 +1407,19 @@ class MapFrame(wx.Frame):
         if self.toolbars['map']:
             self.toolbars['map'].OnTool(event)
             action = self.toolbars['map'].GetAction()
-        
-        if self.toolbars['nviz']:
-            toolsmenu = wx.Menu()
-            raster = wx.MenuItem(parentMenu = toolsmenu, id = wx.ID_ANY,
-                                 text = _("Query surface (raster map)"),
-                                 kind = wx.ITEM_CHECK)
-            toolsmenu.AppendItem(raster)
-            self.Bind(wx.EVT_MENU, self.OnNvizQuerySurface, raster)
-            if action == "nvizQuerySurface":
-                raster.Check(True)
-            vector = wx.MenuItem(parentMenu = toolsmenu, id = wx.ID_ANY,
-                                 text = _("Query vector map"),
-                                 kind = wx.ITEM_CHECK)
-            toolsmenu.AppendItem(vector)
-            self.Bind(wx.EVT_MENU, self.OnNvizQueryVector, vector)
-            if action == "nvizQueryVector":
-                vector.Check(True)
-
-            self.PopupMenu(toolsmenu)
-            toolsmenu.Destroy()
-        else:
-            self.toolbars['map'].action['desc'] = 'queryMap'
-            self.MapWindow.mouse['use'] = "query"
             
-            if not self.IsStandalone():
-                # switch to output console to show query results
-                self._layerManager.notebook.SetSelectionByName('output')
-            
-            self.MapWindow.mouse['box'] = "point"
-            self.MapWindow.zoomtype = 0
-            
-            # change the cursor
-            self.MapWindow.SetCursor(self.cursors["cross"])
+        self.toolbars['map'].action['desc'] = 'queryMap'
+        self.MapWindow.mouse['use'] = "query"
+        
+        if not self.IsStandalone():
+            # switch to output console to show query results
+            self._layerManager.notebook.SetSelectionByName('output')
+        
+        self.MapWindow.mouse['box'] = "point"
+        self.MapWindow.zoomtype = 0
+        
+        # change the cursor
+        self.MapWindow.SetCursor(self.cursors["cross"])
         
     def AddTmpVectorMapLayer(self, name, cats, useId = False, addLayer = True):
         """!Add temporal vector map layer to map composition

+ 22 - 8
gui/wxpython/gui_modules/nviz_mapdisp.py

@@ -150,7 +150,6 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
         self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
         self.Bind(wx.EVT_SIZE,             self.OnSize)
         self.Bind(wx.EVT_PAINT,            self.OnPaint)
-        self.Bind(wx.EVT_LEFT_UP,          self.OnLeftUp)
         self.Bind(wx.EVT_MOUSE_EVENTS,     self.OnMouseAction)
         self.Bind(wx.EVT_MOTION,           self.OnMotion)
         
@@ -356,10 +355,15 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
     
     def OnLeftUp(self, event):
         self.ReleaseMouse()
-        if self.mouse["use"] == "nvizQuerySurface":
-            self.OnQuerySurface(event)
-        elif self.mouse["use"] == "nvizQueryVector":
-            self.OnQueryVector(event)
+        if self.mouse["use"] == "query":
+            layers = self.GetSelectedLayer(multi = True)
+            
+            for l in layers:
+                if l.GetType() == 'raster':
+                    self.OnQuerySurface(event)
+                if l.GetType() == 'vector':
+                    self.OnQueryVector(event)
+                    
         elif self.mouse["use"] == 'cplane':
             self.lmgr.nviz.OnCPlaneChangeDone(None)
             idx = self._display.GetCPlaneCurrent() 
@@ -371,15 +375,25 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
             self.lmgr.nviz.FindWindowByName('placeArrow').SetValue(False)
             self.mouse['use'] = 'default'
             self.SetCursor(self.cursors['default'])
-    
+        
+        event.Skip()
+        
     def OnQuerySurface(self, event):
         """!Query surface on given position"""
-        result = self._display.QueryMap(event.GetX(), event.GetY())
+        size = self.GetClientSizeTuple()
+        result = self._display.QueryMap(event.GetX(), size[1] - event.GetY())
         if result:
             self.qpoints.append((result['x'], result['y'], result['z']))
             self.log.WriteLog("%-30s: %.3f" % (_("Easting"),   result['x']))
             self.log.WriteLog("%-30s: %.3f" % (_("Northing"),  result['y']))
             self.log.WriteLog("%-30s: %.3f" % (_("Elevation"), result['z']))
+            name = ''
+            for item in self.layers:
+                self.tree.GetPyData(item)[0]['nviz']
+                if self.tree.GetPyData(item)[0]['maplayer'].type == 'raster' and\
+                    self.tree.GetPyData(item)[0]['nviz']['surface']['object']['id'] == result['id']:
+                    name = self.tree.GetPyData(item)[0]['maplayer'].name
+            self.log.WriteLog("%-30s: %s" % (_("Surface map name"), name))
             self.log.WriteLog("%-30s: %s" % (_("Surface map elevation"), result['elevation']))
             self.log.WriteLog("%-30s: %s" % (_("Surface map color"), result['color']))
             if len(self.qpoints) > 1:
@@ -409,7 +423,7 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
     
     def OnQueryVector(self, event):
         """!Query vector on given position"""
-        self.log.WriteWarning(_("Function not implemented yet"))
+        self.log.WriteWarning(_("Vector querying is not implemented yet"))
         self.log.WriteCmdLog('-' * 80)
         
     def UpdateView(self, event):