소스 검색

wxGUI: 'Zoom to selected map (ignore NULLs)' and 'Set computational region from selected map (ignore NULLs)' added to popup menu for raster layers, related to trac https://trac.osgeo.org/grass/ticket/157

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@31984 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 17 년 전
부모
커밋
9569bcba90
4개의 변경된 파일50개의 추가작업 그리고 12개의 파일을 삭제
  1. 20 4
      gui/wxpython/gui_modules/mapdisp.py
  2. 2 2
      gui/wxpython/gui_modules/nviz.py
  3. 8 3
      gui/wxpython/gui_modules/render.py
  4. 20 3
      gui/wxpython/gui_modules/wxgui_utils.py

+ 20 - 4
gui/wxpython/gui_modules/mapdisp.py

@@ -157,7 +157,7 @@ class MapWindow(object):
     def OnMouseMotion(self, event):
     def OnMouseMotion(self, event):
         pass
         pass
 
 
-    def ZoomToMap(self, event):
+    def OnZoomToMap(self, event):
         pass
         pass
 
 
     def GetSelectedLayer(self, nviz=False, index=False):
     def GetSelectedLayer(self, nviz=False, index=False):
@@ -2138,7 +2138,20 @@ class BufferedWindow(MapWindow, wx.Window):
 
 
         return removed
         return removed
 
 
-    def ZoomToMap(self, event):
+    def OnZoomToMap(self, event):
+        """
+        Set display extents to match selected raster (including NULLs)
+        or vector map.
+        """
+        self.ZoomToMap()
+
+    def OnZoomToRaster(self, event):
+        """
+        Set display extents to match selected raster map (ignore NULLs)
+        """
+        self.ZoomToMap(zoom=True)
+        
+    def ZoomToMap(self, zoom=False):
         """
         """
         Set display extents to match selected raster
         Set display extents to match selected raster
         or vector map.
         or vector map.
@@ -2155,7 +2168,10 @@ class BufferedWindow(MapWindow, wx.Window):
 
 
         # selected layer must be a valid map
         # selected layer must be a valid map
         if layer.type in ('raster', 'rgb', 'his', 'shaded', 'arrow'):
         if layer.type in ('raster', 'rgb', 'his', 'shaded', 'arrow'):
-            self.Map.region = self.Map.GetRegion(rast="%s" % layer.name)
+            if layer.type == 'raster':
+                self.Map.region = self.Map.GetRegion(rast="%s" % layer.name, zoom=zoom)
+            else:
+                self.Map.region = self.Map.GetRegion(rast="%s" % layer.name)
         elif layer.type in ('vector', 'thememap', 'themechart'):
         elif layer.type in ('vector', 'thememap', 'themechart'):
             if self.parent.digit and layer.name == self.parent.digit.map and \
             if self.parent.digit and layer.name == self.parent.digit.map and \
                self.parent.digit.type == 'vdigit':
                self.parent.digit.type == 'vdigit':
@@ -3651,7 +3667,7 @@ class MapFrame(wx.Frame):
         # Add items to the menu
         # Add items to the menu
         zoommap = wx.MenuItem(zoommenu, wx.ID_ANY, _('Zoom to selected map'))
         zoommap = wx.MenuItem(zoommenu, wx.ID_ANY, _('Zoom to selected map'))
         zoommenu.AppendItem(zoommap)
         zoommenu.AppendItem(zoommap)
-        self.Bind(wx.EVT_MENU, self.MapWindow.ZoomToMap, zoommap)
+        self.Bind(wx.EVT_MENU, self.MapWindow.OnZoomToMap, zoommap)
 
 
         zoomwind = wx.MenuItem(zoommenu, wx.ID_ANY, _('Zoom to computational region (set with g.region)'))
         zoomwind = wx.MenuItem(zoommenu, wx.ID_ANY, _('Zoom to computational region (set with g.region)'))
         zoommenu.AppendItem(zoomwind)
         zoommenu.AppendItem(zoomwind)

+ 2 - 2
gui/wxpython/gui_modules/nviz.py

@@ -290,7 +290,7 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
         self.nvizClass.Reset()
         self.nvizClass.Reset()
         self.init = False
         self.init = False
 
 
-    def ZoomToMap(self, event):
+    def OnZoomToMap(self, event):
         """
         """
         Set display extents to match selected raster
         Set display extents to match selected raster
         or vector map or volume.
         or vector map or volume.
@@ -302,7 +302,7 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
         if layer is None:
         if layer is None:
             return
             return
 
 
-        Debug.msg (3, "GLWindow.ZoomToMap(): layer=%s, type=%s" % \
+        Debug.msg (3, "GLWindow.OnZoomToMap(): layer=%s, type=%s" % \
                        (layer.name, layer.type))
                        (layer.name, layer.type))
 
 
         self.nvizClass.SetViewportDefault()
         self.nvizClass.SetViewportDefault()

+ 8 - 3
gui/wxpython/gui_modules/render.py

@@ -474,7 +474,7 @@ class Map(object):
             self.height = 480
             self.height = 480
             return False
             return False
 
 
-    def GetRegion(self, rast=None, vect=None,
+    def GetRegion(self, rast=None, zoom=False, vect=None,
                   n=None, s=None, e=None, w=None, default=False):
                   n=None, s=None, e=None, w=None, default=False):
         """
         """
         Get region settings (g.region -upgc)
         Get region settings (g.region -upgc)
