|
@@ -424,7 +424,7 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
|
|
|
if not hasattr(self, "popupID"):
|
|
|
self.popupID = dict()
|
|
|
for key in (
|
|
|
- 'remove', 'rename', 'opacity', 'nviz', 'zoom', 'region',
|
|
|
+ 'remove', 'rename', 'opacity', 'nviz', 'zoom', 'region', 'align',
|
|
|
'export', 'attr', 'edit', 'save_ws', 'bgmap', 'topo', 'meta',
|
|
|
'null', 'zoom1', 'color', 'colori', 'hist', 'univar', 'prof',
|
|
|
'properties', 'sql', 'copy', 'report', 'export-pg',
|
|
@@ -535,27 +535,19 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
|
|
|
wx.EVT_MENU,
|
|
|
self.OnSetCompRegFromMap,
|
|
|
id=self.popupID['region'])
|
|
|
- elif not same:
|
|
|
- align = True
|
|
|
- nrast = 0
|
|
|
- for layer in selected:
|
|
|
- if self.GetLayerInfo(layer, key='type') == 'raster':
|
|
|
- nrast += 1
|
|
|
- if self.GetLayerInfo(layer, key='type') not in ('raster', 'vector'):
|
|
|
- align = False
|
|
|
- break
|
|
|
-
|
|
|
- if align and nrast == 1:
|
|
|
+
|
|
|
+ # raster align
|
|
|
+ if ltype and ltype == "raster" and len(selected) == 1:
|
|
|
item = wx.MenuItem(
|
|
|
self.popupMenu,
|
|
|
- id=self.popupID['region'],
|
|
|
- text=_("Set computational region from selected vector(s) align to raster"))
|
|
|
+ id=self.popupID['align'],
|
|
|
+ text=_("Align computational region to selected map"))
|
|
|
item.SetBitmap(MetaIcon(img='region').GetBitmap(self.bmpsize))
|
|
|
self.popupMenu.AppendItem(item)
|
|
|
self.Bind(
|
|
|
wx.EVT_MENU,
|
|
|
- self.OnSetCompRegFromMap,
|
|
|
- id=self.popupID['region'])
|
|
|
+ self.OnAlignCompRegToRaster,
|
|
|
+ id=self.popupID['align'])
|
|
|
|
|
|
# vector layers (specific items)
|
|
|
if ltype and ltype == "vector" and numSelected == 1:
|
|
@@ -922,7 +914,7 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
|
|
|
self._giface.RunCmd(cmd)
|
|
|
|
|
|
def OnSetCompRegFromMap(self, event):
|
|
|
- """Set computational region from selected raster/vector map
|
|
|
+ """Set computational region from selected raster/vector map(s)
|
|
|
"""
|
|
|
rast = []
|
|
|
vect = []
|
|
@@ -942,16 +934,13 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
|
|
|
rast.append(rname)
|
|
|
|
|
|
kwargs = {}
|
|
|
- if vect and len(rast) == 1:
|
|
|
- kwargs['align'] = ','.join(rast)
|
|
|
- elif rast:
|
|
|
+ if rast:
|
|
|
kwargs['raster'] = ','.join(rast)
|
|
|
if vect:
|
|
|
kwargs['vector'] = ','.join(vect)
|
|
|
if rast3d:
|
|
|
kwargs['raster_3d'] = ','.join(rast3d)
|
|
|
|
|
|
- # print output to command log area
|
|
|
if kwargs:
|
|
|
if UserSettings.Get(group='general',
|
|
|
key='region', subkey=['resAlign', 'enabled']):
|
|
@@ -964,6 +953,29 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
|
|
|
# re-render map display
|
|
|
self._giface.GetMapWindow().UpdateMap(render=False)
|
|
|
|
|
|
+ def OnAlignCompRegToRaster(self, event):
|
|
|
+ """Align computational region to selected raster map
|
|
|
+ """
|
|
|
+ selected = self.GetSelections()
|
|
|
+ if len(selected) != 1 or \
|
|
|
+ self.GetLayerInfo(selected[0], key='type') != 'raster':
|
|
|
+ return
|
|
|
+
|
|
|
+ kwargs = {'align': self.GetLayerInfo(selected[0],
|
|
|
+ key='maplayer').GetName()
|
|
|
+ }
|
|
|
+
|
|
|
+ if UserSettings.Get(group='general',
|
|
|
+ key='region', subkey=['resAlign', 'enabled']):
|
|
|
+ kwargs['flags'] = 'a'
|
|
|
+ # command must run in main thread otherwise it can be
|
|
|
+ # launched after rendering is done (region extent will
|
|
|
+ # remain untouched)
|
|
|
+ RunCommand('g.region', **kwargs)
|
|
|
+
|
|
|
+ # re-render map display
|
|
|
+ self._giface.GetMapWindow().UpdateMap(render=False)
|
|
|
+
|
|
|
def OnProfile(self, event):
|
|
|
"""Plot profile of given raster map layer"""
|
|
|
mapLayer = self.GetLayerInfo(self.layer_selected, key='maplayer')
|