[GRASS-SVN] r52257 - grass/trunk/gui/wxpython/gcp

svn_grass at osgeo.org svn_grass at osgeo.org
Sun Jul 1 03:29:31 PDT 2012


Author: martinl
Date: 2012-07-01 03:29:31 -0700 (Sun, 01 Jul 2012)
New Revision: 52257

Modified:
   grass/trunk/gui/wxpython/gcp/manager.py
Log:
wxGUI/GCP Manager: use GraphicsSetItem (patch provided by Stepan Turek)


Modified: grass/trunk/gui/wxpython/gcp/manager.py
===================================================================
--- grass/trunk/gui/wxpython/gcp/manager.py	2012-07-01 10:27:45 UTC (rev 52256)
+++ grass/trunk/gui/wxpython/gcp/manager.py	2012-07-01 10:29:31 UTC (rev 52257)
@@ -15,20 +15,22 @@
  - manager::EditGCP
  - manager::GrSettingsDialog
 
-(C) 2006-2011 by the GRASS Development Team
+(C) 2006-2012 by the GRASS Development Team
 
 This program is free software under the GNU General Public License
 (>=v2). Read the file COPYING that comes with GRASS for details.
 
- at author Michael Barton
- at author Updated by Martin Landa <landa.martin gmail.com>
- at author Markus Metz redesign georectfier -> GCP Manager
+ at author Original author Michael Barton
+ at author Original version improved by Martin Landa <landa.martin gmail.com>
+ at author Rewritten by Markus Metz redesign georectfier -> GCP Manage
+ at author Support for GraphicsSet added by Stepan Turek <stepan.turek seznam.cz> (2012)
 """
 
 import os
 import sys
 import shutil
 import time
+from copy import copy
 
 import wx
 from wx.lib.mixins.listctrl import CheckListCtrlMixin, ColumnSorterMixin, ListCtrlAutoWidthMixin
@@ -797,6 +799,12 @@
         self.parent = parent # GMFrame
         self.parent.gcpmanagement = self
         
+        #
+        # register data structures for drawing GCP's
+        #
+        self.pointsToDrawTgt = self.TgtMapWindow.RegisterGraphicsToDraw(graphicsType = "point", setStatusFunc = self.SetGCPSatus)
+        self.pointsToDrawSrc = self.SrcMapWindow.RegisterGraphicsToDraw(graphicsType = "point", setStatusFunc = self.SetGCPSatus)
+        
         # window resized
         self.resize = False
 
@@ -932,6 +940,8 @@
         self.Bind(wx.EVT_SIZE,     self.OnSize)
         self.Bind(wx.EVT_IDLE,     self.OnIdle)
         self.Bind(wx.EVT_CLOSE,    self.OnQuit)
+        
+        self.SetSettings()
 
     def __del__(self):
         """!Disable GCP manager mode"""
@@ -1064,102 +1074,77 @@
         # GCP number, source E, source N, target E, target N, fwd error, bkwd error
         self.mapcoordlist[key] = [key, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
 
-    def DrawGCP(self, coordtype):
+    def SetSettings(self):
+        """!Sets settings for drawing of GCP's.
         """
-        Updates GCP and map coord maps and redraws
-        active (checked) GCP markers
-        """
         self.highest_only = UserSettings.Get(group='gcpman', key='rms', subkey='highestonly')
-
         self.show_unused =  UserSettings.Get(group='gcpman', key='symbol', subkey='unused')
