/[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 676 by jonathan, Tue Apr 15 19:20:40 2003 UTC revision 798 by jonathan, Wed Apr 30 17:02:04 2003 UTC
# Line 25  from Thuban.Model.label import ALIGN_CEN Line 25  from Thuban.Model.label import ALIGN_CEN
25  from Thuban.Model.classification import Classification  from Thuban.Model.classification import Classification
26  from Thuban.Model.color import Color  from Thuban.Model.color import Color
27    
 import time  
   
   
28  class MapRenderer:  class MapRenderer:
29    
30      """Class to render a map onto a wxDC"""      """Class to render a map onto a wxDC"""
# Line 51  class MapRenderer: Line 48  class MapRenderer:
48          """          """
49          # resolution in pixel/inch          # resolution in pixel/inch
50    
         assert scale > 0  
   
51          self.dc = dc          self.dc = dc
52          self.scale = scale          self.scale = scale
53          self.offset = offset          self.offset = offset
# Line 84  class MapRenderer: Line 79  class MapRenderer:
79          pen   = wxTRANSPARENT_PEN          pen   = wxTRANSPARENT_PEN
80    
81          old_prop = None          old_prop = None
82            old_group = None
83          lc = layer.GetClassification()          lc = layer.GetClassification()
84          field = lc.GetField()          field = lc.GetField()
85            defaultGroup = lc.GetDefaultGroup()
86    
         #print "drawing layer: ", layer.Title(),  
         #start = time.clock()  
         #count = 0  
87    
88          if shapetype != SHAPETYPE_POINT:          if shapetype != SHAPETYPE_POINT:
89              offx, offy = self.offset                      polygon_render_param = self.polygon_render_param(layer)
             draw_polygon_init(layer.shapefile.cobject(),  
                               self.dc,  
                               self.map.projection, layer.projection,  
                               self.scale, -self.scale, offx, offy)  
90    
91            if shapetype == SHAPETYPE_POINT:
92                draw_func = lambda i: \
93                       self.draw_point_shape(layer, i)
94            else:
95                draw_func = lambda i: \
96                       self.draw_polygon_shape(polygon_render_param, i, pen, brush)
97                
98          for i in self.layer_ids(layer):          for i in self.layer_ids(layer):
             value = None  
   
             if field is not None:  
                 try:  
                     record = layer.table.read_record(i)  
                     if record is not None:  
                         value = record[field]  
                 except:  
                     pass  
   
                 #  
                 # if the above statements fail 'value' should  
                 # be null, at which point this call will  
                 # at least retreive the NullData  
                 #  
99    
100                  group = lc.FindGroup(value)              if field is None:
101                    group = defaultGroup
                 #prop = lc.GetProperties(value)  
102              else:              else:
103                  group = lc.GetDefaultGroup()                  record = layer.table.read_record(i)
104                    assert record is not None
105                    group = lc.FindGroup(record[field])
106    
107    
108              if not group.IsVisible():              if not group.IsVisible():
109                  continue                  continue
110    
             prop = group.GetProperties()  
111    
112              # don't recreate new objects if they are the same as before              # don't recreate new objects if they are the same as before
113              if prop != old_prop:              if group is not old_group:
114                  old_prop = prop                  old_group = group
   
                 if shapetype == SHAPETYPE_ARC:  
                     fill = Color.Transparent  
                 else:  
                     fill = prop.GetFill()  
   
       
                 if fill is Color.Transparent:  
                     brush = wxTRANSPARENT_BRUSH  
                 else:  
                     color = Color2wxColour(fill)  
                     brush = wxBrush(color, wxSOLID)  
       
                 stroke = prop.GetLineColor()  
                 stroke_width = prop.GetLineWidth()  
                 if stroke is Color.Transparent:  
                     pen = wxTRANSPARENT_PEN  
                 else:  
                     color = Color2wxColour(stroke)  
                     pen = wxPen(color, stroke_width, wxSOLID)  
115    
116                  self.dc.SetBrush(brush)                  prop = group.GetProperties()
                 self.dc.SetPen(pen)  
       
             if shapetype == SHAPETYPE_POINT:  
                 self.draw_point_shape(layer, i)  
             else:  
                 self.draw_polygon_shape(layer, i, pen, brush)  
117    
118              #count += 1                  if prop != old_prop:
119                        old_prop = prop
120    
121          #end = time.clock()                      if shapetype == SHAPETYPE_ARC:
122          #print (end-start), "seconds -- ", count                          fill = Color.Transparent
123                        else:
124                            fill = prop.GetFill()
125    
126    
127                        if fill is Color.Transparent:
128                            brush = wxTRANSPARENT_BRUSH
129                        else:
130                            color = Color2wxColour(fill)
131                            brush = wxBrush(color, wxSOLID)
132    
133                        stroke = prop.GetLineColor()
134                        stroke_width = prop.GetLineWidth()
135                        if stroke is Color.Transparent:
136                            pen = wxTRANSPARENT_PEN
137                        else:
138                            color = Color2wxColour(stroke)
139                            pen = wxPen(color, stroke_width, wxSOLID)
140    
141                        if shapetype == SHAPETYPE_POINT:
142                            self.dc.SetBrush(brush)
143                            self.dc.SetPen(pen)
144    
145                draw_func(i)
146    
147      def layer_ids(self, layer):      def layer_ids(self, layer):
148          """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.
149            
150          The default implementation simply returns all ids in the layer.          The default implementation simply returns all ids in the layer.
151          Override in derived classes to be more precise.          Override in derived classes to be more precise.
152          """          """
153          return range(layer.NumShapes())          return range(layer.NumShapes())
154    
155      def draw_polygon_shape(self, layer, index, pen, brush):      def polygon_render_param(self, layer):
156          draw_polygon_shape(index, pen, brush)          """Return the low-lever render parameter for the layer"""
157            offx, offy = self.offset
158            return draw_polygon_init(layer.shapefile, self.dc,
159                                     self.map.projection,
160                                     layer.projection,
161                                     self.scale, -self.scale,
162                                     offx, offy)
163    
164        def draw_polygon_shape(self, draw_polygon_info, index, pen, brush):
165            draw_polygon_shape(draw_polygon_info, index, pen, brush)
166    
167      def projected_points(self, layer, index):      def projected_points(self, layer, index):
168          proj = self.map.projection          proj = self.map.GetProjection()
169          if proj is not None:          if proj is not None:
170              forward = proj.Forward              forward = proj.Forward
171          else:          else:
172              forward = None              forward = None
173          proj = layer.projection          proj = layer.GetProjection()
174          if proj is not None:          if proj is not None:
175              inverse = proj.Inverse              inverse = proj.Inverse
176          else:          else:
# Line 278  class ScreenRenderer(MapRenderer): Line 266  class ScreenRenderer(MapRenderer):
266    
267              shapetype = layer.ShapeType()              shapetype = layer.ShapeType()
268              if shapetype == SHAPETYPE_POLYGON:              if shapetype == SHAPETYPE_POLYGON:
269                    offx, offy = self.offset
270                    renderparam = self.polygon_render_param(layer)
271                  func = self.draw_polygon_shape                  func = self.draw_polygon_shape
272                  args = (pen, brush)                  args = (pen, brush)
273              elif shapetype == SHAPETYPE_ARC:              elif shapetype == SHAPETYPE_ARC:
274                    renderparam = self.polygon_render_param(layer)
275                  func = self.draw_polygon_shape                  func = self.draw_polygon_shape
276                  args = (pen, None)                  args = (pen, None)
277              elif shapetype == SHAPETYPE_POINT:              elif shapetype == SHAPETYPE_POINT:
278                    renderparam = layer
279                  self.dc.SetBrush(brush)                  self.dc.SetBrush(brush)
280                  self.dc.SetPen(pen)                  self.dc.SetPen(pen)
281                  func = self.draw_point_shape                  func = self.draw_point_shape
# Line 292  class ScreenRenderer(MapRenderer): Line 284  class ScreenRenderer(MapRenderer):
284                  raise TypeError(_("Unhandled shape type %s") % shapetype)                  raise TypeError(_("Unhandled shape type %s") % shapetype)
285    
286              for index in self.selected_shapes:              for index in self.selected_shapes:
287                  func(layer, index, *args)                  func(renderparam, index, *args)
288    
289    
290      def layer_ids(self, layer):      def layer_ids(self, layer):
291          """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.676  
changed lines
  Added in v.798

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26