/[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 394 by jonathan, Mon Feb 10 15:27:13 2003 UTC revision 574 by jonathan, Fri Mar 28 17:07:26 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 _  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
# Line 21  from Thuban.Model.label import ALIGN_CEN Line 23  from Thuban.Model.label import ALIGN_CEN
23       ALIGN_LEFT, ALIGN_RIGHT, ALIGN_BASELINE       ALIGN_LEFT, ALIGN_RIGHT, ALIGN_BASELINE
24    
25  from Thuban.Model.classification import Classification  from Thuban.Model.classification import Classification
26    from Thuban.Model.color import Color
27    
28    
29  class MapRenderer:  class MapRenderer:
# Line 45  class MapRenderer: Line 48  class MapRenderer:
48                  the renderer's default.                  the renderer's default.
49          """          """
50          # resolution in pixel/inch          # resolution in pixel/inch
51    
52            assert(scale > 0)
53    
54          self.dc = dc          self.dc = dc
55          self.scale = scale          self.scale = scale
56          self.offset = offset          self.offset = offset
# Line 76  class MapRenderer: Line 82  class MapRenderer:
82          pen   = wxTRANSPARENT_PEN          pen   = wxTRANSPARENT_PEN
83    
84          old_prop = None          old_prop = None
85            lc = layer.GetClassification()
86            field = lc.GetField()
87    
88            defaultProps = lc.GetDefaultGroup().GetProperties()
89    
90          for i in self.layer_ids(layer):          for i in self.layer_ids(layer):
91              value = None              value = None
             shape = layer.Shape(i)  
             lc = layer.classification  
             field = lc.field  
92    
93              if field is not None:              if field is not None:
94                  record = layer.table.read_record(i)                  try:
95                  if record is not None:                      record = layer.table.read_record(i)
96                      value = record[field]                      if record is not None:
97                            value = record[field]
98              #                  except:
99              # if the above statements fail 'value' should                      pass
100              # be null, at which point this call will  
101              # at least retreive the NullData                  #
102              #                  # if the above statements fail 'value' should
103              prop = lc.GetProperties(value)                  # be null, at which point this call will
104                    # at least retreive the NullData
105                    #
106                    prop = lc.GetProperties(value)
107                else:
108                    prop = defaultProps
109    
110              if prop != old_prop:              # don't recreate new objects if they are the same as before
111                if prop != old_prop:
112                  old_prop = prop                  old_prop = prop
113    
114                  if shapetype == SHAPETYPE_ARC:                  if shapetype == SHAPETYPE_ARC:
115                      fill = None                      fill = Color.None
116                  else:                  else:
117                      fill = prop.GetFill()                      fill = prop.GetFill()
118            
119                  if fill is None:                  if fill is Color.None:
120                      brush = wxTRANSPARENT_BRUSH                      brush = wxTRANSPARENT_BRUSH
121                  else:                  else:
122                      color = wxColour(fill.red * 255,                      color = Color2wxColour(fill)
                                      fill.green * 255,  
                                      fill.blue * 255)  
123                      brush = wxBrush(color, wxSOLID)                      brush = wxBrush(color, wxSOLID)
124            
125                  stroke = prop.GetStroke()                  stroke = prop.GetLineColor()
126                  stroke_width = prop.GetStrokeWidth()                  stroke_width = prop.GetLineWidth()
127                  if stroke is None:                  if stroke is Color.None:
128                      pen = wxTRANSPARENT_PEN                      pen = wxTRANSPARENT_PEN
129                  else:                  else:
130                      color = wxColour(stroke.red * 255,                      color = Color2wxColour(stroke)
                                      stroke.green * 255,  
                                      stroke.blue * 255)  
131                      pen = wxPen(color, stroke_width, wxSOLID)                      pen = wxPen(color, stroke_width, wxSOLID)
132            
133              if shapetype == SHAPETYPE_POINT:              if shapetype == SHAPETYPE_POINT:
# Line 219  class ScreenRenderer(MapRenderer): Line 229  class ScreenRenderer(MapRenderer):
229      # On the screen we want to see only visible layers by default      # On the screen we want to see only visible layers by default
230      honor_visibility = 1      honor_visibility = 1
231            
232      def RenderMap(self, map, region, selected_layer, selected_shape):      def RenderMap(self, map, region, selected_layer, selected_shapes):
233          """Render the map.          """Render the map.
234    
235          Only the given region (a tuple in window coordinates as returned          Only the given region (a tuple in window coordinates as returned
236          by a wxrect's asTuple method) needs to be redrawn. Highlight the          by a wxrect's asTuple method) needs to be redrawn. Highlight the
237          shape with id selected_shape in the selected_layer.          shapes given by the ids in selected_shapes in the
238            selected_layer.
239          """          """
240          self.update_region = region          self.update_region = region
241          self.selected_layer = selected_layer          self.selected_layer = selected_layer
242          self.selected_shape = selected_shape          self.selected_shapes = selected_shapes
243          self.render_map(map)          self.render_map(map)
244    
245      def draw_shape_layer(self, layer):      def draw_shape_layer(self, layer):
246          MapRenderer.draw_shape_layer(self, layer)          MapRenderer.draw_shape_layer(self, layer)
247          if layer is self.selected_layer and self.selected_shape is not None:          if layer is self.selected_layer and self.selected_shapes:
248              pen = wxPen(wxBLACK, 3, wxSOLID)              pen = wxPen(wxBLACK, 3, wxSOLID)
249              brush = wxBrush(wxBLACK, wxCROSS_HATCH)              brush = wxBrush(wxBLACK, wxCROSS_HATCH)
250                
251              shapetype = layer.ShapeType()              shapetype = layer.ShapeType()
             index = self.selected_shape  
252              if shapetype == SHAPETYPE_POLYGON:              if shapetype == SHAPETYPE_POLYGON:
253                  self.draw_polygon_shape(layer, index, pen, brush)                  func = self.draw_polygon_shape
254                    args = (pen, brush)
255              elif shapetype == SHAPETYPE_ARC:              elif shapetype == SHAPETYPE_ARC:
256                  self.draw_polygon_shape(layer, index, pen, None)                  func = self.draw_polygon_shape
257              else:                  args = (pen, None)
258                elif shapetype == SHAPETYPE_POINT:
259                  self.dc.SetBrush(brush)                  self.dc.SetBrush(brush)
260                  self.dc.SetPen(pen)                  self.dc.SetPen(pen)
261                  if shapetype == SHAPETYPE_POINT:                  func = self.draw_point_shape
262                      self.draw_point_shape(layer, index)                  args = ()
263                  else:              else:
264                      raise TypeError(_("Unhandled shape type %s") % shapetype)                  raise TypeError(_("Unhandled shape type %s") % shapetype)
265    
266                for index in self.selected_shapes:
267                    func(layer, index, *args)
268    
269      def layer_ids(self, layer):      def layer_ids(self, layer):
270          """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.394  
changed lines
  Added in v.574

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26