@@ -483,6 +483,7 @@ class Map(object):
 
 
         @param rast raster name or None
         @param rast raster name or None
         @param vect vector name or None
         @param vect vector name or None
+        @param zoom zoom to raster (ignore NULLs)
         @param n,s,e,w force extent
         @param n,s,e,w force extent
         @param default force default region settings
         @param default force default region settings
         
         
@@ -516,10 +517,14 @@ class Map(object):
             cmdList.append('w=%s' % w)
             cmdList.append('w=%s' % w)
 
 
         if rast:
         if rast:
-            cmdList.append('rast=%s' % rast)
+            if zoom:
+                cmdList.append('zoom=%s' % rast)
+            else:
+                cmdList.append('rast=%s' % rast)
+
         if vect:
         if vect:
             cmdList.append('vect=%s' % vect)
             cmdList.append('vect=%s' % vect)
-
+        
         try:
         try:
             cmdRegion = gcmd.Command(cmdList)
             cmdRegion = gcmd.Command(cmdList)
         except gcmd.CmdError, e:
         except gcmd.CmdError, e:

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

@@ -215,7 +215,9 @@ class LayerTree(CT.CustomTreeCtrl):
             self.popupID9 = wx.NewId()
             self.popupID9 = wx.NewId()
             self.popupID10 = wx.NewId()
             self.popupID10 = wx.NewId()
             self.popupID11 = wx.NewId() # nviz
             self.popupID11 = wx.NewId() # nviz
-
+            self.popupID12 = wx.NewId()
+            self.popupID13 = wx.NewId()
+            
         self.popupMenu = wx.Menu()
         self.popupMenu = wx.Menu()
         # general item
         # general item
         self.popupMenu.Append(self.popupID1, text=_("Remove"))
         self.popupMenu.Append(self.popupID1, text=_("Remove"))
@@ -239,7 +241,7 @@ class LayerTree(CT.CustomTreeCtrl):
             self.popupMenu.Append(self.popupID3, text=_("Properties"))
             self.popupMenu.Append(self.popupID3, text=_("Properties"))
             self.Bind(wx.EVT_MENU, self.OnPopupProperties, id=self.popupID3)
             self.Bind(wx.EVT_MENU, self.OnPopupProperties, id=self.popupID3)
             self.popupMenu.Append(self.popupID9, text=_("Zoom to selected map"))
             self.popupMenu.Append(self.popupID9, text=_("Zoom to selected map"))
-            self.Bind(wx.EVT_MENU, self.mapdisplay.MapWindow.ZoomToMap, id=self.popupID9)
+            self.Bind(wx.EVT_MENU, self.mapdisplay.MapWindow.OnZoomToMap, id=self.popupID9)
             self.popupMenu.Append(self.popupID10, text=_("Set computational region from selected map"))
             self.popupMenu.Append(self.popupID10, text=_("Set computational region from selected map"))
             self.Bind(wx.EVT_MENU, self.OnSetCompRegFromMap, id=self.popupID10)
             self.Bind(wx.EVT_MENU, self.OnSetCompRegFromMap, id=self.popupID10)
 
 
@@ -285,6 +287,10 @@ class LayerTree(CT.CustomTreeCtrl):
         # raster layers (specific items)
         # raster layers (specific items)
         #
         #
         elif mltype and mltype == "raster":
         elif mltype and mltype == "raster":
+            self.popupMenu.Append(self.popupID12, text=_("Zoom to selected map (ignore NULLs)"))
+            self.Bind(wx.EVT_MENU, self.mapdisplay.MapWindow.OnZoomToRaster, id=self.popupID12)
+            self.popupMenu.Append(self.popupID13, text=_("Set computational region from selected map (ignore NULLs)"))
+            self.Bind(wx.EVT_MENU, self.OnSetCompRegFromRaster, id=self.popupID13)
             self.popupMenu.AppendSeparator()
             self.popupMenu.AppendSeparator()
             self.popupMenu.Append(self.popupID4, _("Histogram"))
             self.popupMenu.Append(self.popupID4, _("Histogram"))
             self.Bind (wx.EVT_MENU, self.OnHistogram, id=self.popupID4)
             self.Bind (wx.EVT_MENU, self.OnHistogram, id=self.popupID4)
@@ -316,8 +322,19 @@ class LayerTree(CT.CustomTreeCtrl):
         # print output to command log area
         # print output to command log area
         self.gismgr.goutput.RunCmd(cmd)
         self.gismgr.goutput.RunCmd(cmd)
 
 
+    def OnSetCompRegFromRaster(self, event):
+        """Set computational region from selected raster map (ignore NULLs)"""
+        mapLayer = self.GetPyData(self.layer_selected)[0]['maplayer']
+
+        cmd = ['g.region',
+               '-p',
+               'zoom=%s' % mapLayer.name]
+        
+        # print output to command log area
+        self.gismgr.goutput.RunCmd(cmd)
+         
     def OnSetCompRegFromMap(self, event):
     def OnSetCompRegFromMap(self, event):
-        """Set computational region from selected map"""
+        """Set computational region from selected raster/vector map"""
         mapLayer = self.GetPyData(self.layer_selected)[0]['maplayer']
         mapLayer = self.GetPyData(self.layer_selected)[0]['maplayer']
         mltype = self.GetPyData(self.layer_selected)[0]['type']
         mltype = self.GetPyData(self.layer_selected)[0]['type']