/[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 416 by jonathan, Wed Feb 19 16:53:08 2003 UTC revision 641 by jonathan, Thu Apr 10 14:36:19 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]>  # Jonathan Coles <[email protected]>
# Line 8  Line 8 
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 47  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 78  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.GetClassification()  
             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    
107                    group = lc.FindGroup(value)
108                    if not group.IsVisible():
109                        continue
110    
111              if prop != old_prop:                  #prop = lc.GetProperties(value)
112                    prop = group.GetProperties()
113                else:
114                    prop = defaultProps
115    
116                # don't recreate new objects if they are the same as before
117                if prop != old_prop:
118                  old_prop = prop                  old_prop = prop
119    
120                  if shapetype == SHAPETYPE_ARC:                  if shapetype == SHAPETYPE_ARC:
121                      fill = Color.None                      fill = Color.Transparent
122                  else:                  else:
123                      fill = prop.GetFill()                      fill = prop.GetFill()
124            
125                  if fill is Color.None:                  if fill is Color.Transparent:
126                      brush = wxTRANSPARENT_BRUSH                      brush = wxTRANSPARENT_BRUSH
127                  else:                  else:
128                      color = wxColour(fill.red * 255,                      color = Color2wxColour(fill)
                                      fill.green * 255,  
                                      fill.blue * 255)  
129                      brush = wxBrush(color, wxSOLID)                      brush = wxBrush(color, wxSOLID)
130            
131                  stroke = prop.GetStroke()                  stroke = prop.GetLineColor()
132                  stroke_width = prop.GetStrokeWidth()                  stroke_width = prop.GetLineWidth()
133                  if stroke is Color.None:                  if stroke is Color.Transparent:
134                      pen = wxTRANSPARENT_PEN                      pen = wxTRANSPARENT_PEN
135                  else:                  else:
136                      color = wxColour(stroke.red * 255,                      color = Color2wxColour(stroke)
                                      stroke.green * 255,  
                                      stroke.blue * 255)  
137                      pen = wxPen(color, stroke_width, wxSOLID)                      pen = wxPen(color, stroke_width, wxSOLID)
138            
139              if shapetype == SHAPETYPE_POINT:              if shapetype == SHAPETYPE_POINT:
# Line 173  class MapRenderer: Line 187  class MapRenderer:
187          self.dc.DrawLines(points)          self.dc.DrawLines(points)
188    
189      def draw_point_shape(self, layer, index):      def draw_point_shape(self, layer, index):
190          p = self.projected_points(layer, index)[0]          pp = self.projected_points(layer, index)
191    
192            if len(pp) == 0: return # ignore Null Shapes which have no points
193    
194            p = pp[0]
195          radius = self.resolution * 5          radius = self.resolution * 5
196          self.dc.DrawEllipse(p.x - radius, p.y - radius, 2*radius, 2*radius)          self.dc.DrawEllipse(p.x - radius, p.y - radius, 2*radius, 2*radius)
197    
# Line 221  class ScreenRenderer(MapRenderer): Line 239  class ScreenRenderer(MapRenderer):
239      # On the screen we want to see only visible layers by default      # On the screen we want to see only visible layers by default
240      honor_visibility = 1      honor_visibility = 1
241            
242      def RenderMap(self, map, region, selected_layer, selected_shape):      def RenderMap(self, map, region, selected_layer, selected_shapes):
243          """Render the map.          """Render the map.
244    
245          Only the given region (a tuple in window coordinates as returned          Only the given region (a tuple in window coordinates as returned
246          by a wxrect's asTuple method) needs to be redrawn. Highlight the          by a wxrect's asTuple method) needs to be redrawn. Highlight the
247          shape with id selected_shape in the selected_layer.          shapes given by the ids in selected_shapes in the
248            selected_layer.
249          """          """
250          self.update_region = region          self.update_region = region
251          self.selected_layer = selected_layer          self.selected_layer = selected_layer
252          self.selected_shape = selected_shape          self.selected_shapes = selected_shapes
253          self.render_map(map)          self.render_map(map)
254    
255      def draw_shape_layer(self, layer):      def draw_shape_layer(self, layer):
256          MapRenderer.draw_shape_layer(self, layer)          MapRenderer.draw_shape_layer(self, layer)
257          if layer is self.selected_layer and self.selected_shape is not None:          if layer is self.selected_layer and self.selected_shapes:
258              pen = wxPen(wxBLACK, 3, wxSOLID)              pen = wxPen(wxBLACK, 3, wxSOLID)
259              brush = wxBrush(wxBLACK, wxCROSS_HATCH)              brush = wxBrush(wxBLACK, wxCROSS_HATCH)
260                
261              shapetype = layer.ShapeType()              shapetype = layer.ShapeType()
             index = self.selected_shape  
262              if shapetype == SHAPETYPE_POLYGON:              if shapetype == SHAPETYPE_POLYGON:
263                  self.draw_polygon_shape(layer, index, pen, brush)                  func = self.draw_polygon_shape
264                    args = (pen, brush)
265              elif shapetype == SHAPETYPE_ARC:              elif shapetype == SHAPETYPE_ARC:
266                  self.draw_polygon_shape(layer, index, pen, None)                  func = self.draw_polygon_shape
267              else:                  args = (pen, None)
268                elif shapetype == SHAPETYPE_POINT:
269                  self.dc.SetBrush(brush)                  self.dc.SetBrush(brush)
270                  self.dc.SetPen(pen)                  self.dc.SetPen(pen)
271                  if shapetype == SHAPETYPE_POINT:                  func = self.draw_point_shape
272                      self.draw_point_shape(layer, index)                  args = ()
273                  else:              else:
274                      raise TypeError(_("Unhandled shape type %s") % shapetype)                  raise TypeError(_("Unhandled shape type %s") % shapetype)
275    
276                for index in self.selected_shapes:
277                    func(layer, index, *args)
278    
279      def layer_ids(self, layer):      def layer_ids(self, layer):
280          """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.416  
changed lines
  Added in v.641

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26