Browse Source

wxGUI/nviz: fix query surface/vector toolbar

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@43009 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 14 years ago
parent
commit
6925f99b08
2 changed files with 105 additions and 86 deletions
  1. 59 52
      gui/wxpython/gui_modules/mapdisp.py
  2. 46 34
      gui/wxpython/gui_modules/nviz_mapdisp.py

+ 59 - 52
gui/wxpython/gui_modules/mapdisp.py

@@ -1194,29 +1194,33 @@ class MapFrame(wx.Frame):
     def GetWindow(self):
         """!Get map window"""
         return self.MapWindow
-    
+
+    def _OnQuery(self):
+        """!Internal method used by OnQuery*() methods"""
+        # switch GIS Manager to output console to show query results
+        self._layerManager.notebook.SetSelection(1)
+        
+        self.MapWindow.mouse['box'] = "point"
+        self.MapWindow.zoomtype = 0
+        
+        # change the cursor
+        self.MapWindow.SetCursor(self.cursors["cross"])
+        
     def OnQueryDisplay(self, event):
-        """!Query currrent raster/vector map layers (display mode)
+        """!Query currrent raster/vector map layers (display mode) -
+        2D view mode
         """
         if self.toolbars['map'].GetAction() == 'displayAttrb': # select previous action
             self.toolbars['map'].SelectDefault(event)
             return
-
+        
         self.toolbars['map'].action['desc'] = 'displayAttrb'
         
-        # switch GIS Manager to output console to show query results
-        self._layerManager.notebook.SetSelection(1)
-
         self.MapWindow.mouse['use'] = "query"
-        self.MapWindow.mouse['box'] = "point"
-        self.MapWindow.zoomtype = 0
-
-        # change the cursor
-        self.MapWindow.SetCursor(self.cursors["cross"])
-
+        self._OnQuery()
+        
     def OnQueryModify(self, event):
-        """
-        Query vector map layer (edit mode)
+        """!Query vector map layer (edit mode) - 2D view mode
         """
         if self.toolbars['map'].GetAction() == 'modifyAttrb': # select previous action
             self.toolbars['map'].SelectDefault(event)
@@ -1225,12 +1229,30 @@ class MapFrame(wx.Frame):
         self.toolbars['map'].action['desc'] = 'modifyAttrb'
         
         self.MapWindow.mouse['use'] = "queryVector"
-        self.MapWindow.mouse['box'] = "point"
         self.MapWindow.pen = wx.Pen(colour='Red', width=2, style=wx.SHORT_DASH)
-        self.MapWindow.zoomtype = 0
+        self._OnQuery()
+        
+    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()
 
-        # change the cursor
-        self.MapWindow.SetCursor(self.cursors["cross"])
+    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 map layer features
@@ -1431,14 +1453,16 @@ class MapFrame(wx.Frame):
                                  text = _("Query surface (raster map)"),
                                  kind = wx.ITEM_CHECK)
             toolsmenu.AppendItem(raster)
