Przeglądaj źródła

wxGUI/layer tree: allow multiple selections for r.colors, r.univar, and wx-histogramming tool

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@58003 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 11 lat temu
rodzic
commit
a97712cb09
1 zmienionych plików z 50 dodań i 32 usunięć
  1. 50 32
      gui/wxpython/lmgr/layertree.py

+ 50 - 32
gui/wxpython/lmgr/layertree.py

@@ -535,26 +535,30 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
                 self.Bind(wx.EVT_MENU, self.mapdisplay.OnZoomToRaster, id=self.popupID['zoom1'])
                 self.Bind(wx.EVT_MENU, self.mapdisplay.OnZoomToRaster, id=self.popupID['zoom1'])
                 self.popupMenu.Append(self.popupID['region1'], text=_("Set computational region from selected map(s) (ignore NULLs)"))
                 self.popupMenu.Append(self.popupID['region1'], text=_("Set computational region from selected map(s) (ignore NULLs)"))
                 self.Bind(wx.EVT_MENU, self.OnSetCompRegFromRaster, id=self.popupID['region1'])
                 self.Bind(wx.EVT_MENU, self.OnSetCompRegFromRaster, id=self.popupID['region1'])
-
+            
+            self.popupMenu.AppendSeparator()
+            
             if numSelected == 1:
             if numSelected == 1:
-                self.popupMenu.AppendSeparator()
                 self.popupMenu.Append(self.popupID['export'], text = _("Export"))
                 self.popupMenu.Append(self.popupID['export'], text = _("Export"))
                 self.Bind(wx.EVT_MENU, lambda x: self.lmgr.OnMenuCmd(cmd = ['r.out.gdal',
                 self.Bind(wx.EVT_MENU, lambda x: self.lmgr.OnMenuCmd(cmd = ['r.out.gdal',
                                                                             'input=%s' % mapLayer.GetName()]),
                                                                             'input=%s' % mapLayer.GetName()]),
                           id = self.popupID['export'])
                           id = self.popupID['export'])
-            
+                
                 self.popupMenu.AppendSeparator()
                 self.popupMenu.AppendSeparator()
-                self.popupMenu.Append(self.popupID['color'], _("Set color table"))
-                self.Bind (wx.EVT_MENU, self.OnRasterColorTable, id = self.popupID['color'])
-                self.popupMenu.Append(self.popupID['hist'], _("Histogram"))
-                self.Bind (wx.EVT_MENU, self.OnHistogram, id = self.popupID['hist'])
-                self.popupMenu.Append(self.popupID['univar'], _("Univariate raster statistics"))
-                self.Bind (wx.EVT_MENU, self.OnUnivariateStats, id = self.popupID['univar'])
+                
+            self.popupMenu.Append(self.popupID['color'], _("Set color table"))
+            self.Bind (wx.EVT_MENU, self.OnRasterColorTable, id = self.popupID['color'])
+            self.popupMenu.Append(self.popupID['hist'], _("Histogram"))
+            self.Bind (wx.EVT_MENU, self.OnHistogram, id = self.popupID['hist'])
+            self.popupMenu.Append(self.popupID['univar'], _("Univariate raster statistics"))
+            self.Bind (wx.EVT_MENU, self.OnUnivariateStats, id = self.popupID['univar'])
+
+            if numSelected == 1:
                 self.popupMenu.Append(self.popupID['prof'], _("Profile"))
                 self.popupMenu.Append(self.popupID['prof'], _("Profile"))
                 self.Bind (wx.EVT_MENU, self.OnProfile, id = self.popupID['prof'])
                 self.Bind (wx.EVT_MENU, self.OnProfile, id = self.popupID['prof'])
                 self.popupMenu.Append(self.popupID['meta'], _("Metadata"))
                 self.popupMenu.Append(self.popupID['meta'], _("Metadata"))
                 self.Bind (wx.EVT_MENU, self.OnMetadata, id = self.popupID['meta'])
                 self.Bind (wx.EVT_MENU, self.OnMetadata, id = self.popupID['meta'])
-
+            
         elif mltype and mltype == '3d-raster':
         elif mltype and mltype == '3d-raster':
             if numSelected == 1:
             if numSelected == 1:
                 self.popupMenu.AppendSeparator()
                 self.popupMenu.AppendSeparator()
