/[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 1103 by jonathan, Fri May 30 06:29:25 2003 UTC revision 1434 by jonathan, Wed Jul 16 13:24:39 2003 UTC
# Line 22  from wxPython.wx import wxMemoryDC, wxEm Line 22  from wxPython.wx import wxMemoryDC, wxEm
22      wxImageFromStream, wxBITMAP_TYPE_BMP      wxImageFromStream, wxBITMAP_TYPE_BMP
23    
24  from wxproj import draw_polygon_shape, draw_polygon_init  from wxproj import draw_polygon_shape, draw_polygon_init
 from gdalwarp import ProjectRasterFile  
25    
26  from Thuban.UI.common import Color2wxColour  from Thuban.UI.common import Color2wxColour
27  from Thuban.UI.classifier import ClassDataPreviewer  from Thuban.UI.classifier import ClassDataPreviewer
# Line 34  from Thuban.Model.label import ALIGN_CEN Line 33  from Thuban.Model.label import ALIGN_CEN
33       ALIGN_LEFT, ALIGN_RIGHT, ALIGN_BASELINE       ALIGN_LEFT, ALIGN_RIGHT, ALIGN_BASELINE
34    
35  from Thuban.Model.classification import Classification  from Thuban.Model.classification import Classification
36  from Thuban.Model.color import Color  from Thuban.Model.color import Transparent
37    import Thuban.Model.resource
38    
39    if Thuban.Model.resource.has_gdal_support():
40        from gdalwarp import ProjectRasterFile
41    
42  class MapRenderer:  class MapRenderer:
43    
# Line 78  class MapRenderer: Line 81  class MapRenderer:
81          #          #
82          # This is only a good optimization if there is only one          # This is only a good optimization if there is only one
83          # raster layer and the image covers the entire window (as          # raster layer and the image covers the entire window (as
84          # it currently does).          # it currently does). We note if there is a raster layer
85            # and only begin drawing layers once we have drawn it.
86            # That way we avoid drawing layers that won't be seen.
87          #          #
88          for layer in map.Layers():          if Thuban.Model.resource.has_gdal_support():
89              if isinstance(layer, RasterLayer):              for layer in map.Layers():
90                  seenRaster = False                  if isinstance(layer, RasterLayer) and layer.Visible():
91                  break                      seenRaster = False
92                        break
93    
94          for layer in map.Layers():          for layer in map.Layers():
95              # if honor_visibility is true, only draw visible layers,              # if honor_visibility is true, only draw visible layers,
# Line 91  class MapRenderer: Line 97  class MapRenderer:
97              if not self.honor_visibility or layer.Visible():              if not self.honor_visibility or layer.Visible():
98                  if isinstance(layer, Layer) and seenRaster:                  if isinstance(layer, Layer) and seenRaster:
99                      self.draw_shape_layer(layer)                      self.draw_shape_layer(layer)
100                  elif isinstance(layer, RasterLayer):                  elif isinstance(layer, RasterLayer) \
101                        and Thuban.Model.resource.has_gdal_support():
102                      self.draw_raster_layer(layer)                      self.draw_raster_layer(layer)
103                      seenRaster = True                      seenRaster = True
104    
# Line 112  class MapRenderer: Line 119  class MapRenderer:
119          old_prop = None          old_prop = None
120          old_group = None          old_group = None
121          lc = layer.GetClassification()          lc = layer.GetClassification()
122          field = lc.GetField()          field = layer.GetClassificationField()
123          defaultGroup = lc.GetDefaultGroup()          defaultGroup = lc.GetDefaultGroup()
124    
125    
         if shapetype != SHAPETYPE_POINT:  
             polygon_render_param = self.polygon_render_param(layer)  
   
126          if shapetype == SHAPETYPE_POINT:          if shapetype == SHAPETYPE_POINT:
127              draw_func = lambda i: \              draw_func = self.draw_point_shape
128                     self.draw_point_shape(layer, i)              draw_func_param = layer
129          else:          else:
130              draw_func = lambda i: \              draw_func = draw_polygon_shape
131                     self.draw_polygon_shape(polygon_render_param, i, pen, brush)              draw_func_param = self.polygon_render_param(layer)
132                
133            table = layer.ShapeStore().Table()
134          for i in self.layer_ids(layer):          for i in self.layer_ids(layer):
135    
136              if field is None:              if field is None:
137                  group = defaultGroup                  group = defaultGroup
138              else:              else:
139                  record = layer.table.ReadRowAsDict(i)                  record = table.ReadRowAsDict(i)
140                  assert record is not None                  assert record is not None
141                  group = lc.FindGroup(record[field])                  group = lc.FindGroup(record[field])
142    
# Line 150  class MapRenderer: Line 155  class MapRenderer:
155                      old_prop = prop                      old_prop = prop
156    
157                      if shapetype == SHAPETYPE_ARC:                      if shapetype == SHAPETYPE_ARC:
158                          fill = Color.Transparent                          fill = Transparent
159                      else:                      else:
160                          fill = prop.GetFill()                          fill = prop.GetFill()
161    
162    
163                      if fill is Color.Transparent:                      if fill is Transparent:
164                          brush = wxTRANSPARENT_BRUSH                          brush = wxTRANSPARENT_BRUSH
165                      else:                      else:
166                          color = Color2wxColour(fill)                          color = Color2wxColour(fill)
# Line 163  class MapRenderer: Line 168  class MapRenderer:
168    
169                      stroke = prop.GetLineColor()                      stroke = prop.GetLineColor()
170                      stroke_width = prop.GetLineWidth()                      stroke_width = prop.GetLineWidth()
171                      if stroke is Color.Transparent:                      if stroke is Transparent:
172                          pen = wxTRANSPARENT_PEN                          pen = wxTRANSPARENT_PEN
173                      else:                      else:
174                          color = Color2wxColour(stroke)                          color = Color2wxColour(stroke)
175                          pen = wxPen(color, stroke_width, wxSOLID)                          pen = wxPen(color, stroke_width, wxSOLID)
176    
177                      if shapetype == SHAPETYPE_POINT:              draw_func(draw_func_param, i, pen, brush)
                         self.dc.SetBrush(brush)  
                         self.dc.SetPen(pen)  
   
             draw_func(i)  
178    
179      def draw_raster_layer(self, layer):      def draw_raster_layer(self, layer):
180          data = None          data = None
# Line 228  class MapRenderer: Line 229  class MapRenderer:
229      def polygon_render_param(self, layer):      def polygon_render_param(self, layer):
230          """Return the low-lever render parameter for the layer"""          """Return the low-lever render parameter for the layer"""
231          offx, offy = self.offset          offx, offy = self.offset
232          return draw_polygon_init(layer.shapefile, self.dc,          return draw_polygon_init(layer.ShapeStore().Shapefile(), self.dc,
233                                   self.map.projection,                                   self.map.projection,
234                                   layer.projection,                                   layer.projection,
235                                   self.scale, -self.scale,                                   self.scale, -self.scale,
# Line 265  class MapRenderer: Line 266  class MapRenderer:
266          points = self.projected_points(layer, index)          points = self.projected_points(layer, index)
267          self.dc.DrawLines(points)          self.dc.DrawLines(points)
268    
269      def draw_point_shape(self, layer, index):      def draw_point_shape(self, layer, index, pen, brush):
270          pp = self.projected_points(layer, index)          pp = self.projected_points(layer, index)
271    
272          if len(pp) == 0: return # ignore Null Shapes which have no points          if len(pp) == 0: return # ignore Null Shapes which have no points
273    
274          p = pp[0]          p = pp[0]
275          radius = self.resolution * 5          radius = self.resolution * 5
276            self.dc.SetBrush(brush)
277            self.dc.SetPen(pen)
278          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)
279    
280      def draw_label_layer(self, layer):      def draw_label_layer(self, layer):
# Line 507  class ExportRenderer(ScreenRenderer): Line 510  class ExportRenderer(ScreenRenderer):
510          # Render the legend          # Render the legend
511          dc.SetTextForeground(wxBLACK)          dc.SetTextForeground(wxBLACK)
512          if map.HasLayers():          if map.HasLayers():
513              for l in map.Layers():              layers = map.Layers()
514                layers.reverse()
515                for l in layers:
516                  if l.Visible():                  if l.Visible():
517                      # Render title                      # Render title
518                      dc.DrawText(l.Title(), posx, posy)                      dc.DrawText(l.Title(), posx, posy)
519                      posy+=stepy                      posy+=stepy
520                      # Render classification                      if l.HasClassification():
521                      clazz = l.GetClassification()                          # Render classification
522                      shapeType = l.ShapeType()                          clazz = l.GetClassification()
523                      for g in clazz:                          shapeType = l.ShapeType()
524                          if g.IsVisible():                          for g in clazz:
525                              previewer.Draw(dc,                              if g.IsVisible():
526                                  wxRect(posx+dx, posy, iconwidth, iconheight),                                  previewer.Draw(dc,
527                                  g.GetProperties(), shapeType)                                      wxRect(posx+dx, posy,
528                              dc.DrawText(g.GetDisplayText(),                                             iconwidth, iconheight),
529                                          posx+2*dx+iconwidth, posy)                                      g.GetProperties(), shapeType)
530                              posy+=stepy                                  dc.DrawText(g.GetDisplayText(),
531                                                posx+2*dx+iconwidth, posy)
532                                    posy+=stepy
533                    
534      def render_scalebar(self, map):      def render_scalebar(self, map):
535          """Render the scalebar."""          """Render the scalebar."""

Legend:
Removed from v.1103  
changed lines
  Added in v.1434

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26