-        col = UserSettings.Get(group='gcpman', key='symbol', subkey='color')
-        wxLowCol = wx.Colour(col[0], col[1], col[2], 255)
-        col = UserSettings.Get(group='gcpman', key='symbol', subkey='hcolor')
-        wxHiCol = wx.Colour(col[0], col[1], col[2], 255)
-        col = UserSettings.Get(group='gcpman', key='symbol', subkey='scolor')
-        wxSelCol = wx.Colour(col[0], col[1], col[2], 255)
-        col = UserSettings.Get(group='gcpman', key='symbol', subkey='ucolor')
-        wxUnCol = wx.Colour(col[0], col[1], col[2], 255)
-        spx = UserSettings.Get(group='gcpman', key='symbol', subkey='size')
-        wpx = UserSettings.Get(group='gcpman', key='symbol', subkey='width')
+        
+        colours = { "color"  : "default", 
+                    "hcolor" : "highest", 
+                    "scolor" : "selected",
+                    "ucolor" : "unused" }
+        wpx = UserSettings.Get(group = 'gcpman', key = 'symbol', subkey = 'width')
+        
+        for k, v in colours.iteritems():
+            col = UserSettings.Get(group='gcpman', key='symbol', subkey= k)
+            self.pointsToDrawSrc.GetPen(v).SetColour(wx.Colour(col[0], col[1], col[2], 255)) # TODO GetPen neni to spatne? 
+            self.pointsToDrawTgt.GetPen(v).SetColour(wx.Colour(col[0], col[1], col[2], 255))
+            
+            self.pointsToDrawSrc.GetPen(v).SetWidth(wpx)
+            self.pointsToDrawTgt.GetPen(v).SetWidth(wpx)
+        
+        spx = UserSettings.Get(group = 'gcpman', key = 'symbol', subkey = 'size')
+        self.pointsToDrawSrc.SetPropertyVal("size", int(spx))
+        self.pointsToDrawTgt.SetPropertyVal("size", int(spx))
+        
         font = self.GetFont()
         font.SetPointSize(int(spx) + 2)
-
-        penOrig = polypenOrig = None
-
-        mapWin = None
         
-        if coordtype == 'source':
-            mapWin = self.SrcMapWindow
-            e_idx = 1
-            n_idx = 2
-        elif coordtype == 'target':
-            mapWin = self.TgtMapWindow
-            e_idx = 3
-            n_idx = 4
-
-        if not mapWin:
-            GError(parent = self,
-                   message="%s%s." % (_("mapwin not defined for "),
-                                      str(idx)))
-            return
-
-        #for gcp in self.mapcoordlist:
-        for idx in range(self.list.GetItemCount()):
-
-            key = self.list.GetItemData(idx)
-            gcp = self.mapcoordlist[key]
-
-            if not self.list.IsChecked(idx):
-                if self.show_unused:
-                    wxCol = wxUnCol
+        textProp = {}
+        textProp['active'] = True
+        textProp['font'] = font
+        self.pointsToDrawSrc.SetPropertyVal("text", textProp)
+        self.pointsToDrawTgt.SetPropertyVal("text", copy(textProp))
+        
+    def SetGCPSatus(self, item, itemIndex):
+        """!Before GCP is drawn, decides it's colour and whether it
+        will be drawed.
+        """
+        key = self.list.GetItemData(itemIndex)
+        itemIndex += 1 # incremented because of itemDataMap (has one more item) - will be changed
+        
+        if not self.list.IsChecked(key - 1):
+                wxPen = "unused"
+                if not self.show_unused:
+                    item.SetPropertyVal('hide', True)
                 else:
-                    continue
+                    item.SetPropertyVal('hide', False)
+        
+        else:
+            item.SetPropertyVal('hide', False)
+            if self.highest_only == True:
+                if itemIndex == self.highest_key:
+                    wxPen = "highest"
+                else:
+                    wxPen = "default"
             else:
-                if self.highest_only == True:
-                    if key == self.highest_key:
-                        wxCol = wxHiCol
-                    else:
-                        wxCol = wxLowCol
-                elif self.rmsthresh > 0:
-                    if (gcp[5] > self.rmsthresh):
-                        wxCol = wxHiCol
-                    else:
-                        wxCol = wxLowCol
-
-            if idx == self.list.selected:
-                wxCol = wxSelCol
-
-            if not penOrig:
-                penOrig = mapWin.pen
-                polypenOrig = mapWin.polypen
-                mapWin.pen = wx.Pen(colour=wxCol, width=wpx, style=wx.SOLID)
-                mapWin.polypen = wx.Pen(colour=wxCol, width=wpx, style=wx.SOLID) # ?
-
-            mapWin.pen.SetColour(wxCol)
-            mapWin.polypen.SetColour(wxCol)
-
-            coord = mapWin.Cell2Pixel((gcp[e_idx], gcp[n_idx]))
-            mapWin.DrawCross(pdc=mapWin.pdcTmp, coords=coord,
-                             size=spx, text={ 'text' : '%s' % str(gcp[0]),
-                                            'active' : True,
-                                            'font' : font,
-                                            'color': wxCol,
-                                            'coords': [coord[0] + 5,
-                                                       coord[1] + 5,
-                                                       5,
-                                                       5]})
-            
-        if penOrig:
-            mapWin.pen = penOrig
-            mapWin.polypen = polypenOrig
+                if (gcp[5] > self.rmsthresh):
+                    wxPen = "highest"
+                else:
+                    wxPen = "default"
         
