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

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

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

revision 290 by bh, Thu Aug 29 14:11:28 2002 UTC revision 468 by jonathan, Wed Mar 5 18:19:13 2003 UTC
# Line 1  Line 1 
1  # Copyright (c) 2001, 2002 by Intevation GmbH  # Copyright (c) 2001, 2002, 2003 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
4    # Jonathan Coles <[email protected]>
5  #  #
6  # This program is free software under the GPL (>=v2)  # This program is free software under the GPL (>=v2)
7  # Read the file COPYING coming with Thuban for details.  # Read the file COPYING coming with Thuban for details.
8    
9  __version__ = "$Revision$"  __version__ = "$Revision$"
10    
11  from wxPython.wx import wxPoint, wxColour, wxPen, wxBrush, wxFont, \  from wxPython.wx import wxPoint, wxPen, wxBrush, wxFont, \
12       wxTRANSPARENT_PEN, wxTRANSPARENT_BRUSH, \       wxTRANSPARENT_PEN, wxTRANSPARENT_BRUSH, \
13       wxBLACK, wxSOLID, wxCROSS_HATCH, wxSWISS, wxNORMAL       wxBLACK, wxSOLID, wxCROSS_HATCH, wxSWISS, wxNORMAL
14    
15  from wxproj import draw_polygon_shape  from wxproj import draw_polygon_shape
16    
17    from Thuban import _
18    from Thuban.UI.common import *
19    
20  from Thuban.Model.layer import SHAPETYPE_POLYGON, SHAPETYPE_ARC, \  from Thuban.Model.layer import SHAPETYPE_POLYGON, SHAPETYPE_ARC, \
21       SHAPETYPE_POINT       SHAPETYPE_POINT
22  from Thuban.Model.label import ALIGN_CENTER, ALIGN_TOP, ALIGN_BOTTOM, \  from Thuban.Model.label import ALIGN_CENTER, ALIGN_TOP, ALIGN_BOTTOM, \
23       ALIGN_LEFT, ALIGN_RIGHT, ALIGN_BASELINE       ALIGN_LEFT, ALIGN_RIGHT, ALIGN_BASELINE
24    
25    from Thuban.Model.classification import Classification
26    from Thuban.Model.color import Color
27    
28    
29  class MapRenderer:  class MapRenderer:
30    
# Line 63  class MapRenderer: Line 70  class MapRenderer:
70          scale = self.scale          scale = self.scale
71          offx, offy = self.offset          offx, offy = self.offset
72    
         fill = layer.fill  
         if fill is None:  
             brush = wxTRANSPARENT_BRUSH  
         else:  
             color = wxColour(fill.red * 255,  
                              fill.green * 255,  
                              fill.blue * 255)  
             brush = wxBrush(color, wxSOLID)  
         stroke = layer.stroke  
         stroke_width = layer.stroke_width  
         if stroke is None:  
             pen = wxTRANSPARENT_PEN  
         else:  
             color = wxColour(stroke.red * 255,  
                              stroke.green * 255,  
                              stroke.blue * 255)  
             pen = wxPen(color, stroke_width, wxSOLID)  
   
73          map_proj = self.map.projection          map_proj = self.map.projection
74          layer_proj = layer.projection          layer_proj = layer.projection
75    
76          shapetype = layer.ShapeType()          shapetype = layer.ShapeType()
77    
78          if shapetype == SHAPETYPE_POLYGON:          brush = wxTRANSPARENT_BRUSH
79              for i in self.layer_ids(layer):          pen   = wxTRANSPARENT_PEN
80    
81            old_prop = None
82            lc = layer.GetClassification()
83            field = lc.GetField()
84    
85            defaultProps = lc.GetDefaultGroup().GetProperties()
86    
87            for i in self.layer_ids(layer):
88                value = None
89    
90                if field is not None:
91                    try:
92                        record = layer.table.read_record(i)
93                        if record is not None:
94                            value = record[field]
95                    except:
96                        pass
97    
98                    #
99                    # if the above statements fail 'value' should
100                    # be null, at which point this call will
101                    # at least retreive the NullData
102                    #
103                    prop = lc.GetProperties(value)
104                else:
105                    prop = defaultProps
106    
107                # don't recreate new objects if they are the same as before
108                if prop != old_prop:
109                    old_prop = prop
110    
111                    if shapetype == SHAPETYPE_ARC:
112                        fill = Color.None
113                    else:
114                        fill = prop.GetFill()
115        
116                    if fill is Color.None:
117                        brush = wxTRANSPARENT_BRUSH
118                    else:
119                        color = Color2wxColour(fill)
120                        brush = wxBrush(color, wxSOLID)
121        
122                    stroke = prop.GetLineColor()
123                    stroke_width = prop.GetLineWidth()
124                    if stroke is Color.None:
125                        pen = wxTRANSPARENT_PEN
126                    else:
127                        color = Color2wxColour(stroke)
128                        pen = wxPen(color, stroke_width, wxSOLID)
129        
130                if shapetype == SHAPETYPE_POINT:
131                    self.dc.SetBrush(brush)
132                    self.dc.SetPen(pen)
133                    self.draw_point_shape(layer, i)
134                else:
135                  self.draw_polygon_shape(layer, i, pen, brush)                  self.draw_polygon_shape(layer, i, pen, brush)
         elif shapetype == SHAPETYPE_ARC:  
             for i in self.layer_ids(layer):  
                 self.draw_polygon_shape(layer, i, pen, None)  
         else:  
             self.dc.SetBrush(brush)  
             self.dc.SetPen(pen)  
             if shapetype == SHAPETYPE_ARC:  
                 f = self.draw_arc_shape  
             elif shapetype == SHAPETYPE_POINT:  
                 f = self.draw_point_shape  
             for i in self.layer_ids(layer):  
                 f(layer, i)  
136    
137      def layer_ids(self, layer):      def layer_ids(self, layer):
138          """Return the shape ids of the given layer that have to be drawn.          """Return the shape ids of the given layer that have to be drawn.
# Line 224  class ScreenRenderer(MapRenderer): Line 256  class ScreenRenderer(MapRenderer):
256                  if shapetype == SHAPETYPE_POINT:                  if shapetype == SHAPETYPE_POINT:
257                      self.draw_point_shape(layer, index)                      self.draw_point_shape(layer, index)
258                  else:                  else:
259                      raise TypeError("Unhandled shape type %s" % shapetype)                      raise TypeError(_("Unhandled shape type %s") % shapetype)
260    
261      def layer_ids(self, layer):      def layer_ids(self, layer):
262          """Return the shapeids covered by the region that has to be redrawn          """Return the shapeids covered by the region that has to be redrawn

Legend:
Removed from v.290  
changed lines
  Added in v.468

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26