/[thuban]/branches/WIP-pyshapelib-bramz/Thuban/UI/scalebar.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/Thuban/UI/scalebar.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/thuban/Thuban/UI/scalebar.py revision 869 by frank, Thu May 8 14:06:15 2003 UTC branches/WIP-pyshapelib-bramz/Thuban/UI/scalebar.py revision 2734 by bramz, Thu Mar 1 12:42:59 2007 UTC
# Line 9  __version__ = "$Revision$" Line 9  __version__ = "$Revision$"
9    
10  from Thuban import _  from Thuban import _
11  from Thuban.Model.scalebar import deriveInterval, roundInterval  from Thuban.Model.scalebar import deriveInterval, roundInterval
12    from Thuban.Model.proj import PROJ_UNITS_METERS
13    
14  from wxPython.wx import *  import wx
15    
16  class ScaleBar:  class ScaleBar:
17    
18      def __init__(self, map):      def __init__(self, map):
19          self.map = map          self.map = map
20    
21      def DrawScalebar(self, scale, dc):      def DrawScaleBar(self, scale, dc, position, size):
22          """Draw a scalebar on a given DC"""          """Draw a scalebar on a given DC"""
23    
24          # Only draw a legend if the corresponding map has a layer          # Only draw a legend if the corresponding map has a layer
25          if self.map is not None and len(self.map.layers) > 0 and scale > 0.0:          if self.map is not None \
26                and self.map.projection is not None \
27                and len(self.map.layers) > 0 \
28                and scale > 0.0:
29    
30                # We have a projection, draw the scalebar in bw
31                BlackPen = wx.BLACK_PEN
32                BlackBrush = wx.BLACK_BRUSH
33                BlackText = wx.BLACK
34    
             # If no projection is specified, the scale information _might_  
             # be reasonable. So gray out the scalebar in these cases.  
             if self.map.projection is None:  
                 BlackPen = wxGREY_PEN  
                 BlackBrush = wxGREY_BRUSH  
                 BlackText = wxColor(127,127,127)  
             else:  
                 BlackPen = wxBLACK_PEN  
                 BlackBrush = wxBLACK_BRUSH  
                 BlackText = wxBLACK  
                   
35              # Get the dimension              # Get the dimension
36              width, height = dc.GetSizeTuple()              width, height = size
37                posx, posy    = position
38              l1width, l1height = dc.GetTextExtent("%d"%0)              l1width, l1height = dc.GetTextExtent("%d"%0)
39    
40              # Make a first guess for the interval (to get the size we have              # Make a first guess for the interval (to get the size we have
# Line 43  class ScaleBar: Line 42  class ScaleBar:
42              interval, unit = deriveInterval(width, scale)              interval, unit = deriveInterval(width, scale)
43              l2width, l2height = dc.GetTextExtent("%d %s"%(interval,unit))              l2width, l2height = dc.GetTextExtent("%d %s"%(interval,unit))
44              width = width - 4.0 - l1width/2.0 -l2width/2.0              width = width - 4.0 - l1width/2.0 -l2width/2.0
45            
46              # Having precised the width now the final interval can be calculated              # Having precised the width now the final interval can be calculated
47              interval, unit  = deriveInterval(width, scale)              interval, unit  = deriveInterval(width, scale)
48              interval, label = roundInterval(interval)              interval, label = roundInterval(interval)
               
             # We draw 2 rectangles with half the width  
             if unit == 'km':  
                 width = int(interval*1000.0*scale/2)  
             else:  
                 width = int(interval*scale/2)  
               
             dc.SetPen(BlackPen)  
   
             brush = wxBrush(wxWHITE, wxSOLID)  
             dc.SetBrush(brush)  
             dc.DrawRectangle(4,2,width,8)  
49    
50              dc.SetBrush(BlackBrush)              if interval > 0.0:
51              dc.DrawRectangle(width+4,2,width,8)                  # We draw 2 rectangles with half the width
52                    if unit == 'km':
53                        width = int(interval*1000.0*scale/2)
54                    else:
55                        width = int(interval*scale/2)
56    
57                    dc.SetPen(BlackPen)
58    
59                    brush = wx.Brush(wx.WHITE, wx.SOLID)
60                    dc.SetBrush(brush)
61                    dc.DrawRectangle(posx+4,posy+2,width,8)
62    
63                    dc.SetBrush(BlackBrush)
64                    dc.DrawRectangle(posx+width+4,posy+2,width,8)
65    
66              dc.SetTextForeground(BlackText)                  dc.SetTextForeground(BlackText)
67              dc.DrawText("%d"%0, 4 - l1width/2, 12)                  dc.DrawText("%d"%0, posx+ 4 - l1width/2, posy+12)
68    
69              l2width, l2height = dc.GetTextExtent("%s %s"%(label, unit))                  l2width, l2height = dc.GetTextExtent("%s %s"%(label, unit))
70              dc.DrawText("%s %s"%(interval, unit), 2*width+4 - l2width/2, 12)                  dc.DrawText("%s %s"%(interval, unit), posx+ 2*width+4 - l2width/2, posy + 12)
71    

Legend:
Removed from v.869  
changed lines
  Added in v.2734

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26