+        if itemIndex == self.list.selectedkey:
+            wxPen = "selected"
+        
+        item.SetPropertyVal('label', str(itemIndex))
+        item.SetPropertyVal('penName', wxPen)
+
     def SetGCPData(self, coordtype, coord, mapdisp=None, confirm=False):
+        """!Inserts coordinates from file, mouse click on map, or
+        after editing into selected item of GCP list and checks it for
+        use.
         """
-        Inserts coordinates from file, mouse click on map, or after editing
-        into selected item of GCP list and checks it for use
-        """
-        
         index = self.list.GetSelected()
         if index == wx.NOT_FOUND:
             return
@@ -1173,46 +1158,48 @@
                 currloc = _("source")
             else:
                 currloc = _("target")
-            ret = wx.MessageBox(parent=self,
-                                caption=_("Set GCP coordinates"),
-                                message=_('Set %(coor)s coordinates for GCP No. %(key)s? \n\n'
-                                          'East: %(coor0)s \n'
-                                          'North: %(coor1)s') % \
+            ret = wx.MessageBox(parent = self,
+                                caption = _("Set GCP coordinates"),
+                                message = _('Set %(coor)s coordinates for GCP No. %(key)s? \n\n'
+                                            'East: %(coor0)s \n'
+                                            'North: %(coor1)s') % \
                                     { 'coor' : currloc,
                                       'key' : str(key),
                                       'coor0' : str(coord0),
                                       'coor1' : str(coord1) },
-                                style=wx.ICON_QUESTION | wx.YES_NO | wx.CENTRE)
-
+                                style = wx.ICON_QUESTION | wx.YES_NO | wx.CENTRE)
+            
             # for wingrass
             if os.name == 'nt':
                 self.MapWindow.SetFocus()
             if ret == wx.NO:
                 return
-            
+        
         if coordtype == 'source':
             self.list.SetStringItem(index, 1, str(coord0))
             self.list.SetStringItem(index, 2, str(coord1))
             self.mapcoordlist[key][1] = coord[0]
             self.mapcoordlist[key][2] = coord[1]
+            self.pointsToDrawSrc.GetItem(key - 1).SetCoords([coord0, coord1])
+            
         elif coordtype == 'target':
             self.list.SetStringItem(index, 3, str(coord0))
             self.list.SetStringItem(index, 4, str(coord1))
             self.mapcoordlist[key][3] = coord[0]
             self.mapcoordlist[key][4] = coord[1]
-            
+            self.pointsToDrawTgt.GetItem(key - 1).SetCoords([coord0, coord1])
+        
         self.list.SetStringItem(index, 5, '0')
         self.list.SetStringItem(index, 6, '0')
         self.mapcoordlist[key][5] = 0.0
         self.mapcoordlist[key][6] = 0.0
-
+        
         # self.list.ResizeColumns()
-
+        
     def SaveGCPs(self, event):
+        """!Make a POINTS file or save GCP coordinates to existing
+        POINTS file
         """
-        Make a POINTS file or save GCP coordinates to existing POINTS file
-        """
-
         self.GCPcount = 0
         try:
             f = open(self.file['points'], mode='w')
@@ -1996,8 +1983,6 @@
             if self.gcp.show_target:
                 targetMapWin = self.gcp.TgtMapWindow
                 targetMapWin.UpdateMap(render=False, renderVector=False)
-
-        pass
     
     def AddGCPItem(self):
         """
@@ -2021,19 +2006,28 @@
                           wx.LIST_STATE_SELECTED)
 
         self.ResizeColumns()
-
+        
+        self.gcp.pointsToDrawSrc.AddItem(coords = [0,0], label = str(self.selectedkey))
+        self.gcp.pointsToDrawTgt.AddItem(coords = [0,0], label = str(self.selectedkey))
+        
         return self.selected
 
     def DeleteGCPItem(self):
+        """!Deletes selected item in GCP list.
         """
-        Deletes selected item in GCP list
-        """
         if self.selected == wx.NOT_FOUND:
             return
 
         key = self.GetItemData(self.selected)
         self.DeleteItem(self.selected)
