[GRASS-SVN] r50836 - grass/trunk/gui/wxpython/psmap

svn_grass at osgeo.org svn_grass at osgeo.org
Thu Feb 16 14:59:47 EST 2012


Author: annakrat
Date: 2012-02-16 11:59:47 -0800 (Thu, 16 Feb 2012)
New Revision: 50836

Modified:
   grass/trunk/gui/wxpython/psmap/dialogs.py
   grass/trunk/gui/wxpython/psmap/frame.py
   grass/trunk/gui/wxpython/psmap/instructions.py
   grass/trunk/gui/wxpython/psmap/utils.py
Log:
wxGUI/wxpsmap: simplified method for coordinates conversion, changed parameter name (map is python built-in function)

Modified: grass/trunk/gui/wxpython/psmap/dialogs.py
===================================================================
--- grass/trunk/gui/wxpython/psmap/dialogs.py	2012-02-16 11:12:59 UTC (rev 50835)
+++ grass/trunk/gui/wxpython/psmap/dialogs.py	2012-02-16 19:59:47 UTC (rev 50836)
@@ -91,7 +91,7 @@
         if key < wx.WXK_SPACE or key == wx.WXK_DELETE or key > 255:
             event.Skip()
             return
-        if self.flag == 'DIGIT_ONLY' and chr(key) in string.digits + '.':
+        if self.flag == 'DIGIT_ONLY' and chr(key) in string.digits + '.-':
             event.Skip()
             return
 ##        if self.flag == 'SCALE' and chr(key) in string.digits + ':':
@@ -259,7 +259,7 @@
         northingLabel  = wx.StaticText(panel, id = wx.ID_ANY, label = "N:")
         panel.position['eCtrl'] = wx.TextCtrl(panel, id = wx.ID_ANY, value = "")
         panel.position['nCtrl'] = wx.TextCtrl(panel, id = wx.ID_ANY, value = "")
-        east, north = PaperMapCoordinates(map = self.instruction[self.mapId], x = dialogDict['where'][0], y = dialogDict['where'][1], paperToMap = True)
+        east, north = PaperMapCoordinates(mapInstr = self.instruction[self.mapId], x = dialogDict['where'][0], y = dialogDict['where'][1], paperToMap = True)
         panel.position['eCtrl'].SetValue(str(east))
         panel.position['nCtrl'].SetValue(str(north))
         
@@ -3687,7 +3687,7 @@
             map = self.instruction.FindInstructionByType('initMap')
         self.mapId = map.id
 
-        self.textDict['east'], self.textDict['north'] = PaperMapCoordinates(map = map, x = self.textDict['where'][0], y = self.textDict['where'][1], paperToMap = True)
+        self.textDict['east'], self.textDict['north'] = PaperMapCoordinates(mapInstr = map, x = self.textDict['where'][0], y = self.textDict['where'][1], paperToMap = True)
         
         notebook = wx.Notebook(parent = self, id = wx.ID_ANY, style = wx.BK_DEFAULT)     
         self.textPanel = self._textPanel(notebook)
@@ -4015,7 +4015,7 @@
             else:
                 self.textDict['north'] = self.textDict['north']
 