@@ -677,16 +681,22 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         self.mapdisplay.Profile(rasters=[mapLayer.GetName()])
         self.mapdisplay.Profile(rasters=[mapLayer.GetName()])
 
 
     def OnRasterColorTable(self, event):
     def OnRasterColorTable(self, event):
-        """!Set color table for raster map"""
-        name = self.GetLayerInfo(self.layer_selected, key = 'maplayer').GetName()
-        ltype = self.GetLayerInfo(self.layer_selected, key='type')
-        if ltype == '3d-raster':
-            command = 'r3.colors'
-        else:
-            command = 'r.colors'
-        GUI(parent = self, giface = self._giface).ParseCommand([command,
-                                                                'map=%s' % name])
-
+        """!Set color table for 2D/3D raster map"""
+        raster2d = []
+        raster3d = []
+        for layer in self.GetSelectedLayers():
+            if self.GetLayerInfo(layer, key='type') == '3d-raster':
+                raster3d.append(self.GetLayerInfo(layer, key = 'maplayer').GetName())
+            else:
+                raster2d.append(self.GetLayerInfo(layer, key = 'maplayer').GetName())
+        
+        if raster2d:
+            GUI(parent = self, giface = self._giface).ParseCommand(['r.colors',
+                                                                    'map=%s' % ','.join(raster2d)])
+        if raster3d:
+            GUI(parent = self, giface = self._giface).ParseCommand(['r3.colors',
+                                                                    'map=%s' % ','.join(raster3d)])
+            
     def OnVectorColorTable(self, event):
     def OnVectorColorTable(self, event):
         """!Set color table for vector map"""
         """!Set color table for vector map"""
         name = self.GetLayerInfo(self.layer_selected, key = 'maplayer').GetName()
         name = self.GetLayerInfo(self.layer_selected, key = 'maplayer').GetName()
@@ -696,27 +706,35 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
     def OnHistogram(self, event):
     def OnHistogram(self, event):
         """!Plot histogram for given raster map layer
         """!Plot histogram for given raster map layer
         """
         """
-        mapLayer = self.GetLayerInfo(self.layer_selected, key = 'maplayer')
-        if not mapLayer.GetName():
+        rasterList = []
+        for layer in self.GetSelectedLayers():
+            rasterList.append(self.GetLayerInfo(layer, key = 'maplayer').GetName())
+
+        if not rasterList:
             GError(parent = self,
             GError(parent = self,
                    message = _("Unable to display histogram of "
                    message = _("Unable to display histogram of "
                                "raster map. No map name defined."))
                                "raster map. No map name defined."))
             return
             return
         
         
-        win = HistogramPlotFrame(parent = self, rasterList = [mapLayer.GetName()])
-        
+        win = HistogramPlotFrame(parent = self, rasterList = rasterList)
         win.CentreOnScreen()
         win.CentreOnScreen()
         win.Show()
         win.Show()
                 
                 
     def OnUnivariateStats(self, event):
     def OnUnivariateStats(self, event):
-        """!Univariate raster statistics"""
-        name = self.GetLayerInfo(self.layer_selected, key = 'maplayer').GetName()
-        ltype = self.GetLayerInfo(self.layer_selected, key='type')
-        if ltype == '3d-raster':
-            command = 'r3.univar'
-        else:
-            command = 'r.univar'
-        self._giface.RunCmd([command, 'map=%s' % name], switchPage=True)
+        """!Univariate 2D/3D raster statistics"""
+        raster2d = []
+        raster3d = []
+        for layer in self.GetSelectedLayers():
+            if self.GetLayerInfo(layer, key='type') == '3d-raster':
+                raster3d.append(self.GetLayerInfo(layer, key = 'maplayer').GetName())
+            else:
+                raster2d.append(self.GetLayerInfo(layer, key = 'maplayer').GetName())
+        
+        if raster2d:
+            self._giface.RunCmd(['r.univar', 'map=%s' % ','.join(raster2d)], switchPage=True)
+        
+        if raster3d:
+            self._giface.RunCmd(['r3.univar', 'map=%s' % ','.join(raster3d)], switchPage=True)
 
 
     def OnStartEditing(self, event):
     def OnStartEditing(self, event):
         """!Start editing vector map layer requested by the user
         """!Start editing vector map layer requested by the user