-
+        
+        if self.selected != wx.NOT_FOUND:
+            item = self.gcp.pointsToDrawSrc.GetItem(key - 1)
+            self.gcp.pointsToDrawSrc.DeleteItem(item)
+            
+            item = self.gcp.pointsToDrawTgt.GetItem(key - 1)
+            self.gcp.pointsToDrawTgt.DeleteItem(item)
+        
         return key
         
     def ResizeColumns(self):
@@ -2044,7 +2038,7 @@
             # first column is checkbox, don't set to minWidth
             if i > 0 and self.GetColumnWidth(i) < minWidth[i > 4]:
                 self.SetColumnWidth(i, minWidth[i > 4])
-
+        
         self.SendSizeEvent()
 
     def GetSelected(self):
@@ -2052,10 +2046,8 @@
         return self.selected
 
     def OnItemSelected(self, event):
+        """!Item selected
         """
-        Item selected
-        """
-
         if self.render and self.selected != event.GetIndex():
             self.selected = event.GetIndex()
             self.selectedkey = self.GetItemData(self.selected)
@@ -2064,7 +2056,6 @@
             if self.gcp.show_target:
                 targetMapWin = self.gcp.TgtMapWindow
                 targetMapWin.UpdateMap(render=False, renderVector=False)
-
         event.Skip()
 
     def OnItemActivated(self, event):
@@ -2105,19 +2096,24 @@
                                                   float(values[3]),
                                                   0.0,
                                                   0.0]
+                    
+                    self.gcp.pointsToDrawSrc.GetItem(key - 1).SetCoords([float(values[0]), 
+                                                                         float(values[1])])
+                    self.gcp.pointsToDrawTgt.GetItem(key - 1).SetCoords([float(values[2]), 
+                                                                         float(values[3])])
                     self.gcp.UpdateColours()
-        
+                    
     def OnColClick(self, event):
         """!ListCtrl forgets selected item..."""
         self.selected = self.FindItemData(-1, self.selectedkey)
         self.SetItemState(self.selected,
                           wx.LIST_STATE_SELECTED,
                           wx.LIST_STATE_SELECTED)
+        
         event.Skip()
 
 class VectGroup(wx.Dialog):
-    """
-    Dialog to create a vector group (VREF file) for georectifying
+    """!Dialog to create a vector group (VREF file) for georectifying
 
     @todo Replace by g.group
     """
@@ -2130,7 +2126,7 @@
         self.grassdatabase = grassdb
         self.xylocation = location
         self.xymapset = mapset
-        self.xygroup = group
+        self.xuygroup = group
         
         #
         # get list of valid vector directories
@@ -2720,16 +2716,17 @@
 
         layers = None
 
-        UserSettings.Set(group='gcpman', key='rms', subkey='highestonly',
-                         value=self.highlighthighest.GetValue())
+        UserSettings.Set(group = 'gcpman', key = 'rms', subkey = 'highestonly',
+                         value = self.highlighthighest.GetValue())
+        
         if self.sdfactor > 0:
             UserSettings.Set(group='gcpman', key='rms', subkey='sdfactor',
                              value=self.sdfactor)
-
+            
             self.parent.sdfactor = self.sdfactor
             if self.parent.rmsthresh > 0:
-                self.parent.rmsthresh = self.parent.mean + self.parent.sdfactor * self.parent.rmssd
-
+                self.parent.rmsthresh = self.parent.rmsmean + self.parent.sdfactor * self.parent.rmssd
+        
         UserSettings.Set(group='gcpman', key='symbol', subkey='color',
                          value=tuple(wx.FindWindowById(self.symbol['color']).GetColour()))
         UserSettings.Set(group='gcpman', key='symbol', subkey='hcolor',
@@ -2744,7 +2741,7 @@
                          value=wx.FindWindowById(self.symbol['size']).GetValue())
         UserSettings.Set(group='gcpman', key='symbol', subkey='width',
                          value=wx.FindWindowById(self.symbol['width']).GetValue())
-
+        
         srcrender = False
         srcrenderVector = False
         tgtrender = False
@@ -2817,6 +2814,7 @@
                 self.parent.TgtMapWindow.ZoomToMap(layers = self.parent.TgtMap.GetListOfLayers())
         
         self.parent.UpdateColours(srcrender, srcrenderVector, tgtrender, tgtrenderVector)
+        self.parent.SetSettings()        
 
     def OnSave(self, event):
         """!Button 'Save' pressed"""



More information about the grass-commit mailing list