-            self.textDict['where'] = PaperMapCoordinates(map = self.instruction[self.mapId], x = float(self.textDict['east']),
+            self.textDict['where'] = PaperMapCoordinates(mapInstr = self.instruction[self.mapId], x = float(self.textDict['east']),
                                                             y = float(self.textDict['north']), paperToMap = False)
         #rotation
         if self.rotCtrl.GetValue():
@@ -4078,7 +4078,7 @@
             map = self.instruction.FindInstructionByType('initMap')
         self.mapId = map.id
 
-        self.imageDict['east'], self.imageDict['north'] = PaperMapCoordinates(map = map, x = self.imageDict['where'][0], y = self.imageDict['where'][1], paperToMap = True)
+        self.imageDict['east'], self.imageDict['north'] = PaperMapCoordinates(mapInstr = map, x = self.imageDict['where'][0], y = self.imageDict['where'][1], paperToMap = True)
         
         notebook = wx.Notebook(parent = self, id = wx.ID_ANY, style = wx.BK_DEFAULT)
         self.imagePanelName = imagePanelName
@@ -4429,7 +4429,7 @@
             else:
                 self.imageDict['north'] = self.imageDict['north']
 
-            x, y = PaperMapCoordinates(map = self.instruction[self.mapId], x = float(self.imageDict['east']),
+            x, y = PaperMapCoordinates(mapInstr = self.instruction[self.mapId], x = float(self.imageDict['east']),
                                        y = float(self.imageDict['north']), paperToMap = False)
 
         #rotation
@@ -4539,7 +4539,7 @@
             mapObj = self.instruction.FindInstructionByType('initMap')
         self.mapId = mapObj.id
         
-        self.pointDict['east'], self.pointDict['north'] = PaperMapCoordinates(map = mapObj, x = self.pointDict['where'][0], y = self.pointDict['where'][1], paperToMap = True)
+        self.pointDict['east'], self.pointDict['north'] = PaperMapCoordinates(mapInstr = mapObj, x = self.pointDict['where'][0], y = self.pointDict['where'][1], paperToMap = True)
         
         notebook = wx.Notebook(parent = self, id = wx.ID_ANY, style = wx.BK_DEFAULT)
         self.pointPanelName = pointPanelName
@@ -4757,7 +4757,7 @@
             else:
                 self.pointDict['north'] = self.pointDict['north']
 
-            x, y = PaperMapCoordinates(map = self.instruction[self.mapId], x = float(self.pointDict['east']),
+            x, y = PaperMapCoordinates(mapInstr = self.instruction[self.mapId], x = float(self.pointDict['east']),
                                        y = float(self.pointDict['north']), paperToMap = False)
 
         #rotation
@@ -4923,11 +4923,11 @@
         self.mapId = mapInstr.id
         point1 = self.rectDict['where'][0]
         point2 = self.rectDict['where'][1]
-        self.rectDict['east1'], self.rectDict['north1'] = PaperMapCoordinates(map = mapInstr,
+        self.rectDict['east1'], self.rectDict['north1'] = PaperMapCoordinates(mapInstr = mapInstr,
                                                                                 x = point1[0],
                                                                                 y = point1[1],
                                                                                 paperToMap = True)
-        self.rectDict['east2'], self.rectDict['north2'] = PaperMapCoordinates(map = mapInstr,
+        self.rectDict['east2'], self.rectDict['north2'] = PaperMapCoordinates(mapInstr = mapInstr,
                                                                                 x = point2[0],
                                                                                 y = point2[1],
                                                                                 paperToMap = True)

Modified: grass/trunk/gui/wxpython/psmap/frame.py
===================================================================
--- grass/trunk/gui/wxpython/psmap/frame.py	2012-02-16 11:12:59 UTC (rev 50835)
+++ grass/trunk/gui/wxpython/psmap/frame.py	2012-02-16 19:59:47 UTC (rev 50836)
@@ -1210,21 +1210,21 @@
                 instr = self.instruction[item.id]
                 if itemType in ('line', 'rectangle'):
                     if itemType == 'line':
-                        e1, n1 = PaperMapCoordinates(map = self.instruction[mapId], x = instr['where'][0][0],
+                        e1, n1 = PaperMapCoordinates(mapInstr = self.instruction[mapId], x = instr['where'][0][0],
                                                      y = instr['where'][0][1], paperToMap = True)
-                        e2, n2 = PaperMapCoordinates(map = self.instruction[mapId], x = instr['where'][1][0],
+                        e2, n2 = PaperMapCoordinates(mapInstr = self.instruction[mapId], x = instr['where'][1][0],
                                                      y = instr['where'][1][1], paperToMap = True)
                     else: 
-                        e1, n1 = PaperMapCoordinates(map = self.instruction[mapId], x = instr['rect'].GetLeft(),
+                        e1, n1 = PaperMapCoordinates(mapInstr = self.instruction[mapId], x = instr['rect'].GetLeft(),
                                                      y = instr['rect'].GetTop(), paperToMap = True)
-                        e2, n2 = PaperMapCoordinates(map = self.instruction[mapId], x = instr['rect'].GetRight(),
+                        e2, n2 = PaperMapCoordinates(mapInstr = self.instruction[mapId], x = instr['rect'].GetRight(),
                                                      y = instr['rect'].GetBottom(), paperToMap = True)
                     instr['east1'] = e1
                     instr['north1'] = n1
                     instr['east2'] = e2
                     instr['north2'] = n2
                 else:
-                    e, n = PaperMapCoordinates(map = self.instruction[mapId], x = instr['where'][0],
+                    e, n = PaperMapCoordinates(mapInstr = self.instruction[mapId], x = instr['where'][0],
                                                y = instr['where'][1], paperToMap = True)
                     instr['east'], instr['north'] = e, n
                 

Modified: grass/trunk/gui/wxpython/psmap/instructions.py
===================================================================
--- grass/trunk/gui/wxpython/psmap/instructions.py	2012-02-16 11:12:59 UTC (rev 50835)
+++ grass/trunk/gui/wxpython/psmap/instructions.py	2012-02-16 19:59:47 UTC (rev 50836)
@@ -869,7 +869,7 @@
             except(IndexError, ValueError):
                 GError(_("Failed to read instruction %s") % instruction)
                 return False
-        instr['where'] = PaperMapCoordinates(map = map, x = instr['east'], y = instr['north'], paperToMap = False)       
+        instr['where'] = PaperMapCoordinates(mapInstr = map, x = instr['east'], y = instr['north'], paperToMap = False)       
         self.instruction.update(instr)
 
         return True 
@@ -937,7 +937,7 @@
             instr['size'] = BBoxAfterRotation(instr['size'][0], instr['size'][1], instr['rotate'])
         self.instruction.update(instr)
         self.ChangeRefPoint(toCenter = False)
-        instr['where'] = PaperMapCoordinates(map = mapInstr, x = self.instruction['east'],
+        instr['where'] = PaperMapCoordinates(mapInstr = mapInstr, x = self.instruction['east'],
                                              y = self.instruction['north'], paperToMap = False)       
         w = self.unitConv.convert(value = instr['size'][0], fromUnit = 'point', toUnit = 'inch')
         h = self.unitConv.convert(value = instr['size'][1], fromUnit = 'point', toUnit = 'inch')
@@ -955,18 +955,18 @@
         mapId = mapInstr.id
         if toCenter:
             center = self.instruction['rect'].GetCentre()
-            ENCenter = PaperMapCoordinates(map = self.settings[mapId],
+            ENCenter = PaperMapCoordinates(mapInstr = self.settings[mapId],
                                            x = center[0], y = center[1], paperToMap = True)
                                            
             self.instruction['east'], self.instruction['north'] = ENCenter
         else:
-            x, y = PaperMapCoordinates(map = self.settings[mapId], x = self.instruction['east'],
+            x, y = PaperMapCoordinates(mapInstr = self.settings[mapId], x = self.instruction['east'],
                                        y = self.instruction['north'], paperToMap = False)
             w = self.unitConv.convert(value = self.instruction['size'][0], fromUnit = 'point', toUnit = 'inch')
             h = self.unitConv.convert(value = self.instruction['size'][1], fromUnit = 'point', toUnit = 'inch')
             x -= w * self.instruction['scale'] / 2
             y -= h * self.instruction['scale'] / 2
-            e, n = PaperMapCoordinates(map = self.settings[mapId], x = x, y = y, paperToMap = True)
+            e, n = PaperMapCoordinates(mapInstr = self.settings[mapId], x = x, y = y, paperToMap = True)
             self.instruction['east'], self.instruction['north'] = e, n
 
     def GetImageOrigSize(self, imagePath):
@@ -1067,7 +1067,7 @@
                 return False
         
         self.instruction.update(instr)
-        instr['where'] = PaperMapCoordinates(map = mapInstr, x = self.instruction['east'],
+        instr['where'] = PaperMapCoordinates(mapInstr = mapInstr, x = self.instruction['east'],
                                              y = self.instruction['north'], paperToMap = False)
         w = h = self.unitConv.convert(value = instr['size'], fromUnit = 'point', toUnit = 'inch')
         instr['rect'] = Rect2D(x = float(instr['where'][0]) - w / 2, y = float(instr['where'][1] - h / 2),
@@ -1122,9 +1122,9 @@
                 return False
         
         self.instruction.update(instr)
-        e1, n1 = PaperMapCoordinates(map = mapInstr, x = self.instruction['east1'],
+        e1, n1 = PaperMapCoordinates(mapInstr = mapInstr, x = self.instruction['east1'],
                                      y = self.instruction['north1'], paperToMap = False)
-        e2, n2 = PaperMapCoordinates(map = mapInstr, x = self.instruction['east2'],
+        e2, n2 = PaperMapCoordinates(mapInstr = mapInstr, x = self.instruction['east2'],
                                      y = self.instruction['north2'], paperToMap = False)
         instr['where'] = [wx.Point2D(e1, n1), wx.Point2D(e2, n2)]
         instr['rect'] = Rect2DPP(instr['where'][0], instr['where'][1])
@@ -1181,9 +1181,9 @@
                 return False
         
         self.instruction.update(instr)
-        e1, n1 = PaperMapCoordinates(map = mapInstr, x = self.instruction['east1'],
+        e1, n1 = PaperMapCoordinates(mapInstr = mapInstr, x = self.instruction['east1'],
                                        y = self.instruction['north1'], paperToMap = False)
-        e2, n2 = PaperMapCoordinates(map = mapInstr, x = self.instruction['east2'],
+        e2, n2 = PaperMapCoordinates(mapInstr = mapInstr, x = self.instruction['east2'],
                                        y = self.instruction['north2'], paperToMap = False)
         instr['rect'] = Rect2DPP(wx.Point2D(e1, n1), wx.Point2D(e2, n2))
         self.instruction.update(instr)

Modified: grass/trunk/gui/wxpython/psmap/utils.py
===================================================================
--- grass/trunk/gui/wxpython/psmap/utils.py	2012-02-16 11:12:59 UTC (rev 50835)
+++ grass/trunk/gui/wxpython/psmap/utils.py	2012-02-16 19:59:47 UTC (rev 50836)
@@ -154,50 +154,44 @@
         else:  
             return None
         
-def PaperMapCoordinates(map, x, y, paperToMap = True):
-    """!Converts paper (inch) coordinates -> map coordinates"""
-    unitConv = UnitConversion()
-    currRegionDict = grass.region()
-    cornerEasting, cornerNorthing = currRegionDict['w'], currRegionDict['n']
-    xMap = map['rect'][0]
-    yMap = map['rect'][1]
-    widthMap = map['rect'][2] * 0.0254 # to meter
-    heightMap = map['rect'][3] * 0.0254
-    xScale = widthMap / abs(currRegionDict['w'] - currRegionDict['e'])
-    yScale = heightMap / abs(currRegionDict['n'] - currRegionDict['s'])
-    currScale = (xScale + yScale) / 2
- 
-    if not paperToMap:
-        textEasting, textNorthing = x, y
-        eastingDiff = textEasting - cornerEasting 
-        if currRegionDict['w'] > currRegionDict['e']:
-            eastingDiff = - eastingDiff
-        else:
-            eastingDiff = eastingDiff
+        
+def PaperMapCoordinates(mapInstr, x, y, paperToMap = True):
+    """!Converts paper (inch) coordinates <-> map coordinates.
 
-        northingDiff = textNorthing - cornerNorthing
-        if currRegionDict['n'] > currRegionDict['s']:
-            northingDiff = - northingDiff 
+    @param mapInstr map frame instruction
+    @param x,y paper coords in inches or mapcoords in map units
+    @param paperToMap specify conversion direction
+    """
+    region = grass.region()
+    mapWidthPaper = mapInstr['rect'].GetWidth()
+    mapHeightPaper = mapInstr['rect'].GetHeight()
+    mapWidthEN = region['e'] - region['w']
+    mapHeightEN = region['n'] - region['s']
+
+    if paperToMap:
+        diffX = x - mapInstr['rect'].GetX()
+        diffY = y - mapInstr['rect'].GetY()
+        diffEW = diffX * mapWidthEN / mapWidthPaper
+        diffNS = diffY * mapHeightEN / mapHeightPaper
+        e = region['w'] + diffEW
+        n = region['n'] - diffNS
+
+        if projInfo()['proj'] == 'll':
+            return e, n
         else:
-            northingDiff = northingDiff
+            return int(e), int(n)
 
-        xPaper = xMap + unitConv.convert(value = eastingDiff, fromUnit = 'meter', toUnit = 'inch') * currScale
-        yPaper = yMap + unitConv.convert(value = northingDiff, fromUnit = 'meter', toUnit = 'inch') * currScale
-        return xPaper, yPaper
     else:
-        if currRegionDict['w'] < currRegionDict['e']:
-            eastingDiff = (x - xMap) 
-        else:
-            eastingDiff = (xMap - x)
-        if currRegionDict['n'] < currRegionDict['s']:
-            northingDiff = (y - yMap) 
-        else:
-            northingDiff = (yMap - y)
+        diffEW = x - region['w']
+        diffNS = region['n'] - y
+        diffX = mapWidthPaper * diffEW / mapWidthEN
+        diffY = mapHeightPaper * diffNS / mapHeightEN
+        xPaper = mapInstr['rect'].GetX() + diffX
+        yPaper = mapInstr['rect'].GetY() + diffY
 
-        textEasting = cornerEasting + unitConv.convert(value = eastingDiff, fromUnit = 'inch', toUnit = 'meter') / currScale
-        textNorthing = cornerNorthing + unitConv.convert(value = northingDiff, fromUnit = 'inch', toUnit = 'meter') / currScale
-        return int(textEasting), int(textNorthing)
-        
+        return xPaper, yPaper
+
+
 def AutoAdjust(self, scaleType,  rect, map = None, mapType = None, region = None):
     """!Computes map scale, center and map frame rectangle to fit region (scale is not fixed)"""
     currRegionDict = {}



More information about the grass-commit mailing list