-            self.Bind(wx.EVT_MENU, self.OnQueryDisplay, raster)
-            if action == "displayAttrb":
-                display.Check(True)
+            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.OnQueryDisplay, vector)
+            self.Bind(wx.EVT_MENU, self.OnNvizQueryVector, vector)
+            if action == "nvizQueryVector":
+                vector.Check(True)
         else:
             display = wx.MenuItem(parentMenu=toolsmenu, id=wx.ID_ANY,
                                   text=_("Query raster/vector map(s) (display mode)"),
@@ -1478,9 +1502,8 @@ class MapFrame(wx.Frame):
         self.PopupMenu(toolsmenu)
         toolsmenu.Destroy()
 
-    def AddTmpVectorMapLayer(self, name, cats, useId=False, addLayer=True):
-        """
-        Add temporal vector map layer to map composition
+    def AddTmpVectorMapLayer(self, name, cats, useId = False, addLayer = True):
+        """!Add temporal vector map layer to map composition
 
         @param name name of map layer
         @param useId use feature id instead of category 
@@ -1539,8 +1562,7 @@ class MapFrame(wx.Frame):
             return cmd
 
     def OnAnalyze(self, event):
-        """
-        Analysis tools menu
+        """!Analysis tools menu
         """
         point = wx.GetMousePosition()
         toolsmenu = wx.Menu()
@@ -1566,12 +1588,9 @@ class MapFrame(wx.Frame):
         toolsmenu.Destroy()
 
     def OnMeasure(self, event):
+        """!Init measurement routine that calculates map distance
+        along transect drawn on map display
         """
-        Init measurement routine that calculates
-        map distance along transect drawn on
-        map display
-        """
-
         self.totaldist = 0.0 # total measured distance
 
         # switch GIS Manager to output console to show measure results
@@ -1638,8 +1657,7 @@ class MapFrame(wx.Frame):
         return dist
 
     def Profile(self, event):
-        """
-        Init profile canvas and tools
+        """!Init profile canvas and tools
         """
         raster = []
         if self.tree.layer_selected and \
@@ -1702,8 +1720,7 @@ class MapFrame(wx.Frame):
 
 
     def Histogram(self, event):
-        """
-        Init histogram display canvas and tools
+        """!Init histogram display canvas and tools
         """
         self.histogram = histogram.HistFrame(self,
                                              id=wx.ID_ANY, size=globalvar.HIST_WINDOW_SIZE,
@@ -1716,8 +1733,7 @@ class MapFrame(wx.Frame):
 
 
     def OnDecoration(self, event):
-        """
-        Decorations overlay menu
+        """!Decorations overlay menu
         """
         point = wx.GetMousePosition()
         decmenu = wx.Menu()
@@ -1743,8 +1759,7 @@ class MapFrame(wx.Frame):
         decmenu.Destroy()
 
     def OnAddBarscale(self, event):
-        """
-        Handler for scale/arrow map decoration menu selection.
+        """!Handler for scale/arrow map decoration menu selection.
         """
         if self.dialogs['barscale']:
             return
@@ -1776,8 +1791,7 @@ class MapFrame(wx.Frame):
         self.MapWindow.mouse['use'] = 'pointer'        
 
     def OnAddLegend(self, event):
-        """
-        Handler for legend map decoration menu selection.
+        """!Handler for legend map decoration menu selection.
         """
         if self.dialogs['legend']:
             return
@@ -1807,8 +1821,7 @@ class MapFrame(wx.Frame):
         self.MapWindow.mouse['use'] = 'pointer'
 
     def OnAddText(self, event):
-        """
-        Handler for text decoration menu selection.
+        """!Handler for text decoration menu selection.
         """
         if self.MapWindow.dragid > -1:
             id = self.MapWindow.dragid
@@ -1852,8 +1865,7 @@ class MapFrame(wx.Frame):
         self.MapWindow.mouse['use'] = 'pointer'
 
     def GetOptData(self, dcmd, type, params, propwin):
-        """
-        Callback method for decoration overlay command generated by
+        """!Callback method for decoration overlay command generated by
         dialog created in menuform.py
         """
         # Reset comand and rendering options in render.Map. Always render decoration.
@@ -1871,8 +1883,7 @@ class MapFrame(wx.Frame):
         self.MapWindow.ZoomToMap()
 
     def OnZoomToRaster(self, event):
-        """!
-        Set display extents to match selected raster map (ignore NULLs)
+        """!Set display extents to match selected raster map (ignore NULLs)
         """
         self.MapWindow.ZoomToMap(ignoreNulls = True)
 
@@ -1966,10 +1977,6 @@ class MapFrame(wx.Frame):
 # end of class MapFrame
 
 class MapApp(wx.App):
-    """
-    MapApp class
-    """
-
     def OnInit(self):
         wx.InitAllImageHandlers()
         if __name__ == "__main__":

+ 46 - 34
gui/wxpython/gui_modules/nviz_mapdisp.py

@@ -98,10 +98,12 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
         # create nviz instance
         #
         if self.lmgr:
+            self.log = self.lmgr.goutput
             logerr = self.lmgr.goutput.cmd_stderr
             logmsg = self.lmgr.goutput.cmd_output
         else:
-            logerr = logmsg = None
+            self.log = logmsg = sys.stdout
+            logerr = sys.stderr
         self.nvizThread = NvizThread(logerr,
                                      self.parent.statusbarWin['progress'],
                                      logmsg)
@@ -246,40 +248,50 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
     
     def OnLeftUp(self, event):
         self.ReleaseMouse()
-        if self.mouse["use"] == "query":
-            result = self._display.QueryMap(event.GetX(), event.GetY())
-            log = self.lmgr.goutput
-            if result:
-                self.qpoints.append((result['x'], result['y'], result['z']))
-                log.WriteLog("%-30s: %.3f" % (_("Easting"),   result['x']))
-                log.WriteLog("%-30s: %.3f" % (_("Northing"),  result['y']))
-                log.WriteLog("%-30s: %.3f" % (_("Elevation"), result['z']))
-                log.WriteLog("%-30s: %s" % (_("Surface map elevation"), result['elevation']))
-                log.WriteLog("%-30s: %s" % (_("Surface map color"), result['color']))
-                if len(self.qpoints) > 1:
-                    prev = self.qpoints[-2]
-                    curr = self.qpoints[-1]
-                    dxy = math.sqrt(pow(prev[0]-curr[0], 2) +
-                                    pow(prev[1]-curr[1], 2))
-                    dxyz = math.sqrt(pow(prev[0]-curr[0], 2) +
-                                     pow(prev[1]-curr[1], 2) +
-                                     pow(prev[2]-curr[2], 2))
-                    log.WriteLog("%-30s: %.3f" % (_("XY distance from previous"), dxy))
-                    log.WriteLog("%-30s: %.3f" % (_("XYZ distance from previous"), dxyz))
-                    log.WriteLog("%-30s: %.3f" % (_("Distance along surface"),
-                                                self._display.GetDistanceAlongSurface(result['id'],
-                                                                                      (curr[0], curr[1]),
-                                                                                      (prev[0], prev[1]),
-                                                                                      useExag = False)))
-                    log.WriteLog("%-30s: %.3f" % (_("Distance along exag. surface"),
-                                                self._display.GetDistanceAlongSurface(result['id'],
-                                                                                      (curr[0], curr[1]),
-                                                                                      (prev[0], prev[1]),
+        if self.mouse["use"] == "nvizQuerySurface":
+            self.OnQuerySurface(event)
+        elif self.mouse["use"] == "nvizQueryVector":
+            self.OnQueryVector(event)
+    
+    def OnQuerySurface(self, event):
+        """!Query surface on given position"""
+        result = self._display.QueryMap(event.GetX(), 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']))
+            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:
+                prev = self.qpoints[-2]
+                curr = self.qpoints[-1]
+                dxy = math.sqrt(pow(prev[0]-curr[0], 2) +
+                                pow(prev[1]-curr[1], 2))
+                dxyz = math.sqrt(pow(prev[0]-curr[0], 2) +
+                                 pow(prev[1]-curr[1], 2) +
+                                 pow(prev[2]-curr[2], 2))
+                self.log.WriteLog("%-30s: %.3f" % (_("XY distance from previous"), dxy))
+                self.log.WriteLog("%-30s: %.3f" % (_("XYZ distance from previous"), dxyz))
+                self.log.WriteLog("%-30s: %.3f" % (_("Distance along surface"),
+                                              self._display.GetDistanceAlongSurface(result['id'],
+                                                                                    (curr[0], curr[1]),
+                                                                                    (prev[0], prev[1]),
+                                                                                    useExag = False)))
+                self.log.WriteLog("%-30s: %.3f" % (_("Distance along exag. surface"),
+                                              self._display.GetDistanceAlongSurface(result['id'],
+                                                                                    (curr[0], curr[1]),
+                                                                                    (prev[0], prev[1]),
                                                                                       useExag = True)))
-                log.WriteLog('-' * 80)
-            else:
-                log.WriteLog(_("No point on surface"))
-                log.WriteLog('-' * 80)
+            self.log.WriteCmdLog('-' * 80)
+        else:
+            self.log.WriteLog(_("No point on surface"))
+            self.log.WriteCmdLog('-' * 80)
+    
+    def OnQueryVector(self, event):
+        """!Query vector on given position"""
+        self.log.WriteWarning(_("Function not implemented yet"))
+        self.log.WriteCmdLog('-' * 80)
         
     def UpdateView(self, event):
         """!Change view settings"""