/[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 938 by jonathan, Tue May 20 15:25:10 2003 UTC revision 1343 by jonathan, Tue Jul 1 16:11:08 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 72  class MapRenderer: Line 75  class MapRenderer:
75          self.map = map          self.map = map
76          seenRaster = True          seenRaster = True
77    
78            if self.scale == 0:
79                return
80    
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 88  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 122  class MapRenderer: Line 132  class MapRenderer:
132          else:          else:
133              draw_func = lambda i: \              draw_func = lambda i: \
134                     self.draw_polygon_shape(polygon_render_param, i, pen, brush)                     self.draw_polygon_shape(polygon_render_param, i, pen, brush)
135                
136            table = layer.ShapeStore().Table()
137          for i in self.layer_ids(layer):          for i in self.layer_ids(layer):
138    
139              if field is None:              if field is None:
140                  group = defaultGroup                  group = defaultGroup
141              else:              else:
142                  record = layer.table.ReadRowAsDict(i)                  record = table.ReadRowAsDict(i)
143                  assert record is not None                  assert record is not None
144                  group = lc.FindGroup(record[field])                  group = lc.FindGroup(record[field])
145    
# Line 147  class MapRenderer: Line 158  class MapRenderer:
158                      old_prop = prop                      old_prop = prop
159    
160                      if shapetype == SHAPETYPE_ARC:                      if shapetype == SHAPETYPE_ARC:
161                          fill = Color.Transparent                          fill = Transparent
162                      else:                      else:
163                          fill = prop.GetFill()                          fill = prop.GetFill()
164    
165    
166                      if fill is Color.Transparent:                      if fill is Transparent:
167                          brush = wxTRANSPARENT_BRUSH                          brush = wxTRANSPARENT_BRUSH
168                      else:                      else:
169                          color = Color2wxColour(fill)                          color = Color2wxColour(fill)
# Line 160  class MapRenderer: Line 171  class MapRenderer:
171    
172                      stroke = prop.GetLineColor()                      stroke = prop.GetLineColor()
173                      stroke_width = prop.GetLineWidth()                      stroke_width = prop.GetLineWidth()
174                      if stroke is Color.Transparent:                      if stroke is Transparent:
175                          pen = wxTRANSPARENT_PEN                          pen = wxTRANSPARENT_PEN
176                      else:                      else:
177                          color = Color2wxColour(stroke)                          color = Color2wxColour(stroke)
# Line 189  class MapRenderer: Line 200  class MapRenderer:
200              for p in proj.GetAllParameters():              for p in proj.GetAllParameters():
201                  outProj += "+" + p + " "                  outProj += "+" + p + " "
202    
         print "self.scale: ", self.scale, offx, offy, width, height  
203          xmin = (0 - offx) / self.scale          xmin = (0 - offx) / self.scale
204          ymin = (offy - height) / self.scale          ymin = (offy - height) / self.scale
205          xmax = (width - offx) / self.scale          xmax = (width - offx) / self.scale
# Line 200  class MapRenderer: Line 210  class MapRenderer:
210                  layer.GetImageFilename(),                  layer.GetImageFilename(),
211                  inProj,                  inProj,
212                  outProj,                  outProj,
213                  str(xmin), str(ymin), str(xmax), str(ymax),                  (xmin, ymin, xmax, ymax),
214                  "", str(width), str(height));                  "", (width, height))
215          except (AttributeError, IOError, ValueError):          except IOError, (strerr):
216                print strerr
217            except (AttributeError, ValueError):
218              pass              pass
219          else:          else:
220              if data is not None:              if data is not None:
# Line 224  class MapRenderer: Line 236  class MapRenderer:
236      def polygon_render_param(self, layer):      def polygon_render_param(self, layer):
237          """Return the low-lever render parameter for the layer"""          """Return the low-lever render parameter for the layer"""
238          offx, offy = self.offset          offx, offy = self.offset
239          return draw_polygon_init(layer.shapefile, self.dc,          return draw_polygon_init(layer.ShapeStore().Shapefile(), self.dc,
240                                   self.map.projection,                                   self.map.projection,
241                                   layer.projection,                                   layer.projection,
242                                   self.scale, -self.scale,                                   self.scale, -self.scale,
# Line 503  class ExportRenderer(ScreenRenderer): Line 515  class ExportRenderer(ScreenRenderer):
515          # Render the legend          # Render the legend
516          dc.SetTextForeground(wxBLACK)          dc.SetTextForeground(wxBLACK)
517          if map.HasLayers():          if map.HasLayers():
518              for l in map.Layers():              layers = map.Layers()
519                layers.reverse()
520                for l in layers:
521                  if l.Visible():                  if l.Visible():
522                      # Render title                      # Render title
523                      dc.DrawText(l.Title(), posx, posy)                      dc.DrawText(l.Title(), posx, posy)
524                      posy+=stepy                      posy+=stepy
525                      # Render classification                      if l.HasClassification():
526                      clazz = l.GetClassification()                          # Render classification
527                      shapeType = l.ShapeType()                          clazz = l.GetClassification()
528                      for g in clazz:                          shapeType = l.ShapeType()
529                          if g.IsVisible():                          for g in clazz:
530                              previewer.Draw(dc,                              if g.IsVisible():
531                                  wxRect(posx+dx, posy, iconwidth, iconheight),                                  previewer.Draw(dc,
532                                  g.GetProperties(), shapeType)                                      wxRect(posx+dx, posy,
533                              dc.DrawText(g.GetDisplayText(),                                             iconwidth, iconheight),
534                                          posx+2*dx+iconwidth, posy)                                      g.GetProperties(), shapeType)
535                              posy+=stepy                                  dc.DrawText(g.GetDisplayText(),
536                                                posx+2*dx+iconwidth, posy)
537                                    posy+=stepy
538                    
539      def render_scalebar(self, map):      def render_scalebar(self, map):
540          """Render the scalebar."""          """Render the scalebar."""

Legend:
Removed from v.938  
changed lines
  Added in v.1343

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26